如何在Elastic规则体中获取文档字段详情?ServiceNow Webhook传参问题
解决Elastic告警规则传递命中文档字段到ServiceNow API的问题
核心问题分析
你遇到的{{context.hits.0.message}}返回空值,是因为Elastic查询型告警规则的命中文档上下文路径并非context.hits,而是存储在context.results.hits.hits数组中,且文档的原始字段都嵌套在_source节点下。
修正后的代码示例
以下是调整后的webhook请求体模板,同时修复了原代码中未闭合的引号问题:
{{#ParseHjson}} { "caller_id": "xyz", "u_ticket_classification": "Request", "category": "Software", "subcategory": "Application", "short_description": "First hit document: {{context.results.hits.hits.0._source.message}}" } {{/ParseHjson}}
关键说明
- 路径正确性:
context.results.hits.hits.0指向第一个命中的文档,_source.message是该文档中message字段的取值(如果你的字段名不是message,替换为实际字段名即可) - 语法规范:HJSON允许键名不加引号,但为了避免潜在的语法解析问题,建议给所有键名添加双引号
- 验证步骤:在Elastic规则编辑页使用「测试连接器」功能,查看生成的请求体,确认字段值是否正确渲染
额外排查点
- 确认命中的文档确实包含目标字段:在Elastic Discover中执行相同的查询,检查返回结果是否存在
message字段 - 规则权限:确保告警规则拥有访问目标索引及对应字段的权限
- 规则类型适配:如果是异常检测、指标阈值等其他类型的告警规则,上下文结构会不同,需要对应调整路径(比如异常检测规则的上下文在
context.anomalies中)
内容的提问来源于stack exchange,提问作者Naveen Kumar
相关产品推荐
相关产品推荐

