Có ứng dụng viết bằng spring boot, ghi log text ra file application.log. Nhiều chỗ bắt Exception nhưng vẫn dùng logger.info chứ không dùng logger.error. Lúc có vấn đề thường phải vào log text để search, hơi mất thời gian. Bài toán đặt ra là dùng filebeat, logstash và elasticsearch hiện có trên hệ thống để nhặt riêng những log liên quan tới exception lên elasticsearch, sau đó theo dõi bằng kibana
Do exception thường có nhiều dòng nên sẽ phải dùng multiline khi cài đặt cho filebeat
Ý tưởng là: Nhặt các đoạn log theo dấu hiệu bắt đầu bằng thời gian YYYY-mm-dd ở đầu dòng, không quan tâm log level là INFO, WARN, DEBUG hay ERROR. Sau đó dùng processors để "drop_event" vứt bỏ những đoạn log không liên quan tới exception đi. Ban đầu mình để điều kiện drop_event là những đoạn log đó không có chứa " WARN " hoặc " ERROR ". Tuy nhiên như phía trên đã nói nhiều chỗ code đang bắt Exception nhưng ghi log không dùng logger.error mà dùng logger.info nên điều kiện đó sẽ bỏ mất nhiều log
Cân nhắc cuối cùng lựa chọn drop_event khi đoạn log không có chứa "Exception: " với config yml của filebeat như sau:
processors:
- drop_event.when.not.contains.message: "Exception: "