2016-05-12 13 views
6

Tôi đang sử dụng graylog làm máy chủ ghi nhật ký trung tâm và tôi đang sử dụng ứng dụng log4j2 gelf để gửi thông báo tường trình tới graylog. Điều này hoạt động tốt. Bây giờ tôi tạo ra một hình ảnh docker của ứng dụng của tôi và tôi có thể chạy phần mềm của tôi như là docker container.Phương pháp hay nhất để gửi nhật ký tới graylog từ ứng dụng JVM chạy trong vùng chứa docker là gì?

Sử dụng docker tôi cũng đăng nhập vào stdout (console-appender) để đăng nhập ứng dụng vào docker (docker logs {containerId}).

Bây giờ tôi tự hỏi bản thân mình có thể rảnh rỗi trên ứng dụng log4j2 của gelf và sử dụng thay cho trình điều khiển đăng nhập docker/plugin cho gelf. (xem https://docs.docker.com/engine/admin/logging/overview/)

Thực tiễn tốt nhất ở đây là gì? Tôi nghĩ rằng việc sử dụng plugin nhật ký docker sẽ gửi toàn bộ chuỗi thông báo tới graylog và graylog sẽ cần trích xuất thông tin meta từ chuỗi đó (vì vậy tôi cần cung cấp dữ liệu meta này trong thông điệp nhật ký, ví dụ: log_level). Điều này có thể gây ra nhiều tiêu thụ tài nguyên hơn ở phía graylog và cũng không thể định cấu hình trình docker để chỉ gửi các thông báo lỗi tới graylog. Điều này dẫn đến lưu lượng truy cập mạng nhiều hơn. Sử dụng log4j2 gelf-appender tôi có thể cung cấp một số dữ liệu meta bổ sung cho thông điệp tường trình mà không bao gồm nó trong thông điệp tường trình chính và sẽ không có một khai thác cần thiết về phía graylog. Cũng có thể định cấu hình các tin nhắn nào sẽ được gửi tới graylog bởi log_level. Hoặc là tôi sai? Giải pháp tốt nhất hoặc những ưu và khuyết điểm của mỗi cách gửi nhật ký tới graylog là gì?

Trả lời

4

Tôi khuyên bạn nên sử dụng trình bổ sung GELF hiện có cho khung ghi nhật ký bạn đang sử dụng (e. G. logstash-gelf) thay vì ghi nhật ký mọi thứ để xuất chuẩn và sử dụng trình điều khiển nhật ký GELF của Docker.

Sử dụng trình bổ sung GELF phù hợp với khung công tác ghi nhật ký Java cho phép bạn sử dụng các tính năng nâng cao như MDC để làm phong phú thông điệp đăng nhập với thông tin có cấu trúc có giá trị mà không phải phân tích lại các thư đó sau khi nhận chúng. Với trình điều khiển ghi nhật ký GELF của Docker, bạn chỉ nhận được các thông điệp tường trình trên mỗi dòng, đặc biệt là với các ứng dụng Java có thể là một sự nhức đầu để giải quyết (nghĩ các dấu vết ngăn xếp nhiều dòng).

Hầu hết các khung đăng nhập đều hỗ trợ các trường tĩnh, do đó bạn có thể "tiêm" ID của vùng chứa Docker của mình chẳng hạn.

Các vấn đề liên quan