2017-05-02 23 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中使用它来决定存储数据的索引 –