13

この結果を得るために、基本的に2つのネストされたフィールド、syslog部分とメッセージ部分に解析したいdrupalウォッチドッグsyslogファイルがあります

syslogpart: {
  timestamp: "",
  host: "",
  ...
},
messagepart:{
  parsedfield1: "",
  parsedfield2: "",
  ...
}

次のようなカスタム パターンを作成してみました。

DRUPALSYSLOG (%{SYSLOGTIMESTAMP:date} %{SYSLOGHOST:logsource} %{WORD:program}: %{URL:domain}\|%{EPOCH:epoch}\|%{WORD:instigator}\|%{IP:ip}\|%{URL:referrer}\|%{URL:request}\|(?<user_id>\d+)\|\|)

そして実行しますmatch => ['message', '%{DRUPALSYSLOG:drupal}'}

しかし、ネストされた応答は得られません。テキストブロックを取得し、drupal: "ALL THE MATCHING FIELDS IN ONE STRING"すべての一致も個別に取得しますが、drupal の下ではなく、同じレベルでネストされます。

4

2 に答える 2

13

はい、これは想定内です。grok でネストされたフィールドを生成する方法はないと思います。それらを所定の位置に移動するには、 mutate フィルターを使用する必要があると思います。

mutate {
    rename => {
      "date" => "[drupal][date]"
      "instigator" => "[drupal][instigator]"
      ...
    }
  }

フィールドがたくさんある場合は、ルビ フィルターを使用する方が便利な場合があります。これは、Drupal フィールドの前に「drupal」などを付ける場合に特に当てはまります。– 次に、そのプレフィックスを持つすべてのフィールドを同じ名前のサブフィールドに移動するフィルターを作成します。

于 2015-02-26T18:51:02.107 に答える