Filebeat处理Azure Event Hub日志时Ingest Pipeline不生效问题
Filebeat配置Elasticsearch Ingest Pipeline不生效的排查方案
常见遗漏配置与排查方向
- azure模块配置覆盖全局output
你启用了Filebeat的azure模块,模块级别的输出配置优先级高于全局output.elasticsearch的配置,仅在全局配置加pipeline: "filebeat-otc"不会生效。需要修改azure模块的配置文件(通常在Filebeat安装目录的modules.d/azure.yml里),在对应input的配置下添加pipeline指定,或者关闭模块的自定义输出配置,强制走全局output。 - 未将测试的pipeline正式写入ES集群
_simulate接口只是模拟运行pipeline,不会将配置持久化到ES集群。你需要执行以下请求正式创建pipeline:
PUT _ingest/pipeline/filebeat-otc { "processors": [ { "grok": { "field": "message", "patterns": [ "%{TIME:timestamp}\\s%{LOGLEVEL}\\s{[a-zA-Z]*:%{UUID:CorrelationID},[a-zA-Z]*:%{TEXT:OperationTittle},[a-zA-Z]*:%{TEXT:OriginSystemName},[a-zA-Z]*:%{TEXT:TargetSystemName},[a-zA-Z]*:%{TEXT:OperationProcess},[a-zA-Z]*:%{TEXT:LogMessage},[a-zA-Z]*:%{TEXT:ErrorMessage}}" ], "pattern_definitions": { "LOGLEVEL" : "\\[[^\\]]*\\]", "TEXT" : "[a-zA-Z0-9- ]*" } } } ] }
创建完成后执行GET _ingest/pipeline/filebeat-otc确认返回内容和你的配置一致。
- grok模式与实际收到的日志不匹配
你测试用的日志样本是Serilog直接输出的内容,但经过Azure Event Hub、Filebeat azure模块处理后,实际写入message字段的内容可能附带了Event Hub的额外元数据前缀、换行符等,导致grok匹配失败。匹配失败的文档会在tags字段新增_grok_parse_failure标签,你可以查看现有文档的tags字段确认是否属于这种情况。 - 修改配置后未重启Filebeat进程
Filebeat配置修改后需要重启进程才会生效,确认你更新filebeat.yml后已经重启了对应的Filebeat服务。 - 索引模板覆盖pipeline配置
如果你的ES集群里对应索引的索引模板设置了默认pipeline,优先级会高于Filebeat传入的pipeline配置,需要检查索引模板的index.default_pipeline设置是否和你指定的pipeline一致。
快速验证步骤
- 手动写入测试文档到ES,验证pipeline有效性:
PUT test-verify/_doc/1?pipeline=filebeat-otc { "message": "15:13:59 [INF] {CorrelationId:83355884-a351-4c8b-af8d-b77c48462f36,OperationTittle:Operation1,OriginSystemName:Fexa,TargetSystemName:Usina,OperationProcess:Testing Log Data,LogMessage:Esto es una buena prueba,ErrorMessage:null}" }
执行GET test-verify/_doc/1查看返回的文档是否已经拆分出对应字段。
2. 查看Filebeat运行日志,排查是否有ES连接错误、pipeline不存在、权限不足等报错信息。
优化建议
你当前的日志内容是类JSON结构,相比grok,使用dissect处理器或者先提取大括号内的内容做JSON解析,稳定性更高、性能更好,也能避免正则匹配出错的问题。
内容的提问来源于stack exchange,提问作者Daniel Silva
相关产品推荐
相关产品推荐

