このようなログファイルがあります(簡略化)
ログラインサンプル
MyLine data={"firstname":"bob","lastname":"the builder"}
dataに含まれるjsonを抽出し、firstnameとlastの2つのフィールドを作成したいと思います。しかし、私が得る出力はこれです:
{"message":"Line data={\"firstname\":\"bob\",\"lastname\":\"the builder\"}\r","@version":"1","@timestamp":"2015-11-26T11:38:56.700Z","Host":"xxx","path":"C:/logstashold/bin/input.txt","MyWord":"Line","parsedJson":{"firstname":"bob","lastname":"the builder"}}
ご覧のように
..."parsedJson":{"firstname":"bob","lastname":"the builder"}}
それは私が必要なものではありません。キバナの名と姓のフィールドを作成する必要がありますが、logstashはjsonフィルターでフィールドを抽出していません。
LogStash Config
input {
file {
path => "C:/logstashold/bin/input.txt"
}
}
filter {
grok {
match => { "message" => "%{Word:MyWord} data=%{GREEDYDATA:request}"}
}
json{
source => "request"
target => "parsedJson"
remove_field=>["request"]
}
}
output {
file{
path => "C:/logstashold/bin/output.txt"
}
}
どんな助けも大歓迎です、私は簡単なものを見逃していると確信しています
ありがとう
json
フィルターの後に、 mutate
という別のフィルターを追加して、parsedJson
フィールドから取得する2つのフィールドを追加します。
filter {
...
json {
...
}
mutate {
add_field => {
"firstname" => "%{[parsedJson][firstname]}"
"lastname" => "%{[parsedJson][lastname]}"
}
}
}
上記のサンプルログ行では、次のようになります。
{
"message" => "MyLine data={\"firstname\":\"bob\",\"lastname\":\"the builder\"}",
"@version" => "1",
"@timestamp" => "2015-11-26T11:54:52.556Z",
"Host" => "iMac.local",
"MyWord" => "MyLine",
"parsedJson" => {
"firstname" => "bob",
"lastname" => "the builder"
},
"firstname" => "bob",
"lastname" => "the builder"
}