综合考虑,配合上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 }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)