Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)
在之前博文中,已经成功的实现了邮件推送。目前主流的办公终端,就是企业微信、钉钉、飞书。今天来分享下微信推送,我们具体来看。
企业微信
在配置企业微信推送时,需要有微信企业,具体如何注册、使用,另外百度就好,在这里就不多说了。
添加机器人
登录企业微信管理后台,获取配置项基础信息。
- 创建应用
点击应用管理>应用>创建应用,如下所示:
填写对应信息,配置应该logo、名称、以及应用的可见范围,如下所示:
- 获取AgentId和Secret
应用创建成功后,可以查看应用详情,如下所示:
我们从图中可以看到,有AgentId,AgentId先复制保存下,后续会用到;还有Secret,获取Secret,点击查看后,Secret是发送到企业微信中的,自己到微信终端中查看即可。
- 获取corp_id
在我的企业中查看,有个企业id字段,以xx开头。
- 获取部门id
在通讯录中查看,查看部门信息,如下所示:
配置文件
基础信息拿到后,可能会有疑问,拿这些基础信息有什么用。不要急,接下来的配置就需要,我们来细看。
在之前原有的邮件配置基础上,再来进一步修改,添加 wechat_configs 内容,如下所示:
global:
resolve_timeout: 5m
smtp_from: '{{ template "email.from" . }}'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '{{ template "email.from" . }}'
smtp_auth_password: ''
smtp_hello: 'qq.com'
smtp_require_tls: false
wechat_api_url: '//qyapi.weixin.qq.com/cgi-bin/'
wechat_api_secret: ''
wechat_api_corp_id: ''
templates:
- '/etc/alertmanager/*.tmpl'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" . }}'
html: '{{ template "email.html" . }}'
send_resolved: true
headers: { Subject: "{{ .CommonAnnotations.summary }}" }
wechat_configs:
- send_resolved: true
to_party: '8'
to_user: '@all'
agent_id: ''
corp_id: ''
api_secret: ''
api_url: '//qyapi.weixin.qq.com/cgi-bin/'
参数解析:
- to_party 部门id
- agent_id 应用id
- api_secret 应用Secret
- corp_id 企业id
- api_url 企业微信固定写法
- to_user 接收人
配置后,需要重启alter manager服务,使配置生效。
消息推送
配置好后,我们来触发个条件,而使消息推送,来验证下配置是否有效。
触发条件一样,将node服务停止,使其触发,具体可查看上一篇博文,有详细介绍。Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)
服务停止后,通过 Prometheus 消息中心推送消息,如下所示:
消息内容多,模板不精简,但收到消息,说明配置是没问题的,功能已实现。
引用模板
在之前修改过邮件模板,在这里,我们也修改下微信推送的模板,使其简明扼要一些。
创建模板文件,同样在 alertmanager 目录下,使用命令vim wecaht.tmpl,添加如下内容:
{{ define "wechat.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
@警报
实例: {{ .Labels.instance }}
信息: {{ .Annotations.summary }}
详情: {{ .Annotations.description }}
时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
@恢复
实例: {{ .Labels.instance }}
信息: {{ .Annotations.summary }}
时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end }}{{ end -}}
{{- end }}
由于之前出现过日期问题,所以这里就先加上,避免再出现日期那样的错误了,不能一直往里跳。
配置好模板后,需要在altermanager配置文件中引用该模板,wechat_configs中增加如下内容,引用模板:
message: '{{ template "wechat.html" . }}'
如果模板跟altermanager配置文件不在同一个目录下,则需要挂载,由于我配置在一个目录下,就不需要重新挂载了,只需要重启服务即可,使其生效。
再次停用node服务,查看消息推送,告警消息如下所示:
恢复消息如下所示:
引用了模板后,内容是不是要精简很多。
内存监控
一直关注我的朋友,可能会吐槽了,怎么老是拿node服务来写demo,能不能来个实际案例。我想着也是,学了就要用起来。服务器中有很多指标都可以监控,比如:内存、CPU、I/O、网络等。今天来个内存监控,具体来看。
其实监控不难,通过两篇博文,也已知道是怎么回事了,主要是配置规则而已。那规则怎么配置呢,来看如下内容:
groups:
- name: hostStatsAlert
rules:
- alert: hostMemUsageAlert
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 1m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} MEM usgae high"
description: "{{ $labels.instance }} MEM usage above 85% (current value: {{ $value }})"
- alert: node-up
expr: up{job="linux"} == 0
for: 15s
labels:
severity: page
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
description: "{{ $labels.instance }} 检测到异常停止!请重点关注!!!"
上述示例 hostMemUsageAlert 规则,添加到/prometheus/rules目录下的规则中,并重启Prometheus服务,使配置生效。
重启后,通过Prometheus服务查看规则,如下所示:
注意:规则配置内存使用率超过85%则会出发警报,如果大家的服务器内存够大,目前使用率不高,但又想检测下规则是否能正常触发,将85降低即可。
我这里配置的85,我们来看下最终效果图,如下所示:
告警信息
恢复信息
内存监控,按上述步骤就实现了,是不是就是一个规则的事情,其他指标监控也同理。
好了,今天分享就到这了,下期再会。