Filebeat 如何用正则判断字符串以数字开头?
Filebeat 的条件判断用正则 ^[0-9] 或 ^\\d 匹配"以数字开头"的字符串,配合 processors 里的 drop_event 或 add_fields 实现条件处理。本文给出具体配置示例与常见写法错误。
在 Filebeat 的 processor 条件里用 regexp 匹配:regexp: {message: "^[0-9]"}——^ 锚定行首,[0-9](或 \\d)表示数字字符。
典型用法:丢弃以数字开头的行
processors:
- drop_event:
when:
regexp:
message: "^[0-9]"
典型用法:只保留以数字开头的行
processors:
- drop_event:
when:
not:
regexp:
message: "^\\d"
典型用法:多行合并(把"不以数字开头的行"并入上一行)
堆栈跟踪等场景,日期/数字开头的行才是新日志:
parsers:
- multiline:
type: pattern
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' # 日期开头算新行
negate: true
match: after
写法注意
- YAML 里反斜杠注意转义:双引号字符串中
\\d,单引号中\d; ^[0-9]只判断"第一个字符是数字";要"整行是纯数字"用^[0-9]+$;- Filebeat 的
when条件还有equals、contains、starts_with等——只判断开头其实是starts_with的活,但"以数字开头"必须正则。
观测云对照
观测云 DataKit 的多行采集直接在控制台配置"行首匹配正则"(如日期格式),条件丢弃用 Pipeline 的 if match(message, "^[0-9]") { drop() } 一行搞定。
常见问题(FAQ)
Q:regexp 匹配不到带空格的行? 行首有空格时 ^ 后还有空格——先用 ^\\s*[0-9] 或 trim 处理。
Q:能同时判断"以数字开头且包含 ERROR"? 用 and 组合多个条件。