簡體   English   中英

將docker容器日志發送到logstash的最佳方法

[英]best way to send docker container logs to logstash

假設我在容器(docker)中運行Nginx。
訪問日志和錯誤日志通過Dockerfile中的STDOUT發送:

# 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似乎是一個優雅的解決方案,用於在logstash中發送容器的STDOUT(使用syslog輸入配置)

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

但logspout不知道通過STDOUT發送的日志格式(或者我錯過了什么?)

所以我必須做以下事情:

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

但那么nginx錯誤日志呢? 如果我通過STDOUT發送php-fpm日志怎么辦? logspout如何管理這個?

另一個解決方案是運行rsyslog來設置容器並將收集的日志發送到logstatsh的輸入...

你可以看到它對我來說並不是很清楚...我希望能夠將nginx和php-fpm日志發送到logstash,這樣它們就可以被解釋為它們是什么......但我找不到“良好做法“......

你能幫我嗎

你現在可以用一點意大利風格的管道來做到這一點。

在較新版本的Docker中,有一個GELF輸出驅動程序 ,您可以配置它來發送日志。 由於logstash具有GELF輸入插件 ,因此您可以配置logstash以接收相同的日志消息,並對它們執行一些有用的操作。

另一種選擇,如果你願意,以避免GELF翻譯往返,是使用logspout-logstash ,一個logstash輸出插件logspout ,讀取日志條目,因為他們出來泊塢窗。

附錄:自從這個答案最初編寫以來,我一直活躍在這個領域,並且已經構建了mobystash作為logspout-logstash的更現代和可管理的替代品,以及用於直接從/dev/log套接字獲取syslog消息的syslogstash把它們放在logstash中。

我剛剛注意到最新版本的nginx可以配置為登錄網絡syslog守護進程。

自1.7.1版以來,可以登錄到syslog。

使用此方法,您可以在logstash中的專用UDP端口上配置syslog輸入過濾器,然后您即可參加比賽。

不幸的是,v1.7.1在官方回購中還有很長的路要走。 你需要一個日志托運人地方

  1. 在nginx容器中。
  2. 在使用'--volumes-from'的並行容器中訪問nginx容器。
  3. 在具有綁定到主機文件系統的卷的docker主機上。

您有許多可供選擇的日志托運人以及專門針對該主題的The Logstash Book免費章節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM