
# 同步告警指标到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告警指标同步链路   
![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002554314477.png "点击放大")
1. Monitor（监控器）定义了查询条件，即需要同步的告警指标和查询频率。
2. Trigger（触发器）根据查询条件进行决策，满足什么条件触发告警，以及触发后如何将数据转化为Prometheus标准的JSON报文（Action）。
3. Channel（通道）是消息通路，负责将Prometheus标准的JSON报文发送至Prometheus的Pushgateway。
4. Pushgateway是暂存区，负责接收OpenSearch推送的数据。
5. Prometheus会定期从Pushgateway拉取数据，并将其存储在Prometheus的时间序列数据库中，以便用户在看板中查看。
告警插件的详细信息请参见官方文档[Alerting - OpenSearch Documentation](https://docs.opensearch.org/2.19/observing-your-data/alerting/index/)，通知插件的详细信息请参见官方文档[Notifications - OpenSearch Documentation](https://docs.opensearch.org/2.19/observing-your-data/notifications/index/)，Prometheus Pushgateway的详细信息请参见官方文档[Prometheus Pushgateway](https://github.com/prometheus/pushgateway)。
#### 约束与限制
- 仅当OpenSearch集群版本号为2.19.0或3.4.0（镜像版本不低于3.4.0_26.6.0_xxx）时，才支持配置告警指标同步到Prometheus。
- OpenSearch集群必须能访问Prometheus Pushgateway的Endpoint。Prometheus和OpenSearch之间要保证网络互通，否则告警信息无法成功发送。
- 只支持同步Gauge（仪表盘）类型的数据，适用于统计值、百分比等可增可减的数值。
 
#### 配置告警同步
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，选择目标集群，单击操作列的"Dashboards"，登录OpenSearch Dashboards。
4. 在OpenSearch Dashboards页面，选择左侧导航栏的"菜单 \> Notifications"。
5. 新建一个Prometheus通道，用于建立OpenSearch到Pushgateway的物理连接。
   1. 在Channels页面单击"Create channel"配置通道。
      表1Channel参数说明 
      | 参数名称                | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
      |:---|:---|
      | Name                | 自定义通道名称。                                                                                                                                                                                                                                                                                                                                                                                                                                              |
      | Description         | 通道描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                               |
      | Channel type        | 选择通知类型。请固定选择"PROMETHEUS"。                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | Prometheus Endpoint | 输入Prometheus监控服务器的Pushgateway地址。 - 当前仅支持Prometheus Gauge类型的可增可减仪表盘。通过查询具体的语句，将数值型结果同步到Pushgateway用于Prometheus监控。  - 支持HTTP和HTTPS两种Pushgateway地址。   |
         
      图2Create channel
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002417955057.png "点击放大")
      
   
   2. 单击"Create"创建通道。
   
   3. 返回Channels页面，在列表可见新建的Prometheus目的端，表示创建完成。
      图3Channels列表
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002384396084.png "点击放大")
      
    
6. 在Dashboards页面，选择左侧导航栏的"菜单 \> Alerting"，进入告警插件界面。
7. 新建监控器和触发器，定义告警的触发条件和监控频率。
   1. 在Alerting页面选择"Monitors"页签，单击"Create monitors"配置监控器，定义需要同步的数据来源和查询频率。
      表2Monitors参数说明 
      | 参数名称                                           || 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
      |:---|---|:---|
      | Monitor details | Monitor name                  | 自定义一个监控器名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | Monitor details | Monitor type                  | 选择Monitor类型。 - Per query monitor（普通监控）  - Per bucket monitor（聚合桶监控）  - Per cluster metrics monitor（集群指标监控）  - Per document monitors（文档级监控）  - Composite monitors（复合监控）   本示例选择"Per query monitor"，其类型的配置指导请参见OpenSearch官方文档[Monitors](https://docs.opensearch.org/2.19/observing-your-data/alerting/monitors/)。 |
      | Monitor details | Monitor defining method       | 选择一种方式定义监控器，推荐使用"Extraction query editor"。 - Visual editor：可视化的query语句  - Extraction query editor：具体的query语句  - Anomaly detector：异常检测插件的监测   选择不同的"Monitor type"，所支持的监控方式不同，请以实际界面为准。                                                                                                                                                                                                                                                                                                                                                                                                                                       |
      | Monitor details | Detector                      | 当"Monitor defining method"选择"Anomaly detector"时，请选择异常检测任务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
      | Monitor details | Frequency                     | 选择监控频率，并设置监控频率的间隔信息。 - By interval：按时间间隔  - Daily：按每天  - Weekly：按每周  - Monthly：按每月  - Custom cron expression：按cron脚本规划                                                                                                                                                                                 |
      | Select data     | Index                         | 当"Monitor defining method"选择"Visual editor"或"Extraction query editor"方式定义监控时，需要选择监控的索引。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
      | Select data     | Time field                    | 当"Monitor defining method"选择"Visual editor"方式定义监控时，需要选择一个字段作为时间字段，来定义count等计数参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
      | Query           | Metrics                       | 当"Monitor defining method"选择"Visual editor"方式定义监控时，需要设置提取统计数据的指标范围。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      | Query           | Time range for the last       | 当"Monitor defining method"选择"Visual editor"方式定义监控时，需要设置插件应监控的时间范围。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
      | Query           | Data filter                   | 当"Monitor defining method"选择"Visual editor"方式定义监控时，需要设置过滤器进行数据检索。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | Query           | Group by                      | 当"Monitor defining method"选择"Visual editor"方式定义监控时，需要指定一个字段，使其每一个值都会触发告警。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      | Query           | Define extraction query       | 当"Monitor defining method"选择"Extraction query editor"方式定义监控时，需要输入query语句定义监控。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      | Query           | Request type                  | 当"Monitor type"选择"Per cluster metrics monitor"时，需要指定请求类型来监控集群指标，例如运行状况、CPU使用率等。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
      | Query           | Preview query and performance | 预览当前Query配置下查询结果。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
         
      
   
   2. 单击"Create"跳转到"Create trigger"页面。
   
   3. 在"Create trigger"页面定义数据如何转化为Prometheus指标格式。
      表3Trigger参数说明 
      | 参数名称                                 || 说明                                                                                                                                                                                                                                                                                                                                                                                                                                       |
      |:---|---|:---|
      | Define trigger    | Trigger name      | 自定义一个触发器名称。                                                                                                                                                                                                                                                                                                                                                                                                                              |
      | Define trigger    | Severity level    | 定义触发器的敏感度，选择触发多少条告警之后发送告警消息，"1"为最高敏感度。                                                                                                                                                                                                                                                                                                                                                                                                   |
      | Define trigger    | Trigger condition | 定义触发条件。满足触发条件就会触发告警。 建议设置一个一定会触发的条件（如"1 \> 0"），让查询结果每次都能同步到Pushgateway。                                                                                                                                                                                                                                                                                                                   |
      | Configure actions | Action name       | 自定义一个触发器动作名称。                                                                                                                                                                                                                                                                                                                                                                                                                            |
      | Configure actions | Destination       | 选择[5]创建的Prometheus目的端。                                                                                                                                                                                                                                                                                                                                                                  |
      | Configure actions | 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":"***" //可选参数，指标说明 } ``` |
      | Configure actions | throttling        | 设置消息发送频率用来限制在指定时间段内收到的通知消息数量，防止在异常波动期间瞬间产生数千条消息致资费消耗或信息轰炸。 例如设置10分钟，在接下来的10分钟内，即使触发条件满足多次，Prometheus仅发送1次告警通知。超过10分钟后，如果触发告警条件，Prometheus才会再次发送告警通知。                                                                                                                                                                                                                                        |
         
      
   
   4. 单击"Send test message"，向Prometheus发送测试信息验证同步链路。
      图4发送验证消息   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002417960673.png "点击放大") 
   
   5. 如[图5]所示，在Prometheus能够收到触发器的Message消息，表示设置成功。
      图5成功收到Message   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002384208558.png "点击放大") 
   
   6. 单击"Create"返回Monitor详情页，完成配置。
    
 
