始めるためのちょっとした助けを探しています... Logstash(およびElasticSearch)をインストールしましたが、最初のフィルターで苦労しています。
テストとして、6行を含むトリミングされたログファイルから読み取るように構成しました。各行は、[11/5/13 4:09:21:327 PST]のようなタイムスタンプで始まります。他のデータの束が続きます。
今のところ、このファイルを読み取るようにconfファイルを設定しており、非常に基本的なgrokフィルターを実行して行を一致させようとしています。おそらく、タイムスタンプを取得してから残りのデータを取得します(そこから分割を開始できます)。 )。
これが私が持っているものです:
input {
file {
type => "chris"
path => "/home/chris/Documents/test.log"
}
}
filter {
grok {
type => "chris"
pattern => "%{GREEDYDATA:logline}"
}
}
output {
stdout {debug => true debug_format => "json"}
}
Logstashを実行すると、各行に一致して出力されることを期待していました(期待していました)。その後、行を分割してパターンの調整をフィルタリングし始めることができましたが、この最初の基本ビットを機能させることができませんでした。私は少し困惑しています。
誰かが共有しても大丈夫な同様のconfファイルを持っていますか?私が見つけることができる例のほとんどはより高度であり、私は門から出ようとして立ち往生しているようです。
ありがとう、
クリス。
フィルタの内容を削除することから始めます。
Logstash grokフィルタープラグインの現在のバージョン(1.3.2)のドキュメントはここにあります http://logstash.net/docs/1.3.2/filters/grok
ダウンロードしたlogstashのバージョンのドキュメントの正しいバージョンを確認してください。
Grokフィルターの例は次のとおりです。
filter {
grok {
match => [ "message", "%{IP:client} %{Word:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" ]
}
}
しかし、これがあなたのデータと一致する可能性は低いです。
「メッセージ」は、ログ全体が表示されるデフォルトのフィールドであるため、おそらくあなたにとっても良い選択です。
次の部分では、ログラインを読み取り、IP、Wordなどの事前定義されたGrokパターンと部分を照合することにより、5つの新しいフィールド、クライアント、メソッド、リクエスト、バイト、および期間を作成します。これは変更する必要があります。
から始める
filter {
grok {
match => [ "message", "%{GREEDYDATA:logline}" ]
}
}
これは実際にはメッセージフィールドを別のログラインフィールドに複製するだけですが、どこかで開始できます。フィルタにGrokパターンを追加すると、ログラインフィールドにはgrokkされていないものだけが含まれます。
ここでGrokパターンをテストできます http://grokdebug.herokuapp.com/
Grokフィルターを使用してタイムスタンプを独自のフィールドに取得し、日付フィルターを使用して実際にそれをログのタイムスタンプとして使用することをお勧めします。
filter {
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:syslog_timestamp} %{GREEDYDATA:syslog5424_msg}" ]
}
date {
match => [ "syslog_timestamp", "ISO8601" ]
}
}
TIMESTAMP_ISO8601は、非常に詳細な形式のタイムスタンプと一致します( http://grokdebug.herokuapp.com/patterns# )。これは機能しない場合があります。
ISO8601は、日付フィルターに事前に指定されているものと同じ形式です。代わりに、ここで日付形式を手動で指定する必要がある場合があります。ドキュメントを参照してください: http://logstash.net/docs/1.3.2/filters/date