我一直在試圖設置一個自定義的多行日誌解析器來獲取帶有一些可讀字段的Stackdriver日誌。目前,它看起來像這樣:Stackdriver自定義多行日誌記錄,時間格式
<source>
type tail
read_from_head true
path /root/ansible.log
pos_file /var/lib/google-fluentd/pos/ansible.pos
time_format "%a %b %e %T %Z %Y"
format multiline
format_firstline /Started ansible run at/
format1 /Started ansible run at (?<timestart>[^\n]+)\n(?<body>.*)/
format2 /PLAY RECAP.*/
format3 /ok=(?<ok>\d+)\s+changed=(?<changed>\d+)\s+unreachable=(?<unreachable>\d+)\s+failed=(?<failed>\d+).*/
format4 /Finished ansible run at (?<timeend>[^\n]+)/
tag ansible
</source>
它的完成的規格爲http://docs.fluentd.org/v0.12/articles/parser_multiline,和它的作品。但它沒有適當的時間戳 - timestart
和timeend
只是json中的簡單字段。所以在當前狀態下,time_format
設置是無用的,因爲我在正則表達式中沒有time
變量。這樣可以彙總我所需要的所有變量,當我運行fluend服務時,日誌會顯示在Stackdriver中,而且幾乎都很快樂。
但是,當我將其中一個時間變量的名稱更改爲time
時,試圖爲條目實際分配一個Stackdriver時間戳,它不起作用。機器上流利的日誌表示工作人員啓動並解析了所有內容,但根本沒有在Stackdriver控制檯中顯示日誌。
timestart
和timeend
看起來像Fri Jun 2 20:39:58 UTC 2017
或沿着這些線。時間格式的規格是http://ruby-doc.org/stdlib-2.4.1/libdoc/time/rdoc/Time.html#method-c-strptime,我已經檢查過並重複檢查了太多次,我無法弄清楚我做錯了什麼。
編輯:另一個細節:當我試圖解析出time
變量,而日誌沒有在爲Stackdriver控制檯顯示,選擇合適的標籤(在這種情況下ansible
)在標籤列表中顯示。只是結果是空的。
除,正如我所說,我沒有看到在fluentd日誌中的任何錯誤,fluentd日誌說一切正常,它只是日誌唐不會出現在Stackdriver中。至於時間格式,我已經嘗試在上面的塊中使用'%a%b%e%T%Z%Y',所以我只是想知道爲什麼我的方法不工作。 – snetch