2016-09-07 86 views
0

我正在使用docker-compose並希望使用'gelf'日誌記錄驅動程序將單個容器日誌記錄發送到同一個撰寫中定義的logstash容器。如何將碼頭日誌收集到特定碼頭集裝箱中?

在'gelf-address'中使用其中一個「邏輯」主機名給我一個未定義的錯誤,使用'ipv4_address'的(非最優)解決方案似乎也不起作用。

我知道這樣我可能會因啓動順序而失去一些初始日誌消息,但這很好。它使測試更加容易,因爲它包含了對特定設置的日誌記錄。

任何聰明的解決方案如何解決這個問題?

+0

我已經與logspout成功。從來沒有聽說過gelf –

回答

0

@cricket_007發表評論,參考logspout讓我走上正軌。它直接連接到/var/run/docker.sock並從那裏獲取日誌,並且當它在普通容器中運行時,它具有所有可用的路由信息​​。

唯一的問題是,它似乎只抓取日誌從它變得活躍的時間,所以人們會錯過真正的早期日誌。但是,這是我願意支付的價格。連接到logstash也是一個痛苦,因爲這似乎需要很長時間才能出現。

另一個很好的參考是Gary A. Stafford's"Containerized Microservice Log Aggregation and Visualization using ELK Stack and Logspout"

0

從您的作品中查找主機名將會非常棘手。服務名稱保存在Docker內部DNS解析器中。運行容器的Docker主機無法解析這些地址,因此您可能需要將靜態IP用於日誌記錄容器。

當主機將.1地址分配給橋接口時,Docker主機應該能夠通過用戶定義的橋接網絡連接到容器ipv4_address。我不確定這是否適用於覆蓋網絡。

您還可以在日誌容器上創建其他服務depends_on,以便至少首先啓動它。

如果有人正在使用fluentd嘗試此操作,則可能需要fluentd-async-connect選項,以便容器不會阻止嘗試打開與日誌記錄容器的連接。