次の構成で Logstash を使用してログを受信しています。
input {
udp {
type => "logs"
port => 12203
}
}
filter {
grok {
type => "tracker"
pattern => '%{GREEDYDATA:message}'
}
date {
type => "tracker"
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
output{
tcp{
type => "logs"
host => "host"
port => 12203
}
}
"host"
次に、次の設定を使用して、マシンでログを取得します。
input {
tcp {
type => "logs"
port => 12203
}
}
output {
pipe {
command => "python /usr/lib/piperedis.py"
}
}
ここから、行の解析を行い、それらを Redis データベースに入れます。しかし、興味深い問題が発見されました。
Logstash は、ログ メッセージを JSON スタイルのパッケージに「ラップ」します。
{\"@source\":\"source/\",\"@tags\":[],\"@fields\":{\"timestamp\":[\"2013-09-16 15:50:47,440\"],\"thread\":[\"ajp-8009-7\"],\"level\":[\"INFO\"],\"classname\":[\"classname\"],\"message\":[\"message"\]}}
次に、それを受信して次のマシンに渡すと、それをメッセージとして受け取り、別のラッパーに入れます! 実際のログ メッセージのみに関心があり、その他のもの (ソース パス、ソース、タグ、フィールド、タイムスタンプなど) には関心がありません。
フィルターなどを使用してこれを行う方法はありますか? ドキュメントを調べましたが、Logstash のインスタンス間で生のログ行を渡すだけの方法が見つかりません。
ありがとう、
マット