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で台無しにする失敗例でした。