Logstash + Elasticsearch + Kibanaを使用して、Tomcatログファイルの概要を把握しています。
各ログエントリについて、それが由来するファイルの名前を知る必要があります。フィールドとして追加したいと思います。それを行う方法はありますか?私は少しグーグルで検索しました this SO question ですが、答えは最新ではありません。
これまでのところ、唯一の解決策は、次のように異なる「add_field」を使用して、可能性のあるファイル名ごとに個別の構成を指定することです。
input {
file {
type => "catalinalog"
path => [ "/path/to/my/files/catalina**" ]
add_field => { "server" => "prod1" }
}
}
ただし、新しいファイル名が見つかるたびにlogstashを再構成する必要があります。より良いアイデアはありますか?
こんにちは、これを行うためにgrokフィルターを追加しました。パスではなくファイル名だけが必要でしたが、必要に応じて変更できます。
filter {
grok {
match => ["path","%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"]
}
}
1つのイベントでメッセージとファイル名を組み合わせたい場合:
filter {
grok {
match => {
message => "ERROR (?<function>[\S]*)"
}
}
grok {
match => {
path => "%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"
}
}}
ElasticSearchの結果(「ファイル名」フィールドと「関数」フィールドにフォーカス):
"_index": "logstash-2016.08.03",
"_type": "logs",
"_id": "AVZRyEI49-A6kyBCq6Yt",
"_score": 1,
"_source": {
"message": "27/07/16 12:16:18,321 ERROR blaaaaaaaaa.internal.com",
"@version": "1",
"@timestamp": "2016-08-03T19:01:33.083Z",
"path": "/home/admin/mylog.log",
"Host": "my-virtual-machine",
"function": "blaaaaaaaaa.internal.com",
"filename": "mylog"
}