2016-07-12 42 views
3

我試圖配置一個rsyslog服務器以接收來自docker容器的日誌。我目前usinsg以下突擊隊運行泊塢窗容器:Docker rsyslog驅動程序在實際消息之前添加消息長度

sudo docker run -d --log-driver=syslog --log-opt syslog-address=udp://localhost:514 --log-opt syslog-format=rfc5424 --log-opt tag="remote:shouldshow" alpine echo "some random message" 

我使用rfc5424因爲碼頭工人的標準日誌格式rsyslog現在休息的冒號的消息,劈裂標籤遠程:shouldshow和添加應顯示的消息。 https://github.com/docker/docker/issues/18712

的問題是,我從碼頭工人過來日誌消息有消息前附加的三位數字,如127下面的例子(從rsyslog現在rawmsg屬性):

對這種情況更多資訊
127 <30>1 2016-07-12T00:51:13-03:00 vitor-Lenovo-G50-70 docker/remote:shouldshow 2910 docker/remote:shouldshow some random message 

當我嘗試使用像APP-NAME或syslogtag這樣的系統日誌屬性時,它們都具有< 30> 1作爲其值。

我抄這條消息沒有127,它通過netcat的發送到syslog服務器,值正確分析,像這樣:

echo '<30>1 2016-07-12T00:15:53-03:00 vitor-Lenovo-G50-70 docker/remote:shouldshow 2910 docker/remote:shouldshow some random message' | nc -u -v localhost 514 

任何人有任何想法,爲什麼發生這種情況?任何幫助將非常感激。提前致謝。

尋找碼頭代碼我發現這三位數字是郵件的長度。儘管如此,我仍面臨同樣的問題,rsyslog無法正確解析此消息,包括它在實際日誌消息之前的長度。

回答

3

經過很多努力,我已經找到了答案。事實證明,如果您將Docker日誌驅動程序配置爲使用RFC5424系統日誌格式,則Docker會使用一個使用RFC5425標準發送系統日誌消息的庫,該標準定義了通過TLS發送系統日誌消息的標準方式。 https://tools.ietf.org/html/rfc5425

因此,如果您將Docker日誌驅動程序配置爲使用TLS,並將您的rsyslog服務器配置爲接收加密消息,則rsyslog會正確解析消息。