Tại sao bạn dựa vào nhật ký/var/log/tin cho nhật ký ứng dụng của mình? Theo tôi, nhật ký ứng dụng của bạn phải độc lập.
Giả sử bạn có một java, ruby, python, nút, ứng dụng golang (Dù), sau đó bạn có thể bơm nhật ký trong vùng chứa vào cái gì đó như /var/log/myapp/myapp.log. Chạy nhật ký của bạn forwarder trong vùng chứa của bạn để chuyển tới tất cả mọi thứ của ELK theo /var/log/myapp/myapp.log
Nói chung, người gửi hàng sẽ hiển thị tên máy chủ là container_id của bạn dựa trên biến số en2 HOSTNAME
. Ví dụ:
[[email protected] ~]# env | grep HOSTNAME
HOSTNAME=1dfab5ea15cd
[[email protected] ~]#
Bạn cũng có thể sử dụng giống như Beaver hoặc log-courier để vận chuyển các bản ghi của bạn.
Bạn có thể xoay nhật ký và xóa nhật ký cũ nếu lo ngại về dung lượng đĩa.
Vì vậy, nếu bạn muốn sử dụng lệnh docker logs
để chuyển hướng đến STDOUT và STDERR, bạn sẽ yêu cầu ứng dụng viết một bản ghi xác định vùng chứa/ứng dụng. (Container có thể là tên máy chủ một lần nữa) Nhưng bạn có thể chuyển hướng đến /var/log/app/application.log
trên máy chủ. Một cái gì đó như:
containerid/<hostname>-application: INFO: <message>
Đừng nghĩ có bất kỳ cách nào khác ...
Bạn cũng có thể chuyển sang Fluentd thay vì Logstash như một tùy chọn.
Bản ghi 'docker-compose -f'có thể đủ, nếu đó là cách bạn bắt đầu chúng –