0

UNIXタイムスタンプ(エポックからの秒数)フィールドの値に基づいてレコードをインデックスする必要がありますが、インデックスはYYYY-MM-ddの形式である必要があります。しかし、タイムスタンプフィールドの値はUNIXのタイムスタンプのままでなければなりません。logstashで変換されたunixタイムスタンプの値に基づくインデックス

質問には2つの部分があります。

  1. UNIXタイムスタンプを破棄することなく、タイムスタンプファイルをYYYY-MM-ddに変換するにはどうすればよいですか?
  2. YYYY-MM-ddの値をインデックスに適用するにはどうすればよいですか?

ここまでは私がこれまで持っていたものです。

input { 
    tcp { 
      port => 5000 
    } 
} 

filter { 
    csv { 
      separator => " " # <- this white space is actually a tab 
      skip_empty_columns => true 
      # other fields omitted for brevity 
      columns => ["timestamp"] 
    } 

    #grok { 
    #  match => {"indexdate" => "%{NUMBER:timestamp}"} 
    #} 

    date { 
      match => ["timestamp", "YYYY-MM-DD"] 
      target => "@timestamp" 
    } 

    mutate { 
      # omitted for brevity 
      remove_field => [] 
    } 
} 

output { 
    elasticsearch { 
      hosts => "elasticsearch:9200" 
      index => "indexname-%{+YYYY-MM-dd}" 
    } 
} 

私はいくつかの異なるgrokの試みを行ってきましたが、これまでのところ運がありません。

答えて

1

このようにdateフィルタを変更するだけで効果があります。あなたはdateフィルタで使用パターンを使用すると、エポック秒を持っているので、そのパターンはUNIXする必要があり、あなたが解析しているフィールドのパターンと一致する必要があります:あなたはconvert設定を追加する必要があるかもしれません

date { 
     match => ["timestamp", "UNIX"] 
     target => "@timestamp" 
} 

注意あなたのcsvフィルタでは、答えに感謝をtimestampフィールドは整数

csv { 
    ... 
    convert => { "timestamp" => "integer" } 
} 
+0

こんにちは@valであることを確認します。もし私がフォローアップの質問がありますか? '@ timestamp'の値を保持して、現在の時刻のままにする方法はありますか? – robbmj

+0

'date'フィルタを実行する前に' @ timestamp'を別のフィールドにコピーすることができます。あるいは、 'date'フィルタで別のターゲットフィールドを使用し、' @timestamp'をそのままにすることもできます。これらのうちのどれかが機能するでしょうか? – Val

+0

'target =>" @timestamp "を' target => "@mytimestamp" 'に変更しました。これは完全に機能します! logstachは、この行を評価する際にどのフィールドを使うべきかを知っています: 'index =>" indexname - %{+ YYYY-MM-dd} "'? – robbmj

関連する問題