ハッシュフィールド(タイムスタンプなし)をESにポンピングすると、それを認識するはずです。
logstashパイプライン内で実行する場合は、json filterを使用し、source =>
を2番目の部分に(おそらくタイムスタンププレフィックスを戻して)指定します。すべてのフィールドで
この結果は、現在のメッセージに追加され、あなたがそれらを直接アクセスしたりすることができ、すべての組み合わせ:
設定:
input { stdin { } }
filter {
# split line in Timestamp and Json
grok { match => [ message , "%{NOTSPACE:ts} %{NOTSPACE:ip} %{GREEDYDATA:js}"] }
# parse json part (called "js") and add new field from above
json { source => "js" }
}
output {
# stdout { codec => rubydebug }
# you access fields directly with %{fieldname}:
stdout { codec => line { format => "sourcefile: %{sourcefile}"} }
}
サンプル実行
2016-09-01T21:07:30.152Z 153.65.199.92 { "sourcefile":"/usr" }
sourcefile: /usr
とrubydebugと
(ホストと@タイムスタンプは削除されました):
{
"message" => "2016-09-01T21:07:30.152Z 153.65.199.92 { \"sourcefile\":\"/usr\" }",
"@version" => "1",
"ts" => "2016-09-01T21:07:30.152Z",
"ip" => "153.65.199.92",
"js" => "{ \"sourcefile\":\"/usr\" }",
"sourcefile" => "/usr"
}
ご覧のとおり、フィールドsourcefile
は、rubydebug出力の値で直接認識されます。
ログレコードのソースによっては、multiline
コーデックも使用する必要があります。また、js
フィールドを削除し、@timestamp
の名前を_parsedate
に変更し、ts
を解析して、レコードのタイムスタンプ(木場は満足している)にすることもできます。これはサンプルには表示されていません。また、スペースを節約するためにmessage
を削除します。
出力プラグインでファイル名を使用したいので、Logstashパイプラインで解析します。私はjsonフィルターを見ましたが、ドキュメントは特定のフィールドを取得する方法を説明していません。あなたの答えを詳述してください。 –
@ChrisF done :) – eckes