web-dev-qa-db-ja.com

Logstash jsonメッセージをフィールドに分解する

タイムスタンプ付きのイベントとjsonメッセージを保存するログファイルがあります。例えば:

タイムスタンプ{"foo":12、 "bar":13}

Json部分のキー(fooとbar)をLogstash出力のフィールドに分解したいと思います。

Logstashファイルフィルターのフォーマットフィールドをjson_eventに設定できることは承知していますが、その場合は、jsonにタイムスタンプを含める必要があります。 jsonフィルターもありますが、キーを使用する代わりに、完全なjsonデータ構造を持つ単一のフィールドが追加されます。

これを行う方法について何かアイデアはありますか?

17
Maurits Rijk

最新のlogstash 1.2.1を試し、コーデック値を使用してjsonイベントを直接解析します。

input {
    file {
        type => "tweetfile"
        path => ["/home/nikhil/temp/feed/*.txt"]
        codec => "json"
    }
}
filter{
    json{
        source => "message"
        target => "Tweet"
    }
}
output {
    stdout { }
    elasticsearch { embedded => true }
}
16
Nikhil S

私はこれを次の設定で行いました:

filter {
  grok {
    match => ["message", "\[%{Word}:%{LOGLEVEL}\] %{TIMESTAMP_ISO8601:tstamp} :: %{GREEDYDATA:msg}"]
  }
  date {
    match => [ "tstamp", "yyyy-MM-dd HH:mm:ss" ]
  }
  json {
    source => "msg"
  }
}

ちなみに、これは新バージョン1.2.0の設定です。

バージョン1.1.13では、jsonフィルターにtargetを含め、messageの参照をgrokフィルターは@ message

10
mimes70

単純な Grokフィルター (正規表現フィルター/パターン)を使用して、一致した値を変数に代入するだけで、簡単に整理、フィルタリング、検索できます。

例:

((?<foo_identifier>(\"foo\"))):((?<foo_variable_value>(\d+,)))

それらの線に沿った何か。

GrokDebugger を使用して、構文、パターン、および一致しているはずであるが一致していないと思われるものに行き詰まった場合に役立ちます。

少しお役に立てば幸いです。

1
Adam