grafana+alertmanager实现微信报警

一、需求

实现网站的流量监控,之前希望通过elk+python+zabbix实现微信报警,需要通过elk的dsl语句查询,实现起来比较麻烦。

由于grafana的多数据源特性,结合alertmanager实现微信报警。

二、实现

1.alertmanager

alertmanager为prometheus一个单独的报警模块,具有分组、抑制、静默等功能。

(1) 配置

vim grafana.yml

global:
  resolve_timeout: 5m

templates:
- '/usr/local/alertmanager/wechat.tmpl'

route:
  group_by: ['alertname']
  group_wait: 5s
  #同一组内警报,等待group_interval时间后,再继续等待repeat_interval时间
  group_interval: 1m
  #当group_interval时间到后,再等待repeat_interval时间后,才进行报警
  repeat_interval: 10m
  receiver: 'wechat'
receivers:
- name: 'wechat'
  wechat_configs:
  - corp_id: 'wwbba17dd372e'
    agent_id: '1000005'
    api_secret: '-CJ9QLEFxLzx7wPgoK9Dt-NWYOLuy-RuX3I'
    to_user: 'yangguangda'
    send_resolved: true

其中:
corp_id、agent_id、api_secret为微信企业号的配置;
to_user为企业号通讯录人员;

报警再次发送时间为group_interval+repeat_interval,也就是先等待group_interval,再等待repeat_interval。

注意:企业号新建应用的须设置相应的可见范围及人员,否则无法发送信息。

(2)报警模板

vim wechat.tmpl

{{ define "grafana.default.message" }}{{ range .Alerts }}
{{ .StartsAt.Format "2006-01-02 15:03:04" }}
{{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }}{{ end }}{{ end }}

{{ define "wechat.default.message" }}
{{ if eq .Status "firing"}}[Warning]:{{ template "grafana.default.message" . }}{{ end }}
{{ if eq .Status "resolved" }}[Resolved]:{{ template "grafana.default.message" . }}{{ end }}
{{ end }}

其中:
Status 只有两个状态firing、resolved,通过这个参数是否发送warning和resolved报警信息。

模板的语法还需查官网进行深入学习。

注意: prometheus 默认时区为UTC且无法改变时区,官方建议在用户的web ui 中重新设置时区,因此我们的报警时间应该+8:00

(3)设置启动服务

vim /lib/systemd/system/alertmanager.service

[Unit]
Description=Alertmanager for Prometheus
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/grafana.yml --storage.path=/usr/local/alertmanager/data/  --log.level=debug
Restart=on-failur
ExecStop=/bin/kill -9 $MAINPID

[Install]
WantedBy=multi-user.target

启动后,可通过192.168.3.44:9093 访问alertmanager界面。

2.grafana设置

(1)添加报警渠道
grafana+alertmanager实现微信报警_第1张图片其中谁知include image 没有作用;
Disable Resolve Message 没有勾选,但不发送报警取消信息;我是在alertmanager 模板中判断若Status没有firing(则为resolved),则发送报警解决信息。

(2)在dashboard中设置alert
grafana+alertmanager实现微信报警_第2张图片
每分钟计算一次,持续5分钟;当query A 在5分钟时间内的中位树 > 1500 时,报警会发送给alertmanager。

3.微信报警如下:

时间为UTC时区,而不是CST时区,因此我们需要自行+8:00

grafana+alertmanager实现微信报警_第3张图片

如果你喜欢请关注我的公众号“木讷大叔爱运维”,与你分享运维路上的点滴。

你可能感兴趣的:(系统监控)