请教下这种情况下如何 logstash 处理时间问题?

2021-08-09 18:35:59 +08:00
 watara

背景:

因为项目更新,打算弃用原来的日志流架构,换用 logstash 处理日志。为了保持后续流程不动,所以需要 logstash 的输出要保持于之前架构的格式一致。

问题:

日志流需要处理的是 nginx 的日志,日志体中已经有一个时间字段(在这里记作 ST1 吧,原始格式是"23/Jul/2021:14:25:29 +0800"),然后输出的内容中会涉及到时间的字段,格式以及来源分别如下:

字段 1:"2021/7/23 14:25",记录 logstash 处理的时间

字段 2:"20210723",根据 nginx 原始日志时间 ST1 转换出的日期

字段 3:"2021/7/23 14:25",根据 nginx 原始日志时间 ST1 转换出的时间

字段 4:"23/Jul/2021:14:25:29 +0800",原始的 nginx 原始日志时间 ST1

我现在能正确填充字段 4,其他 3 个字段(特别是字段 2 )没有思路,请教有大佬能指点一二么?

757 次点击
所在节点    Logstash
5 条回复
calmzhu
2021-08-09 18:39:07 +08:00
https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html

If your time field has multiple possible formats, you can do this:

match => [ "logdate", "MMM dd yyyy HH:mm:ss",
"MMM d yyyy HH:mm:ss", "ISO8601" ]
watara
2021-08-09 20:49:46 +08:00
@calmzhu #1 感谢大佬,我再去仔细研究下这篇文章
watara
2021-08-10 13:59:14 +08:00
@calmzhu #1 我仔细研究了下这篇文章,好像并不符合我的需求。我用 ruby 模块搞定我的需求了。

```
filter {
ruby {
code => 'event.set("[curr_date]", Time.at(Time.now.to_i - 86400).localtime("+05:30").strftime("%Y-%m-%d %H:%M:%S"))'
}
}
```
calmzhu
2021-08-14 15:25:05 +08:00
@watara
logstash 默认有 @timestamp 字段表示处理时间。
date 可以解析 nginx 日志时间。

格式转换的话,看你之前架构支持格式了,必须转文本的话 grok 或者直接写 ruby 都很省事。
watara
2021-08-14 15:29:03 +08:00
@calmzhu #4 恩呢,后来搞定了呢,用的 Ruby,发现只是这种简单小功能,还是很方便的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/794702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX