Elasticsearch
失敗談
Logstash
ログ解析
メモ書き

Logstashでログの取り込みに失敗した話(日付の処理で)

More than 1 year has passed since last update.

Logstash失敗事例その1

月が変わってログデータの取り込みが失敗するようになったため、うまくいくパターン、うまくいかないパターンを調査した。

ログのパターン 結果
Aug 15 00:00:01 … うまくいく
Sep 7 00:00:01 … うまくいかない

原因

日付が1桁の場合のmatch条件の考慮がなかった。

logstash.conf修正前
match => [ "logdate", "MMM dd yyyy HH:mm:ss" ]

*logdateというフィールドを作って、それをtimestampとして採用していた。

解決策

公式ページを頼りに、以下の通りに修正して解決。

logstash.conf修正後
match => [ "logdate", "MMM dd yyyy HH:mm:ss",
          "MMM  d yyyy HH:mm:ss", "ISO8601" ]

おまけ

なお、
grok-patternファイルの初期値にある、SYSLOGTIMESTAMPの記述の「+」は、スペースが「0もしくは複数」ということらしく、
MMM[space]dd
MMM[space][space]d のように日付が1桁の場合にも対応していた。

MONTH \b(?:[Jj]an(?:uary|uar)?|[Ff]eb(?:ruary|ruar)?|[Mm](?:a|ä)?r(?:ch|z)?|[Aa]pr(?:il)?|[Mm]a(?:y|i)?|[Jj]un(?:e|i)?|[Jj]ul(?:y)?|[Aa]ug(?:ust)?|[Ss]ep(?:tember)?|[Oo](?:c|k)?t(?:ober)?|[Nn]ov(?:ember)?|[Dd]e(?:c|z)(?:ember)?)\b
MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])

SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}

基本のtimestampは、しっかり問題を押さえていたようで…。

以上、パース自体は動作するものの、matchで台無しにする失敗例でした。