0

我需要基於UNIX時間戳記的值(自epoch以來的秒數)字段對索引進行索引,但索引需要採用YYYY-MM-dd的形式。但是,時間戳字段的值需要保留爲UNIX時間戳。基於logstash中已轉換的unix時間戳值的索引

所以問題是兩部分。

  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

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

請注意,您可能需要添加一個convert設置在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