elasticsearch ElasticSearch-未设置日期类型,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" /> elasticsearch ElasticSearch-未设置日期类型,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" />

elasticsearch ElasticSearch-未设置日期类型

elasticsearch ElasticSearch-未设置日期类型,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok,我正在尝试麋鹿堆,到目前为止还不错:) 我在解析日期字段并将其发送给ElasticSearch时遇到了一个奇怪的情况。我设法解析这个字段,它实际上是在ElasticSearch中创建的,但它总是以字符串结束。 我试过很多不同的组合。我也尝试过很多人们建议的不同的事情,但我还是失败了 这是我的设置: 来自Filebeat的字符串: [2017-04-26 09:40:33]security.DEBUG:将安全令牌存储在会话中。{“key”:“securitysecured_area”}[] [20

我正在尝试麋鹿堆,到目前为止还不错:)

我在解析日期字段并将其发送给ElasticSearch时遇到了一个奇怪的情况。我设法解析这个字段,它实际上是在ElasticSearch中创建的,但它总是以字符串结束。 我试过很多不同的组合。我也尝试过很多人们建议的不同的事情,但我还是失败了

这是我的设置:

来自Filebeat的字符串:

[2017-04-26 09:40:33]security.DEBUG:将安全令牌存储在会话中。{“key”:“securitysecured_area”}[]

[2017-04-26 09:50:42]请求信息:匹配的路线“home\u logged\u in”。{“路由参数”:{“控制器”:“AppBundle\controller\HomeLoggedInController::showAction”,“区域设置”:“de”,“路由”:“homeloggedin”},“请求uri”:“}[]

日志存储解析部分:

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,但其类型为string

我总是从零开始创建索引,我先删除它,然后让日志存储填充它


我需要用实际日期(不是索引日期)覆盖@timestamp,或者用日期类型创建logdate字段。这两种方法都很好

除非您明确地将
[@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" => []
}
如果您只使用
如果[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" => []
}

[@metadata][type]正在使用filebeat设置类型,因此我知道存储日志的索引。感谢您的解释:)根据本文的讨论:filebeat@metadata字段似乎没有转到logstashIn filebeat:-输入类型:日志路径:mylog.log文档类型:feprod发出feprod作为类型,我在Logstash中使用它来决定存储数据的索引