DevOps之prometheus实现优雅的告警

DevOps之prometheus实现优雅的告警,第1张

目前prometheus的告警,常用的有grafana自带的告警和prometheus插件alertmanger的告警两种,这里测试下alertmanger的告警功能。

综合考虑,配合上prometheus operator,使用alertmanger,能够使监控告警这块的工作更加devops。

prometheus operator 在k8s中引入了自定义资源定义(CRSs)Prometheus、ServiceMonitor、PrometheusRule和Alertmanager。

所以在k8s中搭建好prometheus operator后,当我们需要监控一个项目时,我们的配置顺序是配置ServiceMonitor获取监控数据,配置PrometheusRule获取告警阈值,配置Alertmanager制定告警发送方式

如果我们已经完成了ServerMonitor的对象的编写,下面就要将监控好的重要数据,设置阈值,触发告警。

这里用spark 服务cpu使用率为例,介绍下PrometheusRule的写法

这样我们就完成一个PrometheusRule 资源对象的编写了,那么prometheus是怎么识别这个告警规则的呢。

我们先查看下prometheus的资源对象

kubectl get prometheus/k8s -n monitoring -o yaml

可以看到,prometheus会自动匹配标签为prometheus=k8s 和 role=alert-rules的prometheusRule的资源对象,这里我们可以体会到prometheus operator自动发现的魅力,我们只需要编写相应的告警规则yaml文件,然后apply一下,便可以制定告警。

在prometheus界面上面查看刚刚制定的告警规则

对于告警通知,需要考虑以下几点

及时性:邮件通知有时候不会注意,尤其是不在电脑面前,所以这里我们选择工作中使用的企业微信作为告警消息推送方式

简洁性:如果服务器性能等到达了一个warning值,会有很多相关的告警全部触发,所以这里我们需要配置分组、静默、抑制方案

容灾性:如果alermanger或者prometheus本身挂掉了,发不出告警怎么办,一般会采用另一个监控来监控prometheus,或者自定义一个持续不断的告警通知,哪一天这个告警通知不发了,说明监控出现问题了。很棒的一点是,prometheus operator已经考虑了这一点,本身携带一个watchdog,作为对自身的监控

创建一个alertmanger配置文件

删除之前的secret对象,并且创建新的

查看企业微信,这个时候会发现已经收到告警信息

这个watchdog便是对prometheus自身的监控。如果有需要,可以制定一条路由,匹配severity为none的告警,然后每24h重复一次,这样可以达到每天监控prometheus本身的效果,哪一天没收到watchdog,便可以知道prometheus挂了。

正常收到的告警信息

alertmanger也支持webhook告警,但是比如钉钉和企业微信机器人这类对消息头有特殊要求的,如果直接用webhook的话,需要安装一个插件封装下,才可以调用

Alertmanager还支持临时静默告警。有时候我们在处理告警,想要临时静默告警消息,或者测试环境中,进行压测,需要临时静默一段时间的告警,我们就可以直接通过Alertmanager的UI临时屏蔽特定的告警通知。通过定义标签的匹配规则(字符串或者正则表达式),如果新的告警通知满足静默规则的设置,则停止向receiver发送通知

目前Alertmanager只支持在UI上面进行临时静默告警

当静默规则生效以后,从Alertmanager的Alerts页面下用户将不会看到该规则匹配到的告警信息,微信机器人也不会发送响应的告警消息

位置: /etc/prometheus/prometheus.yml

修改以下内容,targets填入alertmanager的ip和端口

位置: /etc/alertmanager/alertmanager.yml

注意:这里用的是163的邮箱测试的,开启tls加密一直没调通,不开tls可以,不开tls的smtp端口是25

位置: /etc/alertmanager/templates/email.tmpl

{{ range $k,$v:=.alerts }}

{{if eq $v.status "resolved"}}

## <font color="info">[Prometheus恢复信息]</font>

#### 告警名称:{{$v.labels.alertname}}

###### 告警总结: {{$v.annotations.summary}}

###### 告警级别: {{$v.labels.level}}

###### 告警环境:{{ $v.labels.env }}

###### 告警业务版本:{{ $v.labels.bizVersion }}

###### 告警业务线:{{ $v.labels.bizLine }}

###### 告警资源:{{ $v.labels.cloud }}

###### 告警实例:{{ $v.labels.hostname }}

###### 告警IP地址:{{ $v.labels.ip }}

###### 涉及应用:{{ $v.labels.application }}

###### 告警详情:{{ $v.annotations.description }}

###### 开始告警时间: {{GetCSTtime $v.startsAt}}

###### 恢复时间: {{GetCSTtime $v.endsAt}}

{{else}}

## <font color="warning">[Prometheus告警信息]</font>

#### 告警名称:{{$v.labels.alertname}}

###### 告警总结: {{$v.annotations.summary}}

###### 告警级别: {{$v.labels.level}}

###### 告警环境:{{ $v.labels.env }}

###### 告警业务版本:{{ $v.labels.bizVersion }}

###### 告警业务线:{{ $v.labels.bizLine }}

###### 告警资源:{{ $v.labels.cloud }}

###### 告警实例:{{ $v.labels.hostname }}

###### 告警IP地址:{{ $v.labels.ip }}

###### 涉及应用:{{ $v.labels.application }}

###### 告警详情:{{ $v.annotations.description }}

###### 当前值:{{ $v.annotations.value }}

###### 开始告警时间: {{GetCSTtime $v.startsAt}}

{{end}}

{{ end }}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11619629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存