如何在Logstash Grok中去除字段值中的\r字符
解决Winlogbeat日志Grok提取AlertName字段末尾带\r的问题
问题场景
通过Winlogbeat收集的日志格式如下:
AlertName=Wireless Access Point Alert
AlertStatus=Active
AlertActiveID=8618424
AlertDescription=
Severity=Critical
使用以下两种Grok模式提取AlertName字段时,值末尾始终带有\r字符:
AlertName=%{GREEDYDATA:AlertName}
AlertName=%{GREEDYDATA:AlertName}\s*
解决方法
Grok模式精准匹配
利用正向预查匹配到\r前的内容,避免将\r纳入字段值:AlertName=%{DATA:AlertName}(?=\r)其中
(?=\r)是正向断言,仅匹配\r之前的字符,不会捕获\r本身。使用mutate过滤器清除特殊字符
如果Grok调整无效,可在数据处理环节添加gsub操作去除\r:- Logstash配置示例:
mutate { gsub => ["AlertName", "\r", ""] } - Elasticsearch Ingest Pipeline配置示例:
{ "processors": [ { "gsub": { "field": "AlertName", "pattern": "\\r", "replacement": "" } } ] }
- Logstash配置示例:
Winlogbeat收集阶段预处理
在Winlogbeat配置中添加处理器,提前清除日志中的\r:processors: - mutate: gsub: - field: message pattern: '\r' replacement: ''
内容的提问来源于stack exchange,提问作者Roopesh
相关产品推荐
相关产品推荐

