Laravel 8 logging AWS Cloudwatch

Tram Ho

Mở đầu

Logging là một việc cực kì quan trọng, và Cloudwatch là một nền tảng visualize và query log khá tốt đến từ AWS, chắc chắn các hệ thống trên AWS thường đều log tới e này, hôm nay mình xin giới thiệu cách để laravel 8 có thể dễ dàng push log tới Cloudwatch, bắt đầu thôi

Cách implement

Cài package

Tạo class CloudWatchLoggerFactory để tạo drive custom push lên cloudwatch

Trong config/logging.php, thêm setting driver custom cho loại log này

Lựa chọn exception hợp lí để push lên cloudwatch, ở đây mình sẽ edit trong app/Exceptions/Handler.php, đây là nơi laravel hỗ trợ cho chúng ta custom cho toàn bộ quá trình handle Exception, bao gồm việc logging error và format response error của API, như lỗi 404 thì trả về thế nào, lỗi 500 thì trả về thế nào, … về phần mình, mình đính kèm thêm param request vào lỗi, như vậy chúng ta sẽ nắm bắt được chính xác request nào đã gây ra lỗi, thuận tiện hơn cho việc debug.

Như các bạn thấy, các lỗi common như RouteNotFoundException hay NotFoundHttpException hoặc ValidationException, là do user nhập sai url hoặc form input thôi, nên ko đủ quan trọng để chúng ta phải log lại để điều tra :#)

Hàm log lỗi thêm param request:

Đừng quên chọn driver logging đúng với môi trường cần log cloudwatch nhé (thường là STG và PROD)

Thêm 2 helper để viết log trong code được tiện lợi hơn

Cách filter trên cloudwatch thuận tiện cho việc đọc log

Dựa trên việc log phía trên, mình có 1 số cách query đọc log thuận tiện hơn

  • query log lấy 20 cái gần nhất

  • query get số lượng message chứa Exception trong vòng 1h

  • query log không chứa Exception

  • query đọc log lỗi đến từ API product

Tham khảo: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html

Hy vọng việc logging cloudwatch với laravel sẽ cực kì dễ dàng cho bà con, thanks for reading

Chia sẻ bài viết ngay