【发布时间】:2017-10-11 19:38:08
【问题描述】:
我对 ELK 和 Grok 过滤非常陌生,我正在努力在我的 grok 过滤器中解析这种特殊模式。
我已使用grok debugger 尝试解决此问题,但虽然我喜欢该工具,但我只是对自定义模式感到困惑。
最后,我希望将filebeat发送的大量日志文件解析到logstash,然后将解析后的日志发送到elasticsearch并用kibana或类似的可视化工具显示。
我需要解析的行遵循以下模式:
1310 2017-01-01 16:48:54 [325:51] [326:49] [359:57] Some log info text
- 前四位是日志类型标识符,将用于分组。我称该字段为“LogLineID”。
- 日期格式为 YYYY-MM-DD HH:MM:SS,并且解析正常。我将该字段称为“LogDate”。
- 但现在问题开始了。在方括号内,我有计数器,如果您愿意,可以格式化为 MM:SS。我终生无法找到一种方法来解决这些问题,但我需要比较这些时间,因此我想将它们存储为分钟和秒,而不仅仅是数字。
- 第一个是计数器“TimeSpent”,
- 第二个是计数器“TimeStarted”和
- 第三个是计数器“TimeSinceDown”。
- 然后,最后是信息文本,我通过简单地应用 %{GREEDYDATA:LogInfo} 就设法理解了它。
我注意到一小时内的分钟数可能远高于标准的 60 分钟,所以我可能在这里找错了树,试图用 TIMESTAMP_ISO8601 等日期模式解析它,但是,我没有真的不知道该怎么做。
所以,我走了这么远:
%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogDate}
并且如上所述能够(通过删除方括号部分)用
解析日志信息文本%{GREEDYDATA:LogInfo}
创建一个字段 LogInfo。
但那是我被困住了。有人可以帮我弄清楚其余的吗?
提前致谢。
PS!我还找到了%{NUMBER:duration},但据我所知,它只能用点解析时间戳,而不是冒号..
【问题讨论】:
标签: date time timestamp grok filebeat