当前位置:主页 > 查看内容

开放告警接入Prometheus

发布时间:2021-06-12 00:00| 位朋友查看

简介:背景介绍 Prometheus是常用的开源监控告警系统 为开发运维人员提供了数据采集、查看、告警的一体化解决方案。Prometheus的告警消息会发送到Alertmanager服务进行通知管理 并定义了同Alertmanager的交互协议。使用Prometheus时 用户需要额外维护Alertmanager……
背景介绍

Prometheus是常用的开源监控告警系统 为开发运维人员提供了数据采集、查看、告警的一体化解决方案。Prometheus的告警消息会发送到Alertmanager服务进行通知管理 并定义了同Alertmanager的交互协议。使用Prometheus时 用户需要额外维护Alertmanager服务 并且Alertmanage在界面操作、功能上较为简单 并不能很好覆盖用户的大部分使用场景。SLS的告警功能很好的补足了这这方面的不足之处 并推出了开放告警功能 将Prometheus告警消息通过Alertmanager协议收集到SLS中进行管理

Prometheus接入SLS

要将Prometheus的告警消息接入SLS 主要分为两个步骤 在SLS中创建开放告警应用 将SLS开放告警作为alertmanager接入Prometheus。创建开放告警应用的具体步骤 可以参考文章SLS开放告警简介。下面介绍下如何将Prometheus的告警消息接入到SLS中。

获取回调地址

在创建开放告警应用之后 通过点击接口按钮 打开如下图所示的回调地址查看窗口。

image

回调地址由两部分构成 域名部分和子路径部分。其中域名部分属于SLS的接入地址 和地域相关 每个地域都有各自不同的接入地址 子路径部分包括用于发送消息的Access?Key?Id和开放告警应用。如下所示为一个完整的SLS回调地址

cn-heyuan-intranet.log.aliyuncs.com/event/webhook/RAMAK_{ACCESS_KEY_ID}/a123_asdad

其中 cn-heyuan-intranet.log.aliyuncs.com 为域名部分 属于SLS通用的接入地址(endpoint) event/webhook/RAMAK_{ACCESS_KEY_ID}/a123_asdad?则为子路径部分。需要注意的是 用户需要将子路径部分中的{ACCESS_KEY_ID}替换为具体阿里云RAM账户的Access?Key?Id 并且将权限策略AliyunLogOpenEventWrite赋予该账户 a123_asdad则为该开放告警应用的id 用于唯一区别不同的开放告警应用。

配置通知服务

Prometheus定义了向外部发送告警消息的协议 Alertmanager 可以通过在Prometheus配置文件中添加一个或者多个Alertmanager 将告警消息发送给运维开发人员。Alertmanager的配置规范如下所示

# Per-target Alertmanager timeout when pushing alerts.
[ timeout: duration | default 10s ]
# The api version of Alertmanager.
[ api_version: string | default v2 ]
# Prefix for the HTTP path alerts are pushed to.
[ path_prefix: path | default / ]
# Configures the protocol scheme used for requests.
[ scheme: scheme | default http ]
# List of labeled statically configured Alertmanagers.
static_configs:
 # The targets specified by the static config.
 - targets:
 [ - host ]
 # Labels assigned to all metrics scraped from the targets.
 - labels:
 [ labelname : labelvalue ... ]

Prometheus允许通过静态配置和动态发现两种方式添加Alertmanager 对于SLS开放告警 我们只需要关心静态配置即可。如下所示是包含SLS开放告警的Prometheus配置

# my global config
global:
 scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
 # scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
 alertmanagers:
 - path_prefix: event/webhook/RAMAK_{ACCESS_KEY_ID}/test_test
 api_version: v2
 static_configs:
 - targets:
 - cn-heyuan.log.aliyuncs.com

scrape_interval和evaluation_interval用户自行配置即可。用户需要将path_prefix的内容替换为接口中的路径部分 注意替换{ACCESS_KEY_ID}占位符 将接口中的域名部分添加到targets中。之后只需要重新加载Prometheus配置 使配置生效即可。

映射规则

Prometheus告警消息内容示例如下 SLS开放告警会通过内置的规则 将该消息转为SLS内部的告警消息

[
 annotations : {
 description : description info ,
 summary : High request latency 
 endsAt : 2020-10-28T12:28:52.710Z ,
 startsAt : 2020-10-28T12:23:37.710Z ,
 generatorURL : http://127.0.0.1:9090/graph?g0.expr go_threads%7Binstance%3D%22localhost%3A9090%22%2Cjob%3D%22prometheus%22%7D %3E 0\\u0026g0.tab 1 ,
 labels : {
 alertname : HighErrorRate ,
 instance : localhost:9090 ,
 job : prometheus ,
 severity : page 
]
告警严重程度

如果在Prometheus告警消息的labels/annotations中包含severity字段 开放告警会将该字段映射为告警消息的严重程度。目前开放告警支持多种告警消息严重程度 用户可以根据自己的需要进行配置。如果没有配置 严重程度将默认配置为中等。映射关系如下表所示。

告警严重度

关键字

严重

严重、紧急、critical、disaster、blocker、immediate、fatal、crit、sev0、 sev?0 、p0

高、高级、E、H、high、err、error、urgent、major、 sev?1 、sev1、p1

中、中级、告警、M、medium、unknown、warn、warning、 not?classified 、average、normal、 sev?2 、sev2、p2

低、低级、L、I、info、information、suggestion、minor、informational、 sev?3 、sev3、p3

报告

报告、通知、report、dbg、debug、verbose、trivial、page、ok、 sev?4 、sev4、p4

字段映射

SLS开放告警会通过内置规则 将Prometheus消息转为SLS内置告警消息。例如将上面的Prometheus消息 转为如下所示的告警消息

[{
 aliuid : {开放告警应用所属的阿里云账号ID} ,
 alert_instance_id : {自动生成} ,
 project : {告警中心所属的Project} ,
 region : {告警消息发送的网络接口对应的地域} ,
 alert_id : HighErrorRate ,
 alert_type : sls_pub ,
 alert_name : HighErrorRate ,
 next_eval_interval : 78,
 alert_time : 1603859020,
 fire_time : 1603859017,
 resolve_time : 0,
 status : firing ,
 labels : {
 alertname : HighErrorRate ,
 instance : localhost:9090 ,
 job : prometheus 
 annotations : {
 __pub_alert_region__ : {告警消息发送的网络接口对应的地域} ,
 __config_app__ : sls_pub_alert ,
 __pub_alert_service__ : {开放告警服务ID} ,
 __pub_alert_app__ : {开放告警应用ID} ,
 __pub_alert_protocol__ : prometheus ,
 severity : page 
 severity : 2,
 policy : {
 alert_policy_id : {开放告警应用中配置的告警策略} ,
 action_policy_id : {开放告警应用中配置的行动策略} ,
 repeat_interval : {开放告警应用中配置的重复等待时间} 
 drill_down_query : http://127.0.0.1:9090/graph?g0.expr go_threads%7Binstance%3D%22localhost%3A9090%22%2Cjob%3D%22prometheus%22%7D %3E 0\\u0026g0.tab 1 
}]

具体的转换规则 请参考官方文档接入Prometheus告警

总结

通过将Prometheus告警消息接入到SLS 用户不再需要额外维护自己的Alertmanager服务 并且轻松的扩展了告警通知管理能力 从而更为高效的了解以及处理服务出现的问题。


本文转自网络,原文链接:https://developer.aliyun.com/article/784679
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐