2013-06-26 16 views
6

誰かが私を助けてくれることを願っています!有効なジョーダ時間(@タイムスタンプ)に日付を変換するLogstash

私はlogstashに関する質問があります。私は次の日付にsuccesを追加します:26/Jun/2013:14:00:26 +0200

次に、この日付をイベントの@タイムスタンプとして使用します。あなたが知っているように、logstashは自動的にタイムスタンプを追加します。

logstashが追加しているタイムスタンプを置き換えることは、日付フィルタで行うことができます。私は次の日付フィルタを追加しました:match => ["date"、 "dd/MMM/YYYY:HH:mm:ss Z"]

しかし、何らかの理由でそれが動作しません。私が試してみると、logstashは自分のタイムスタンプを追加するだけです。

コード:

grok { 
    type => "log-date" 
    pattern => "%{HTTPDATE:date}" 
} 

date{ 
    type => "log-date" 
    match => [ "date", "dd/MMM/YYYY:HH:mm:ss Z"] 
} 

私はこれを行う必要があるので、私はelasticsearchするイベントを追加することができます。

ありがとうございます!

+0

私はIRCチャンネルを介して人々に連絡を試みましたが、これまで誰も私を助けなかったのです。私はバグだと思う。 –

答えて

8

私は、次のアプローチを使用:

# strip the timestamp and force event timestamp to be the same. 
# the original string is saved in field %{log_timestamp}. 
# the original logstash input timestamp is saved in field %{event_timestamp}. 
grok { 
    patterns_dir => "./patterns" 
    match => [ "message", "%{IRODS_TIMESTAMP:log_timestamp}" ] 
    add_tag => "got_syslog_timestamp" 
    add_field => [ "event_timestamp", "%{@timestamp}" ] 
} 

date { 
    match => [ "log_timestamp", "MMM dd HH:mm:ss" ] 
} 

mutate { 
     replace => [ "@timestamp", "%{log_timestamp}" ] 
} 

私の問題は今@timestampが交換された場合でも、私は他のプログラムがないように、最初にISO8601と互換性のある形式に変換したい、ということです「EVENT_TIMESTAMP」に存在するタイムスタンプのような問題、それを解釈し、持っている:

 "@timestamp" => "Mar 5 14:38:40", 
     "@version" => "1", 
      "type" => "irods.relog", 
      "host" => "ids-dev", 
      "path" => "/root/logstash/reLog.2013.03.01", 
      "pid" => "5229", 
      "level" => "NOTICE", 
    "log_timestamp" => "Mar 5 14:38:40", 
"event_timestamp" => "2013-09-17 12:20:28 UTC", 
      "tags" => [ 
    [0] "got_syslog_timestamp" 
] 

あなたは年の情報を持っているので、あなたはそれを容易に変換することができ...私の場合は、「パス」のうち、それを解析する必要があります(ファイル名)属性...でも、まだconvert_tがないようですo_iso8901 => @timestampディレクティブ。

これは問題の解決に役立ちます。 :)

+0

私はちょうど余分なgrokでパスの問題を解決しました: 'grok { match => [" path "、"%{YEAR:log_year} "}}' – brainstorm

+0

ここでは、この特定の例に関するより詳しい説明があります:https:// gist .github.com/brainstorm/6552989 – brainstorm

+0

logstashメーリングリストに関するこのトピックのフォローアップ:https://groups.google.com/forum/#!topic/logstash-users/4GRVY9UJEU4 – brainstorm

5

上記の答えは単なる回避策です!locale => "en"をコードに追加してみてください。
平日および月の名前がデフォルトのプラットフォームロケール言語(スペイン語、フランス語など)で解析されるため、ログが英語であるため動作しませんでした。

date{ 
    type => "log-date" 
    match => [ "date", "dd/MMM/YYYY:HH:mm:ss Z"] 
    locale => "en" 
} 
+0

同意します。日付解析エラーがありました。私の 'LANG' env変数は' fr_CA.UTF-8'に設定されていました。 'locale =>" en "'を有効にして、英語のフォーマットのシステムから出荷されたログを適切に解析しました。 – qux

関連する問題