如何在Ingest Node管道Set处理器中设置条件,当log.level为error时新增字段
实现方案
1. 管道配置
你可以直接使用以下配置创建Ingest管道,核心是在Set处理器中通过Painless表达式配置判断条件:
PUT _ingest/pipeline/add_statuscode_pipeline { "processors": [ { "set": { "field": "statuscode", "value": 500, "if": "ctx?.messageinfo != null && ctx.messageinfo['log.level'] == 'error'", "ignore_failure": true } } ] }
2. 配置说明
- 条件判断中增加了
ctx?.messageinfo != null的非空校验,避免messageinfo字段不存在时管道执行报错 - 因为
log.level本身是带点的字段名,不是嵌套对象,所以用ctx.messageinfo['log.level']的方式访问字段值 value可以根据你的业务需求自定义修改,示例中设置为500ignore_failure设置为true后,即使该处理器执行失败也不会中断整个管道流程- 如果你需要把
statuscode字段放到messageinfo嵌套结构下,只需要将Set处理器的field参数值改为messageinfo.statuscode即可
3. 效果测试
你可以通过Ingest管道的模拟接口验证效果,测试请求如下:
POST _ingest/pipeline/add_statuscode_pipeline/_simulate { "docs": [ { "_source": { "messageinfo": { "log.origin": { "file.line": 131 }, "@timestamp": "2021-11-15T10:07:36.125Z", "service.name": "my-server", "ecs.version": "1.6.0", "log.level": "error", "message": "Failed" } } } ] }
返回结果中可以看到文档已经自动新增了statuscode字段,值为你配置的数值。
内容的提问来源于stack exchange,提问作者sidharth vijayakumar
相关产品推荐
相关产品推荐

