目前我们日志信息中有两种时间格式,分别是以下:
Jan 22 10:01:01 # 对应SYSLOGTIMESTAMP
2021-01-29 08:53:00,321 # 对应TIMESTAMP_ISO8601
本篇博客中实现了将时间戳转换为日志信息中的时间而不是导入时间,代码可以直接看三和四板块。
主要要调整的是三个部分:
1.修改对应的时间格式(TIMESTAMP_ISO8601或者SYSLOGTIMESTAMP)
2.修改日期所在的字段名(本例中是message)
3.修改时间格式,2021-01-29 08:53:00,321对应的是YYYY-MM-dd HH:mm:ss,SSS;如果秒后面没有内容了,则对应的是YYYY-MM-dd HH:mm:ss。其余同理
一、参考网站
官方预定义的 grok 表达式:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
grok·ELKstack中文指南:https://elkguide.elasticsearch.cn/logstash/plugins/filter/grok.html
Logstash基础正则地址:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
二、grok
Grok Debug网站:
①http://grokdebug.herokuapp.com/(官网)
②https://www.5axxw.com/tools/v2/grok.html(可用)
用于grok语句调试,grok其实就是用正则表达式匹配内容,即我们的日志信息。
(第一个链接属于官方链接,但是我打开却无法运行出结果,建议使用第二个网页),用一下语句匹配我们的日志,发现时间信息可以成功获取
③Kibana自带
三、logstash——messages时间戳替换
查看一条messages的输出日志,发现日期格式如下,用grok匹配,有正确结果后再写入logstash.yml
# input
Jan 22 10:01:01 elk-study systemd: Started Session 45358 of user root.
# pattern
%{SYSLOGTIMESTAMP:timestamp}
配置conf文件:
vim /etc/logstash/conf.d/system.conf
input {
file {
path => "/var/log/messages"
type => "systemlog"
start_position => "beginning"
stat_interval => "2"
# sincedb_path => "/dev/null"
}
}
filter{
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:logdate}" }
}
date {
match => [ "logdate", "MMM dd HH:mm:ss" , "MMM d HH:mm:ss" ]
target => "@timestamp"
timezone => "Asia/Shanghai"
}
mutate{
remove_field => "logdate"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-systemlog-%{+YYYY.MM.dd}"
}
}
这时再生成,可以发现已经拥有了不同天的索引,时间戳也成功对应
四、logstash——log时间戳替换
# input
2021-01-29 08:53:00,321 - handlers.py[DEBUG]
# pattern
%{TIMESTAMP_ISO8601:logdate}
input {
file {
path => "/var/log/*.log"
start_position => "beginning"
stat_interval => "2"
# sincedb_path => "/dev/null"
}
}
filter{
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:logdate}" }
}
date {
match => [ "logdate", "YYYY-MM-dd HH:mm:ss,SSS" ]
target => "@timestamp"
timezone => "Asia/Shanghai"
}
mutate{
remove_field => "logdate"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-systemlog-%{+YYYY.MM.dd}"
}
}
五、Filebeat——Pipeline实现时间戳替换
参考博客:
ELK - Logstash 中 date 日期时间的常见匹配和处理方式
ELK - Logstash 中 date 日期时间的常见匹配和处理方式