2015-03-04 13 views
8

Hãy nói tôi có Nginx chạy bên trong một container (Docker).
Nhật ký truy cập và lỗi bản ghi được gửi thông qua STDOUT, trong Dockerfile:cách tốt nhất để gửi các bản ghi chứa Docker để logstash

# forward request and error logs to docker log collector 
RUN ln -sf /dev/stdout /var/log/nginx/access.log 
RUN ln -sf /dev/stderr /var/log/nginx/error.log 

Logspout dường như một giải pháp thanh lịch để gửi STDOUT của container của bạn bên trong logstash (cấu hình với một đầu vào syslog)

input { 
    syslog { 
     type => syslog 
     port => 5514 
    } 
} 

Nhưng logout không có ý tưởng về các định dạng của nhật ký được gửi qua STDOUT (Hoặc tôi thiếu một cái gì đó?)

Vì vậy, tôi phải làm một cái gì đó như:

input { 
    syslog { 
     type => nginx-access 
     port => 5514 
    } 
} 

Nhưng sau đó về nhật ký lỗi nginx thì sao? Và nếu tôi gửi bản ghi php-fpm thông qua STDOUT thì sao? Logspout quản lý điều này như thế nào?

Một giải pháp khác là chạy rsyslog indose container và gửi các bản ghi thu tới đầu vào của logstatsh ...

Như bạn có thể nhìn thấy nó không thực sự rõ ràng cho tôi ... Tôi muốn để có thể để gửi nginx và php-fpm bản ghi để logstash để họ có thể được hiểu là những gì họ đang ... nhưng tôi không tìm thấy một "thực hành tốt" ...

bạn có thể giúp tôi xin vui lòng

Trả lời

1

tôi chỉ nhận thấy rằng recent versions of nginx can be configured to log to network syslog daemons.

Ghi nhật ký vào nhật ký hệ thống có sẵn kể từ phiên bản 1.7.1.

Sử dụng tính năng này, bạn có thể định cấu hình bộ lọc đầu vào syslog trên cổng UDP chuyên dụng trong quá trình đăng xuất và bạn thoát khỏi cuộc đua.

Thật không may, v1.7.1 là một chặng đường dài trong Repos chính thức. Bạn cần có người gửi nhật ký ở đâu đó.

  1. Trong hộp nginx.
  2. Trong vùng chứa song song sử dụng '--volumes-from' để truy cập vào thùng chứa nginx.
  3. Trên máy chủ lưu trữ đế với khối lượng được liên kết với hệ thống tệp máy chủ lưu trữ.

Bạn có nhiều chủ hàng đăng nhập để chọn và free chapter of The Logstash Book dedicated to the subject.

7

Bạn có thể làm điều này, bây giờ, với một chút phong cách Ý ống nước.

Trong các phiên bản Docker mới hơn, có a GELF output driver, bạn có thể định cấu hình để gửi nhật ký. Kể từ khi logstash có a GELF input plugin, bạn có thể định cấu hình đăng nhập thành nhận được các thông điệp nhật ký tương tự đó và thực hiện điều gì đó hữu ích với chúng.

Một tùy chọn khác, nếu bạn muốn tránh vòng dịch GELF, hãy sử dụng logspout-logstash, plugin đầu ra logstash cho logspout, đọc mục nhập nhật ký khi chúng thoát ra khỏi Docker.

+0

Đây phải là câu trả lời được chấp nhận. – Subfuzion

+0

Điều quan trọng cần lưu ý là trình điều khiển đầu ra GELF chỉ sử dụng UDP (kể từ ngày 20.04.2017) để các gói có thể bị mất nếu logstash nằm trên một số máy khác. – herm

+0

Đó là một điều tốt để ghi nhớ. – womble

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