1

私はlogstashを初めて使用し、logstash-output-csvプラグインを使用して既存のログをcsv形式に変換しようとしています。

入力ログ文字列は次のようになります。これは、アプリケーションで作成されたカスタム ログです。

'128.111.111.11/cpu0/log:5988:W/"00601654e51a15472-76":687358:<9>2015/08/18 21:06:56.05: comp/45 55% of memory in use:  2787115008 bytes (change of 0)'

簡単な正規表現を作成し、grok プラグインを使用してそれを patterns_dir に追加しました。私のパターンは次のとおりです。

IP_ADDRESS [0-9,.]+
CPU [0-9]
NSFW \S+
NUMBER [0-9]
DATE [0-9,/]+\s+[0-9]+[:]+[0-9]+[:]+[0-9,.]+
TIME \S+
COMPONENT_ID \S+
LOG_MESSAGE .+

csv フィルターを追加しなくても、この出力を取得できました。

{
       "message" => "128.111.111.11/cpu0/log:5988:W/"00601654e51a15472-76":687358:<9>2015/08/18 21:06:56.05: comp/45 55% of memory in use:  2787115008 bytes (change of 0)",
      "@version" => "1",
    "@timestamp" => "2015-08-18T21:06:56.05Z",
          "host" => "hostname",
          "path" => "/usr/phd/raveesh/sample.log_20150819000609",
          "tags" => [
        [0] "_grokparsefailure"
    ]
}

これは、出力として csv を取得するための私の構成です

input {
    file {
        path => "/usr/phd/raveesh/temporary.log_20150819000609"
        start_position => beginning
    }
}

filter {
    grok {
        patterns_dir => "./patterns"
        match =>["message", "%{IP_ADDRESS:ipaddress}/%{CPU:cpu}/%{NSFW:nsfw}<%{NUMBER:number}>%{DATE}:%{SPACE:space}%{COMPONENT_ID:componentId}%{SPACE:space}%{LOG_MESSAGE:logmessage}" ]
        break_on_match => false
    }
    csv {
        add_field =>{"ipaddress" => "%{ipaddress}" }
}
}

output {
  # Print each event to stdout.
  csv {
    fields => ["ipaddress"]
    path => "./logs/firmwareEvents.log"
}
  stdout {
    # Enabling 'rubydebug' codec on the stdout output will make logstash
    # pretty-print the entire event as something similar to a JSON representation.
    codec => rubydebug
  }
}

上記の構成では、出力が得られないようです。csv ファイルに ipaddress のみを出力しようとしていますが、最終的には、取得したすべてのパターンを csv ファイルに出力する必要があります。だから私は次のように出力が必要です:

128.111.111.111、cpu0、nsfw、....

必要な変更点を教えてください。?

前もって感謝します

編集:

ツールhttp://grokconstructor.appspot.com/do/match#resultを使用して、提案どおりに正規表現を修正しました

今、私の正規表現フィルターは次のようになります:

%{IP:client}\/%{WORD:cpu}\/%{NOTSPACE:nsfw}<%{NUMBER:number}>%{YEAR:year}\/%{MONTHNUM:month}\/%{MONTHDAY:day}%{SPACE:space}%{TIME:time}:%{SPACE:space2}%{NOTSPACE:comp}%{SPACE:space3}%{GREEDYDATA:messagetext}

個々の分割をキャプチャして csv として保存するにはどうすればよいですか?

ありがとう

編集:

File plugin を使用して最終的にこれを解決しました。出力 {

file{ path => "./logs/sample.log" message_pattern =>"%{client},%{number}" } }

4

1 に答える 1

2

フィルター セクションの csv タグは、入力を解析し、メッセージをキーと値のペアに分解するためのものです。

あなたの場合、すでに grok で入力を解析しているので、csv フィルターは必要ないと思います。

しかし、出力では gorkfailure があることがわかります

{
       "message" => "128.111.111.11/cpu0/log:5988:W/"00601654e51a15472-76":687358:<9>2015/08/18 21:06:56.05: comp/45 55% of memory in use:  2787115008 bytes (change of 0)",
      "@version" => "1",
    "@timestamp" => "2015-08-18T21:06:56.05Z",
          "host" => "hostname",
          "path" => "/usr/phd/raveesh/sample.log_20150819000609",
          "tags" => [
        [0] "****_grokparsefailure****"
    ]
}

これは、grok 式が入力を解析できないことを意味します。

入力に従って式を修正する必要があります。そうすれば、csv が適切に出力されます。

ヘルプについては、http://grokconstructor.appspot.com/do/match をご覧ください

ところで、NSFW、CPU、COMPONENT_ID などのパターンがどこかに定義されていますか?

ハイ

于 2015-09-01T12:36:57.763 に答える