按时间戳在Kibana中对日志进行排序

时间:2017-02-09 09:25:41

标签: elasticsearch timestamp logstash kibana filebeat

Timestamps don`t match 我和ELK(Elasticsearch,Logstash和Kibana)实例一起运行,Filebeat从其他机器发送日志,我注意到Kibana中的日志以不同的顺序显示它们到达服务器(如附图所示),例如,这是Kibana中显示的内容,第二列是kibana时间戳,第三列是服务器时间戳:

February 9th 2017, 11:53:11.714 11:53:04,904
February 9th 2017, 11:53:11.714 11:53:05,579
February 9th 2017, 11:53:11.714 11:53:05,581
February 9th 2017, 11:53:11.714 11:53:05,591
February 9th 2017, 11:53:11.714 11:53:04,441
February 9th 2017, 11:53:11.714 11:53:05,589

我在日志文件中看到的是:

11:53:04,441
11:53:04,904
11:53:05,579
11:53:05,581
11:53:05,589
11:53:05,591

是否有任何选项可以按照服务器中显示的顺序查看Kibana中的日志? 我一直在寻找它,但我没有看到任何关于这个主题的问题,但我看到它可能正在改变Logstash配置文件10-syslog-filter.conf,这是我的:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为这是因为当您正在创建索引时,您还没有timestampKibana上显示事件在Kibana。你可以这样做:

mutate {
    add_field => { "received_time" => "%{syslog_timestamp}" }
    remove_field => ["syslog_timestamp"] <-- since you'll be using the recieved_time field here after
}
date {
    match => [ "received_time", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss"]
    target => "received_time"
    locale => "en"
    timezone => "UTC"
}

以上只是一个示例,以便您可以重现。 注意我假设syslog_timestamp为您在Q中提到的服务器时间。

因此,当您在Kibana中创建新索引时,系统会要求您选择时间字段名称以过滤事件。 Kibana的作用是,它会根据浏览器的时间显示事件,除非您从下拉列表中选择它。

因此,一旦您处理 logstash 配置文件,您就应该能够看到我们在下拉菜单中创建的字段 received_time 。因此,您只需从drop down中选择它,以便Kibana根据您选择的timestamp显示事件。同时确保您也没有任何时区问题。如果您正在使用UTC,请同时更改浏览器时区高级设置&gt; Kibana中的dateFormat:tz 。希望它有所帮助!