You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch集成Slack:提取特定字段的技术求助

解决方案

你遇到的核心问题是没搞清楚alerts变量的结构——它本质是数组类型,直接用alerts.observer.hostname这类语法会失效,因为数组不能直接访问子字段,必须指定具体元素的索引,或者遍历所有元素。

1. 先确认字段的实际路径

先发送一条包含{{alerts.all.data}}的消息,拿到完整的JSON结构,比如可能的结构示例:

[
  {
    "_source": {
      "observer": {
        "hostname": "web-server-01"
      },
      "source": {
        "ip": "192.168.1.100"
      }
    },
    "context": {...},
    "state": {...}
  }
]

根据这个结构就能明确字段的层级关系。

2. 单个告警的字段提取(signals_count=1)

如果每次只触发1条告警,直接取数组的第一个元素即可:

  • 若字段在_source下:{{alerts.0._source.observer.hostname}}、{{alerts.0._source.source.ip}}
  • 若字段直接在alert根节点:{{alerts.0.observer.hostname}}

也可以用更语义化的语法:{{alerts.first._source.observer.hostname}}

3. 多个告警的字段提取(signals_count>1)

如果一次触发多条告警,需要用模板循环遍历所有告警:

Rule `{{context.rule.name}}` generated `{{state.signals_count}}` alerts:
{{#each alerts}}
- 主机名: {{_source.observer.hostname}} | 源IP: {{_source.source.ip}}
{{/each}}

关于keyword类型的说明

没错,observer.hostname是keyword类型完全不影响数据提取,只要字段存在且路径正确,就能正常获取值。

测试建议

先单独测试单个字段的提取语法,比如发送一条只包含{{alerts.0._source.observer.hostname}}的消息,确认能拿到正确值后,再组合到完整的通知模板中。

内容的提问来源于stack exchange,提问作者Edward McClellan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:29:59