更新时间:2026-04-24 GMT+08:00
分享

同步告警指标到Prometheus

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

功能介绍

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

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

告警插件的详细信息请参见官方文档Alerting - OpenSearch Documentation,通知插件的详细信息请参见官方文档Notifications - OpenSearch Documentation,Prometheus Pushgateway的详细信息请参见官方文档Prometheus Pushgateway

约束与限制

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

配置告警同步

  1. 登录云搜索服务管理控制台
  2. 在左侧导航栏,选择“集群管理 > OpenSearch”
  3. 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
  4. 在OpenSearch Dashboards页面,选择左侧导航栏的“菜单 > Notifications”
  5. 新建一个Prometheus通道,用于建立OpenSearch到Pushgateway的物理连接。
    1. 在Channels页面单击“Create channel”配置通道。
      表1 Channel参数说明

      参数名称

      说明

      Name

      自定义通道名称。

      Description

      通道描述信息。

      Channel type

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

      Prometheus Endpoint

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

      • 当前仅支持Prometheus Gauge类型的可增可减仪表盘。通过查询具体的语句,将数值型结果同步到Pushgateway用于Prometheus监控。
      • 支持HTTP和HTTPS两种Pushgateway地址。
      图2 Create channel

    2. 单击“Create”创建通道。
    3. 返回Channels页面,在列表可见新建的Prometheus目的端,表示创建完成。
      图3 Channels列表

  6. 在Dashboards页面,选择左侧导航栏的“菜单 > Alerting”,进入告警插件界面。
  7. 新建监控器和触发器,定义告警的触发条件和监控频率。
    1. 在Alerting页面选择“Monitors”页签,单击“Create monitors”配置监控器,定义需要同步的数据来源和查询频率。
      表2 Monitors参数说明

      参数名称

      说明

      Monitor details

      Monitor name

      自定义一个监控器名称。

      Monitor type

      选择Monitor类型。

      • Per query monitor(普通监控)
      • Per bucket monitor(聚合桶监控)
      • Per cluster metrics monitor(集群指标监控)
      • Per document monitors(文档级监控)
      • Composite monitors(复合监控)

      本示例选择“Per query monitor”,其类型的配置指导请参见OpenSearch官方文档Monitors

      Monitor defining method

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

      • Visual editor:可视化的query语句
      • Extraction query editor:具体的query语句
      • Anomaly detector:异常检测插件的监测

      选择不同的“Monitor type”,所支持的监控方式不同,请以实际界面为准。

      Detector

      “Monitor defining method”选择“Anomaly detector”时,请选择异常检测任务。

      Frequency

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

      • By interval:按时间间隔
      • Daily:按每天
      • Weekly:按每周
      • Monthly:按每月
      • Custom cron expression:按cron脚本规划

      Select data

      Index

      “Monitor defining method”选择“Visual editor”“Extraction query editor”方式定义监控时,需要选择监控的索引。

      Time field

      “Monitor defining method”选择“Visual editor”方式定义监控时,需要选择一个字段作为时间字段,来定义count等计数参数。

      Query

      Metrics

      “Monitor defining method”选择“Visual editor”方式定义监控时,需要设置提取统计数据的指标范围。

      Time range for the last

      “Monitor defining method”选择“Visual editor”方式定义监控时,需要设置插件应监控的时间范围。

      Data filter

      “Monitor defining method”选择“Visual editor”方式定义监控时,需要设置过滤器进行数据检索。

      Group by

      “Monitor defining method”选择“Visual editor”方式定义监控时,需要指定一个字段,使其每一个值都会触发告警。

      Define extraction query

      “Monitor defining method”选择“Extraction query editor”方式定义监控时,需要输入query语句定义监控。

      Request type

      “Monitor type”选择“Per cluster metrics monitor”时,需要指定请求类型来监控集群指标,例如运行状况、CPU使用率等。

      Preview query and performance

      预览当前Query配置下查询结果。

    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":"***" //可选参数,指标说明
      }

      throttling

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

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

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

相关文档