2015-12-18 42 views
5

我想解析一些時代的時間戳是更可讀的東西。Logstash轉換時代的時間戳

我環顧四周,如何把它解析爲一個正常的時間,從我的理解都是我應該做的是這樣的:

mutate 
{ 
    remove_field => [ "..."] 
} 

grok 
{ 
    match => { 'message' => '%{NUMBER:time}%{SPACE}%{NUMBER:time2}...' } 
} 

date 
{ 
    match => [ "time","UNIX" ] 
} 

消息的一個例子是:1410811884.84 1406931111.00 .... 的前兩個值應該是UNIX時間值。

我的grok作品,因爲所有的字段都以預期的值顯示在Kibana中,而且我刪除的所有值字段都不存在,因此mutate也可以工作。日期部分似乎什麼都不做。

從我所瞭解的match => [ "time","UNIX" ]應該做我想做的(改變時間的價值是一個適當的日期格式,並讓它顯示在kibana作爲一個領域)。所以顯然我不理解它。

回答

7

日期{}過濾器會用提供的數據替換@timestamp的值,所以您應該看到@timestamp具有與[time]字段相同的值。這通常很有用,因爲傳播,​​處理和日誌存儲有一些延遲,所以使用事件自己的時間是首選。

既然你有一個以上的日期字段,你要使用日期過濾器的「目標」參數來指定解析日期的目的地,如:

date { 
    match => [ "time","UNIX" ] 
    target => "myTime" 
} 

這將轉換名爲[時間]的字符串字段放入名爲[myTime]的日期字段中。 Kibana知道如何顯示日期字段,並且可以在kibana設置中自定義它。

因爲你很可能並不需要這兩個字符串相同數據的最新版本,你可以刪除字符串版本作爲轉換的一部分:

date { 
    match => [ "time","UNIX" ] 
    target => "myTime" 
    remove_field => [ "time" ] 
} 
+0

這工作完美。謝謝。 –

2

想想也與UNIX_MS努力爲毫秒。

date { 
    timezone => "UTC" 
    match => ["timestamp", "UNIX_MS"] 
    target => "@timestamp" 
}