2017-11-02 23 views
0

私はdocumentationを誤解しているかもしれませんが、私は(例えば)木場で検索できるフィールドを私に与える予定ですか?event_set(logstash ruby​​)は私にフィールドを与えませんか?

私はまた、thisが自分の問題(?)を記述するのに最も近いと思ういくつかの投稿を見てきました。私はこの記事で@magnusbaeckが提案したような正確な構文を試しましたが、このように定義された新しいフィールドを得ることはできませんでした。

期待通りにevent_setが動作しないようで、バージョン5.0で導入された構文でこれを行う方法がわかりません。

私はTimeSpentMinutesとTimeSpentSecondsという名前の私のログファイルから2つのフィールドが、完全に理解し、私はこれについていくつかの記事がある知っているが、私はv.5.0で後の変化を見つけることができましたことを非常に多くありません。

とにかく、私のログは、この(私は簡単にするためにビットを編集した)のようなものになります。

1012 2017-10-27 05:03:24 [ 2:31] some message blablabla 

を私は、秒にTimeSpentMinutesを変換しようとすると、次を実行して、中valuleにこれらの秒を追加しますTimeSpentSecondsは、その後、TimeSpentと呼ばれる新しいフィールドにそれらを置く:このことから

filter { 
    grok { 
    match => { 
     "message" => ["^%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogLineTime} \[%{SPACE}%{INT:TimeSpentMinutes}\:%{INT:TimeSpentSeconds}\] %{GREEDYDATA:LogText}$"] 
    } 
    } 

    # Merge related minutes and seconds to one single value in seconds 
    if [TimeSpentMinutes][TimeSpentMinutes] { 
    ruby { 
     code => 'event_set("TimeSpent", event_get("TimeSpentMinutes").to_f*60 + event_get("TimeSpentSeconds").to_f)' 
    } 
    mutate { 
     remove_field => ['TimeSpentMinutes', 'TimeSpentSeconds'] 
    } 
    } 
} 

私が取得:

LogLineID = 1012 
LogLineTime = 2017-10-27 05:03:24 
TimeSpentMinutes = 2 
TimeSpentSeconds = 31 
LogText = some message blablabla 

これまでのところとても良いですが、ルビーフィルターのようには見えません。少なくとも、私は期待しているフィールドTimeSpentを手に入れません。

add_fieldをmutateフィルターまたはrubyフィルターに追加する必要がありますか?それとも私が誤解したことがありますか?私はエラーメッセージが表示されないので、少なくとも構文は多かれ少なかれだと思われますが、オフまたは欠落しているものがなければなりません。

+0

あなたのコードを再読み込みすると、どちらかの条件がわかりません...達成しようとしているものはわかりませんが[これ](https://stackoverflow.com/) question/42341778/logstash-if-statement-with-regex-example)を使用すると、フィールド内の整数 – Phonolog

答えて

0

ドキュメントは多少誤解されています。

filter { 
    ruby { 
    code => 'event.set("lowercase_field", event.get("message").downcase)' 
    } 
} 

Rubyコードのあなたの行は次のようになります。正しい構文は

は、あなたがリンクドキュメントからの例を参照してください(代わりにアンダースコアのドットに注意)event.setあり、それはフィールドを取得および設定を示してい最後に:

ruby { 
     code => 'event.set("TimeSpent", event.get("TimeSpentMinutes").to_f*60 + event.get("TimeSpentSeconds").to_f)' 
    } 
関連する問題