elasticsearch 日志存储日期筛选器不再匹配,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" /> elasticsearch 日志存储日期筛选器不再匹配,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" />

elasticsearch 日志存储日期筛选器不再匹配

elasticsearch 日志存储日期筛选器不再匹配,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana,我正在开发一个ELK服务集群以在内部部署,在一些初始测试机器上完成配置后,我现在将其移植到厨师烹饪手册中。为了使我的烹饪书更具可扩展性,我编写了Logstash配置模板作为单个函数,用于读取厨师节点数据并输出配置。引用的一些特性需要考虑到LS配置文件的嵌套结构 无论如何,一旦我开始从我的测试机器中获取数据,我注意到Logstash再次使用了事件接收的时间戳@timestamp,而不是从事件中提取的时间戳。我不知道为什么 下面是来自我的初始测试机器和当前测试机器的配置和事件示例。我已经缩减了fil

我正在开发一个ELK服务集群以在内部部署,在一些初始测试机器上完成配置后,我现在将其移植到厨师烹饪手册中。为了使我的烹饪书更具可扩展性,我编写了Logstash配置模板作为单个函数,用于读取厨师节点数据并输出配置。引用的一些特性需要考虑到LS配置文件的嵌套结构

无论如何,一旦我开始从我的测试机器中获取数据,我注意到Logstash再次使用了事件接收的时间戳
@timestamp
,而不是从事件中提取的时间戳。我不知道为什么

下面是来自我的初始测试机器和当前测试机器的配置和事件示例。我已经缩减了filter语句,只保留了
date
部分,并删除了除相关事件数据之外的所有数据

初始版本: 已解析事件:

{
    "message": "Oct  1 05:32:07 web-01-01 postfix/smtp[12517]: 0E3E263266: to=<foo@blah.com>, relay=mta.blah.net[1.2.3.4]:25, delay=1.4, delays=0.23/0/0.11/1, dsn=2.0.0, status=sent (250 ok dirdel)",
    "@timestamp": "2014-10-01T05:32:07.000Z",
    "timestamp": "Oct  1 05:32:07",
}
{
    "message": "Oct 29 16:45:15 web-01-01 postfix/smtp[18596]: 05D9D63FA0: to=<foo@bla.com>, relay=mailin-01.mx.blah.com[1.2.3.4]:25, delay=1.1, delays=0.03/0/0.34/0.75, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 7B67F7000557B)",
    "@timestamp": "2014-10-30T18:41:33.660Z",
    "timestamp": "Oct 29 16:45:15",
}
已解析事件:

{
    "message": "Oct  1 05:32:07 web-01-01 postfix/smtp[12517]: 0E3E263266: to=<foo@blah.com>, relay=mta.blah.net[1.2.3.4]:25, delay=1.4, delays=0.23/0/0.11/1, dsn=2.0.0, status=sent (250 ok dirdel)",
    "@timestamp": "2014-10-01T05:32:07.000Z",
    "timestamp": "Oct  1 05:32:07",
}
{
    "message": "Oct 29 16:45:15 web-01-01 postfix/smtp[18596]: 05D9D63FA0: to=<foo@bla.com>, relay=mailin-01.mx.blah.com[1.2.3.4]:25, delay=1.1, delays=0.03/0/0.34/0.75, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 7B67F7000557B)",
    "@timestamp": "2014-10-30T18:41:33.660Z",
    "timestamp": "Oct 29 16:45:15",
}

后缀模式来自何处,但我不认为它们在这种情况下非常重要。

我基于您的配置构建了以下配置,它可以正常工作。配置中唯一奇怪的事情是将“@message”复制到“timestamp”。这通常由您的grok{}(您没有发布)完成,尽管我们确实看到您有一个有效的“timestamp”字段

input {
        stdin{}
}

filter {
    mutate {
       add_field => [ "timestamp", "%{message}" ]
    }

    date {
        "match" => [
            "timestamp",
            "MMM  d HH:mm:ss",
            "MMM dd HH:mm:ss",
            "ISO8601"
        ]
        "target" => "@timestamp"
    }
}

output {
        stdout{ codec => rubydebug }
}
和输出,显示正确设置的@timestamp

{
       "message" => "Oct 29 16:45:15",
      "@version" => "1",
    "@timestamp" => "2015-10-29T23:45:15.000Z",
          "host" => "0.0.0.0",
     "timestamp" => "Oct 29 16:45:15"
}

这一切似乎归结为指定过滤器的顺序。grok筛选器创建
时间戳
字段,因此,如果首先指定日期筛选器,则它没有任何操作


颠倒顺序,让格罗克在日期之前到达解决了问题,只花了整整10个月的时间就搞定了

您如何知道正在使用日期筛选器?如果日期解析失败,Logstash将在其自己的日志中记录消息。如果没有这方面的痕迹,你就知道不是日期过滤器配置本身造成了问题。@MagnusBäck好吧,日志存储日志中没有关于它的任何内容,所以我想这意味着
日期
过滤器匹配,但发生了其他事情?日志存储不会使用本地时间作为@timestamp。它将使用UTC+您的位置时差。所以,我认为可能是它没有使用当地时间,所以你看到了差异。为了在本地显示它,请使用以下ruby脚本:ruby{code=>“event['@timestamp']=event['@timestamp'].getlocal'}@NirdeshSharma如果是时区转换问题,小时和分钟仍然匹配,并且
@timestamp
中根本不会有毫秒分量。这就是说,我现在不关心时区。如果您想再看一看,我已经在问题中添加了完整的过滤器配置。
{
       "message" => "Oct 29 16:45:15",
      "@version" => "1",
    "@timestamp" => "2015-10-29T23:45:15.000Z",
          "host" => "0.0.0.0",
     "timestamp" => "Oct 29 16:45:15"
}