2017-05-02 55 views
0

我想麋鹿堆棧,到目前爲止好:)ElasticSearch - 不設定日期型

我已經跑到怪現狀regardgin的解析日期字段,並把它發送到ElasticSearch。我設法解析這個字段,它真的是在ElasticSearch中創建的,但它總是以字符串結尾。 我嘗試了許多不同的組合。我也嘗試了許多不同的東西,人們建議,但我仍然失敗。

這是我的設置:

是來自Filebeat的字符串:

[2017年4月26日九時40分33秒] security.DEBUG:存儲安全令牌的會話。 {「key」:「securitysecured_area」} []

[2017-04-26 09:50:42] request.INFO:匹配的路線「home_logged_in」。 {「route_parameters」:{「controller」:「AppBundle \ Controller \ HomeLoggedInController :: showAction」,「locale」:「de」,「route」:「homelogged_in」},「request_uri」:「https://qa.someserver.de/de/home」} []

的logstash分析部:

if [@metadata][type] == "feprod" or [@metadata][type] == "feqa"{ 
grok { 
    match => { "message" => "%{TIMESTAMP_ISO8601:logdate}" } 
} 
date { 
#timezone => "Europe/Berlin" 
match => [ "logdate", "yyyy-MM-dd HH:mm:ss"] 
    } 
} 

根據該文件,我@timestamp場應與LOGDATE值覆蓋。但它沒有發生。

在ElasticSearch中,我可以看到字段logdate正在創建,它的值爲2017-04-26 09:40:33,但它的類型是字符串。

我總是從零開始創建索引,我先刪除它並讓logstash填充它。

我需要@timestamp覆蓋實際日期(而不是它被編入索引的日期),或者logdate字段是使用日期類型創建的。兩者都很好

回答

1

除非您明確將[@metadata][type]添加到某個您未顯示的位置,否則這是您的問題。它沒有默認設置,默認情況下,[type]是從輸入中的'type =>'參數設置的。

您可以用最小的完整的例子驗證這一點:

input { 
    stdin { 
     type=>'feprod' 
    } 
} 
filter { 
    if [@metadata][type] == "feprod" or [@metadata][type] == "feqa"{ 
     grok { 
      match => { "message" => "%{TIMESTAMP_ISO8601:logdate}" } 
     } 
     date { 
      match => [ "logdate", "yyyy-MM-dd HH:mm:ss"] 
     } 
    } 
} 

output { 
    stdout { codec => "rubydebug" } 
} 

並運行它:

echo '[2017-04-26 09:40:33] security.DEBUG: Stored the security token in the session. {"key":"securitysecured_area"} []' | bin/logstash -f test.conf 

和獲取輸出:

{ 
    "@timestamp" => 2017-05-02T15:15:05.875Z, 
     "@version" => "1", 
      "host" => "xxxxxxxxx", 
     "message" => "[2017-04-26 09:40:33] security.DEBUG: Stored the security  token in the session. {\"key\":\"securitysecured_area\"} []", 
      "type" => "feprod", 
      "tags" => [] 
} 

,如果你只使用if [type] ==。 ..它會正常工作。

{ 
    "@timestamp" => 2017-04-26T14:40:33.000Z, 
     "logdate" => "2017-04-26 09:40:33", 
     "@version" => "1", 
      "host" => "xxxxxxxxx", 
     "message" => "[2017-04-26 09:40:33] security.DEBUG: Stored the security token in the session. {\"key\":\"securitysecured_area\"} []", 
      "type" => "feprod", 
      "tags" => [] 
} 
+0

[@metadata] [type]該類型正在設置與filebeat,所以我知道什麼索引來存儲日誌。感謝您的解釋:) –

+0

根據這個討論:https://discuss.elastic.co/t/logstash-input-beat-not-receiving-metadata-field/40365/3它似乎沒有filebeat @metadata字段超過logstash – Alcanzar

+0

在Filebeat中: - input_type:log path:mylog。日誌 document_type:feprod 發佈feprod作爲類型,我在Logstash中使用它來決定存儲數據的索引 –