ELK系列(五)、Logstash修改@timestamp时间为日志的产生时间

本文介绍如何配置Logstash,使其在收集nginx日志时使用日志的真实时间戳,而非采集时间,以便于后续数据分析。通过修改配置,将@timestamp字段替换为日志中的timestamp字段,实现更精确的时间过滤和排序。

上一篇讲了如何使用Logstash监控nginx日志并打印到控制台或导入到ES中,在kibana的discover中我们可以根据@timestamp时间对数据进行过滤和排序,但这里显示的@timestamp时间是指logstash读取到日志的时间而不是日志真正产生的时间,本篇就介绍如何配置使logstash在采集日志的过程中使用日志的真实时间戳作为消息体的时间戳,便于我们之后的分析

ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0

ELK系列(二)、在Kibana中使用RESTful操作ES库

ELK系列(三)、安装Logstash插件及打包离线安装包

ELK系列(四)、Logstash读取nginx日志写入ES中

-----------------------------------修改logstash消息体中的@timestamp为日志产生时间--------------

介绍

之前读取nginx日志的消息体如下,可以看到这里的@timestamp和message中的时间戳不一致,而timestamp和message中的时间是一致的,那么我们可以修改@timestamp指定为timestamp。

{
           "verb" => "GET",
       "@version" => "1",
       "referrer" => "\"-\"",
           "host" => "node01",
           "type" => "system",
      "timestamp" => "23/May/2020:21:00:19 +0800",
          "agent" => "\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36\"",
    "httpversion" => "1.1",
           "path" => "/usr/local/nginx/logs/access.log",
     "@timestamp" => 2020-05-23T13:56:05.419Z,
       "clientip" => "192.168.142.1",
          "ident" => "-",
        "message" => "192.168.142.1 - - [23/May/2020:21:00:19 +0800] \"GET / HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36\"",
       "response" => "200",
          "bytes" => "612",
        "request" => "/",
           "auth" => "-"
}

配置

配置如下,只需要修改filter的部分即可:

vim config/logstash_nginxlog2es_timestamp.conf

input {
   # 从文件读取日志信息
   file {
        path => "/usr/local/nginx/logs/access.log"
        type => "nginx_access"
        start_position => "beginning"
    }
 }

filter {
    grok {
      match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    date {
      match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] #匹配timestamp字段
      target => "@timestamp"  #将匹配到的数据写到@timestamp字段中
    }
}

output {
       # 输出es
       elasticsearch {
          hosts => ["wykd:9200"]
          index => "nginx-%{+YYYY.MM.dd}"
      }

}

验证

先删除之前在es中的索引以及sincedb文件,然后重新启动logstash:

bin/logstash -f config/logstash_nginxlog2es_timestamp.conf

在kibana中查看此时@timestamp已经是日志中的timestamp,该日志真正的产生时间,而不是logstash的采集时间了。

 

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值