You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Telegraf和InfluxDB解析Zeek IDS日志的Grok模式匹配问题

解决Telegraf解析Zeek制表符分隔日志的Grok匹配问题

问题说明

使用Telegraf结合InfluxDB解析Zeek IDS日志时,Zeek日志采用制表符分隔,但Telegraf读取日志后会将制表符显示为\t转义字符,导致无法编写有效的Grok模式拆分字段,多次尝试均失败。

Zeek日志示例

1669666446.619248       CLod7M1SB6EGHAp50a      fe80::a00:27ff:fe8d:4f7d        143     ff02::16        0       icmp    -       -       -       -       OTH     F       F       0       -       1       96      00       -

Telegraf调试信息

2022-11-29T14:36:52Z D! [parsers.grok::tail] Grok no match found for: "1669666446.619248	CLod7M1SB6EGHAp50a	fe80::a00:27ff:fe8d:4f7d	143	ff02::16	0	icmp	-	-	-	-	OTH	F	F	0	-	1	96	0	0	-"

错误的Grok尝试

%{SYSLOGHOST:ts}	%{WORD:uuid}

测试结果:无匹配内容

解决方案

方案1:修正Grok模式

  • Grok中匹配转义后的制表符需使用\t,而非直接输入制表符,因为Telegraf传递给Grok的日志里制表符已转义为\t。
  • 时间戳字段应使用NUMBER模式(Zeek时间戳是数字格式),而非SYSLOGHOST(该模式用于匹配主机名)。
  • 针对示例日志的基础Grok模式可修改为:
%{NUMBER:ts}\t%{WORD:uuid}
  • 完整匹配所有字段的Grok模式示例:
%{NUMBER:ts}\t%{WORD:uuid}\t%{IPV6:src_ip}\t%{NUMBER:src_port}\t%{IPV6:dst_ip}\t%{NUMBER:dst_port}\t%{WORD:proto}\t%{DATA:field1}\t%{DATA:field2}\t%{DATA:field3}\t%{DATA:field4}\t%{WORD:type}\t%{WORD:flag1}\t%{WORD:flag2}\t%{NUMBER:num1}\t%{DATA:field5}\t%{NUMBER:num2}\t%{NUMBER:num3}\t%{NUMBER:num4}\t%{DATA:field6}

方案2:使用Telegraf CSV解析器(更简便)

Zeek日志是标准制表符分隔格式,直接用CSV解析器比Grok更高效,无需编写复杂模式。在Telegraf配置中添加:

[[inputs.tail]]
  files = ["/path/to/your/zeek/logs/*.log"]
  from_beginning = true

[[processors.csv]]
  delimiter = "\t"
  # 根据Zeek日志的实际字段名替换下方的header内容
  header = ["ts", "uuid", "src_ip", "src_port", "dst_ip", "dst_port", "proto", "unused1", "unused2", "unused3", "unused4", "packet_type", "flag_f", "flag_f2", "num_zero", "unused5", "count", "length", "unused6", "unused7"]

内容的提问来源于stack exchange,提问作者Mateus Soares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:55:35