
# 同步告警指标到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告警指标同步链路   
![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002523087784.png "点击放大")
1. Monitor（监控器）定义了查询条件，即需要同步的告警指标和查询频率。
2. Trigger（触发器）根据查询条件进行决策，满足什么条件触发告警，以及触发后如何将数据转化为Prometheus标准的JSON报文（Action）。
3. Destination（目的端）是消息通路，负责将Prometheus标准的JSON报文发送至Prometheus的Pushgateway。
4. Pushgateway是暂存区，负责接收Elasticsearch推送的数据。
5. Prometheus会定期从Pushgateway拉取数据，并将其存储在Prometheus的时间序列数据库中，以便用户在看板中查看。
OpenDistro告警插件的详细信息请参见官方文档[OpenDistro Alerting](https://opendistro.github.io/for-elasticsearch-docs/docs/alerting/)，Prometheus Pushgateway的详细信息请参见官方文档[Prometheus Pushgateway](https://github.com/prometheus/pushgateway)。
#### 约束与限制
- Elasticsearch集群要求镜像版本不低于7.10.2_24.3.3_xxx时才支持配置告警指标同步到Prometheus。
- Elasticsearch集群必须能访问Prometheus Pushgateway的Endpoint。Prometheus和Elasticsearch之间要保证网络互通，否则告警信息无法成功发送。
- 只支持同步Gauge（仪表盘）类型的数据，适用于统计值、百分比等可增可减的数值。
 
#### 配置告警同步
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> Elasticsearch"。
3. 在集群列表，选择目标集群，单击操作列的"Kibana"，登录Kibana。
4. 在Kibana页面，选择左侧导航栏的"Open Distro for Elasticsearch \> Alerting"。
5. 新建一个Prometheus目的端，用于建立Elasticsearch到Pushgateway的物理连接。
   1. 在"Alerting"页面选择"Destinations"页签，单击"Add destination"配置目的端信息。
      表1Destinations参数说明 
      | 参数名称     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
      |:---|:---|
      | Name     | 自定义目的端名称。                                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | Type     | 选择通知类型。请固定选择"PROMETHEUS"。                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | Settings | 输入Prometheus监控服务器的Pushgateway地址。 - 当前仅支持Prometheus Gauge类型的可增可减仪表盘。通过查询具体的语句，将数值型结果同步到Pushgateway用于Prometheus监控。  - 支持HTTP和HTTPS两种Pushgateway地址。   |
         
      图2Add destination   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002124604594.png "点击放大") 
   
   2. 单击"Create"完成目的端配置。
   
   3. 返回Destinations列表，在列表可见新建的Prometheus目的端，表示创建完成。
      图3Destinations列表   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002124606390.png "点击放大") 
    
6. 新建监控器与触发器，定义告警的触发条件和监控频率。
   1. 在"Alerting"页面选择"Monitors"页签，单击"Create monitors"配置监控器，定义需要同步的数据来源和查询频率。
      表2Monitors参数说明 
      | 参数名称                                    || 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      |:---|---|:---|
      | Configure monitor | Monitor name         | 自定义一个监控器名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
      | Configure monitor | 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语句                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
      | Define monitor    | Index                | 选择监控的索引。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | Define monitor    | 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指标格式。
      表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 | Action throttling | 设置消息发送频率用来限制在指定时间段内收到的通知消息数量，防止在异常波动期间瞬间产生数千条消息致资费消耗或信息轰炸。 例如设置10分钟，在接下来的10分钟内，即使触发条件满足多次，Prometheus仅发送1次告警通知。超过10分钟后，如果触发告警条件，Prometheus才会再次发送告警通知。                                                                                                                                                                                                                                       |
         
      
   
   4. 单击"Send test message"，向Prometheus发送测试信息验证同步链路。
      图4发送验证信息   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002554314959.png "点击放大") 
   
   5. 如[图5]所示，在Prometheus能够收到触发器的Message消息，表示设置成功。
      图5成功收到Message   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002127428880.png "点击放大") 
   
   6. 单击"Create"返回Monitor详情页，完成配置。
    
 
