更新时间:2026-04-30 GMT+08:00

同步告警指标到Prometheus

在构建全栈监控体系时,运维团队通常使用Prometheus汇总各类系统指标,但Elasticsearch的业务数据(如访问量统计、点击量、交易量)隔离在搜索集群内部,难以在统一的Grafana看板中进行跨维度对比。如何将Elasticsearch强大的聚合查询能力转化为Prometheus可识别的时序指标?CSS服务的Elasticsearch集群预置的OpenDistro告警插件内置了Prometheus通路,利用Pushgateway机制,将查询结果定时推送到Prometheus监控服务器。通过这一方案,您可以将搜索集群转化为一个“高级传感器”,实现业务指标与系统指标的统一联动、分析与预警。

功能介绍

由于Elasticsearch的数据需要通过告警插件主动“推(Push)”出的,而Prometheus默认采用“拉(Pull)”模式,因此中间需要通过Prometheus Pushgateway进行中转。Elasticsearch集群预置的OpenDistro告警插件(opendistro_alerting)内置了Prometheus通路,用于对接Prometheus监控服务器。

图1 告警指标同步链路
  1. Monitor(监控器)定义了查询条件,即需要同步的告警指标和查询频率。
  2. Trigger(触发器)根据查询条件进行决策,满足什么条件触发告警,以及触发后如何将数据转化为Prometheus标准的JSON报文(Action)。
  3. Destination(目的端)是消息通路,负责将Prometheus标准的JSON报文发送至Prometheus的Pushgateway。
  4. Pushgateway是暂存区,负责接收Elasticsearch推送的数据。
  5. Prometheus会定期从Pushgateway拉取数据,并将其存储在Prometheus的时间序列数据库中,以便用户在看板中查看。

OpenDistro告警插件的详细信息请参见官方文档OpenDistro Alerting,Prometheus Pushgateway的详细信息请参见官方文档Prometheus Pushgateway

约束与限制

  • Elasticsearch集群要求镜像版本不低于7.10.2_24.3.3_xxx时才支持配置告警指标同步到Prometheus。
  • Elasticsearch集群必须能访问Prometheus Pushgateway的Endpoint。Prometheus和Elasticsearch之间要保证网络互通,否则告警信息无法成功发送。
  • 只支持同步Gauge(仪表盘)类型的数据,适用于统计值、百分比等可增可减的数值。

配置告警同步

  1. 登录云搜索服务管理控制台
  2. 在左侧导航栏,选择“集群管理 > Elasticsearch”
  3. 在集群列表,选择目标集群,单击操作列的“Kibana”,登录Kibana。
  4. 在Kibana页面,选择左侧导航栏的“Open Distro for Elasticsearch > Alerting”
  5. 新建一个Prometheus目的端,用于建立Elasticsearch到Pushgateway的物理连接。
    1. 在“Alerting”页面选择“Destinations”页签,单击“Add destination”配置目的端信息。
      表1 Destinations参数说明

      参数名称

      说明

      Name

      自定义目的端名称。

      Type

      选择通知类型。请固定选择“PROMETHEUS”

      Settings

      输入Prometheus监控服务器的Pushgateway地址。

      • 当前仅支持Prometheus Gauge类型的可增可减仪表盘。通过查询具体的语句,将数值型结果同步到Pushgateway用于Prometheus监控。
      • 支持HTTP和HTTPS两种Pushgateway地址。
      图2 Add destination
    2. 单击“Create”完成目的端配置。
    3. 返回Destinations列表,在列表可见新建的Prometheus目的端,表示创建完成。
      图3 Destinations列表
  6. 新建监控器与触发器,定义告警的触发条件和监控频率。
    1. 在“Alerting”页面选择“Monitors”页签,单击“Create monitors”配置监控器,定义需要同步的数据来源和查询频率。
      表2 Monitors参数说明

      参数名称

      说明

      Configure monitor

      Monitor name

      自定义一个监控器名称。

      Monitor state

      选择是否关闭监控器。

      • 勾选Disable monitor:关闭监控器,将无法使用。
      • 取消勾选Disable monitor(推荐):启用监控器。

      Define monitor

      Method of definition

      选择一种方式定义监控器,推荐使用“Define using extraction query”。

      • Define using visual graph:可视化的query语句
      • Define using extraction query:具体的query语句

      Index

      选择监控的索引。

      Time field

      时间字段,用于定义count等计数参数。

      仅当选择“Define using visual graph”方式定义监控器时,才需配置。

      Monitor schedule

      Frequency

      选择监控频率,并设置监控频率的间隔信息。

      • By interval:按时间间隔
      • Daily:按每天
      • Weekly:按每周
      • Monthly:按每月
      • Custom cron expression:按cron脚本规划
    2. 单击“Create”跳转到“Create trigger”页面。
    3. 在“Create trigger”页面定义数据如何转化为Prometheus指标格式。
      表3 Trigger参数说明

      参数名称

      说明

      Define trigger

      Trigger name

      自定义一个触发器名称。

      Severity level

      定义触发器的敏感度,选择触发多少条告警之后发送告警消息,“1”为最高敏感度。

      Trigger condition

      定义触发条件。满足触发条件就会触发告警。

      建议设置一个一定会触发的条件(如“1 > 0”),让查询结果每次都能同步到Pushgateway。

      Configure actions

      Action name

      自定义一个触发器动作名称。

      Destination

      选择5创建的Prometheus目的端。

      Message

      定义消息发布的body体,必须是json格式。

      Message模板:

      {
       "metricsName":"hits_total_value", //Prometheus的指标名称
       "metricsLabel": {"label_key1":"label_value1","label_key2":"label_value2"}, //Prometheus的标签
       "metricsValue":{{ctx.results.0.hits.total.value}}, //Prometheus的指标值
       "jobName":"job_name", //Prometheus的监控任务名
       "metricsHelp":"***" //可选参数,指标说明
      }

      Action throttling

      设置消息发送频率用来限制在指定时间段内收到的通知消息数量,防止在异常波动期间瞬间产生数千条消息致资费消耗或信息轰炸。

      例如设置10分钟,在接下来的10分钟内,即使触发条件满足多次,Prometheus仅发送1次告警通知。超过10分钟后,如果触发告警条件,Prometheus才会再次发送告警通知。

    4. 单击“Send test message”,向Prometheus发送测试信息验证同步链路。
      图4 发送验证信息
    5. 图5所示,在Prometheus能够收到触发器的Message消息,表示设置成功。
      图5 成功收到Message
    6. 单击“Create”返回Monitor详情页,完成配置。