今回起きた事象
logstahで取り込み対象としているlogが欠損している事象が発生していた。
パターンとしては、ログが全く取り込みされない場合やちぎれてしまう場合等
生log
・パターン1
{"log":"test1\n","stream":"stderr","time":"2022-02-14T11:47:48.5369218Z"}
・パターン2
{"log":"test1\n","stream":"stderr","time":"2022-02-14T11:47:48.5369218Z"}
取り込み後
・パターン1(全く取り込みされない)
N/A
・パターン2(ちぎれる)
022-02-14T11:47:48.5369218Z"}
結論
上記の事象が発生していた原因は、i-nodeが再利用されていることが原因だった。
詳細については、以下に記載していく。
Logstashのアーキテクチャ
今回欠損している箇所は下記のInput Pluginでログが欠損していることが分かった。
引用
https://www.elastic.co/jp/blog/a-practical-introduction-to-logstash
さらにInput Plguinは、追跡しているファイルをi-nodeから判別しておりどこまで取り込んだかsincedbで管理している。
i-nodeの再利用問題
ファイルシステムの仕様により、ファイルの削除から作成までの間隔が短いとi-nodeが再利用される場合がある。
sincedbにはi-node単位でどこまで処理しているかが保存されているため、inodeが重複してしまうと過去に処理した所まで無視されてしまう。
短い周期でlog fileが作成/削除を繰り返す環境の場合、sincedb_clean_afterをチューニングしてログ欠損しないような工夫が必要になる。