Jsonフィルター利用時に他のフィールドを消さない

filebeatで吐き出したjsonをlogstashで再度取り込むという処理をしています。

その際、grokfilterでjsonより前の情報をとったあと、json部分にjsonフィルターを適用しますがその場合、他のフィールドが削除されてしまうようです。

これを回避する方法はありますか?

https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html#plugins-filters-json-tag_on_failure

    grok {
            patterns_dir => ["/etc/logstash/patterns"]
            match => {"message" => "%{PATTERN}"}

    }
    json {
            source => "json_string"
    }

PATTERN %{TIMESTAMP_ISO8601}\s{name=%{IPORHOST:rhost.rp}}\s+%{TIMESTAMP_APPS:timestamp_APPS}\s%{GREEDYDATA:json_string}

手元にあったLogstash7.5でgrokとjsonを使って確認してみましたが、他のフィールドが消えるというような状況を再現できませんでした。

jsonフィルターで展開した後の項目名が重複しているということはありませんか?
重複していると、jsonフィルターで展開した項目がルートにきたとき、上書きされてしまうため。

By default, it will place the parsed JSON in the root (top level) of the Logstash event

jsonフィルターでtargetを指定してみて、gorkで展開された他フィールド、あるいはメタ情報のフィールドが残っているかどうか、output { stdout{} } で確認するのはどうでしょうか?

filter {
    json {
            source => "json_string"
            target => "target_test"  #  <-展開先を指定することで上書きを避ける
    }
}

少しでも何かヒントがあれば幸いです。

再度実施確認したところ、見間違えでした。。
大変申し訳ございませんでした。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.