Logstash
年度翻轉的logstash時間戳
我們使用 logstash 來儲存/搜尋來自我們郵件伺服器的日誌。我今天注意到今年(2015 年)我們沒有任何指數。快速調查顯示目前日誌儲存為 2014.01.05(即同一天但去年),並且這些索引正在被查找舊索引的 cron 作業刪除。
重新啟動 logstash 修復了一些問題,所以我假設 logstash 正在根據它開始的時間填寫年份資訊。
我們使用 Elasticsearch 1.2.4 執行 Logstash 1.4.1。所以不是最新版本的 Elasticsearch,但我在 1.4.2 的更新日誌中看不到任何相關內容。
使用下面的 syslog - config 將日誌條目連同輸入行和解析輸出的範例一起發送到 logstash。
有沒有比記得在元旦重新啟動 Logstash 更好的解決方法?
輸入線範例
Jan 5 15:03:35 cheviot22 exim[15034]: 1Y89Bv-0003uU-DD <= redmine@ncl.ac.uk H=adudeviis.ncl.ac.uk (campus) [10.8.232.56] P=esmtp S=2548 id=redmine.journal-1487.20150105150334@ncl.ac.uk { "_index": "logstash-2014.01.05", "_type": "mails", "_id": "HO0TQs66SA-1QkQBYd9Jag", "_score": null, "_source": { "@version": "1", "@timestamp": "2014-01-05T15:03:35.000Z", "type": "mails", "priority": 22, "timestamp": "Jan 5 15:03:35", "logsource": "cheviot22", "program": "exim", "pid": "15034", "severity": 6, "facility": 2, "facility_label": "mail", "severity_label": "Informational", "msg": "1Y89Bv-0003uU-DD <= redmine@ncl.ac.uk H=adudeviis.ncl.ac.uk (campus) [10.8.232.56] P=esmtp S=2548 id=redmine.journal-1487.20150105150334@ncl.ac.uk", "tags": [ "grokked", "exim_grokked", "dated" ], "xid": "1Y89Bv-0003uU", "exim_rcpt_kv": "redmine@ncl.ac.uk H=adudeviis.ncl.ac.uk (campus) [10.8.232.56] P=esmtp S=2548 id=redmine.journal-1487.20150105150334@ncl.ac.uk", "H": "adudeviis.ncl.ac.uk", "P": "esmtp", "S": "2548", "id": "redmine.journal-1487.20150105150334@ncl.ac.uk" }, "sort": [ 1388934215000, 1388934215000 ] }
Logstash 配置(刪除了不相關的位)…
input { syslog { codec => "plain" debug => false port => 514 type => "mails" } } filter { mutate { remove_field => [ "path", "host" ] } if [type] == "mails" { grok { patterns_dir => [ "/etc/logstash/patterns" ] match => [ "message", "(?<msg>.*)" ] add_tag => [ "grokked" ] break_on_match => true remove_field => [ "message" ] } } date { match => [ "timestamp", "ISO8601", "MMM dd HH:mm:ss", "MMM d HH:mm:ss"] add_tag => [ "dated" ] } } output { elasticsearch { cluster => "logstash" host => "iss-logstash01" flush_size => 1000 index => "logstash-%{+YYYY.MM.dd}" } }
在 logstash-users Google 組中找到了一個回答指針(這讓我忘記了)。最近的討論指向https://logstash.jira.com/browse/LOGSTASH-1744,它 (a) 確認其他人看到的和我一樣,並且 (b) 提供了幾個可能的解決方案。
選項 1 是 Elasticsearch 的一個更新檔(不在標準發行版中),它更新了 Logstash 對當年的想法。
選項 2 是不解析來自 syslog 行的時間戳,而僅依賴於消息到達 Logstash 的時間。這對我們來說可能是一個可以接受的解決方案,因為行的順序比確切的時間更重要(只要它很接近)。