Prometheus监控之altermanager——部署篇

prometheus 的触发的报警将发送到 alertmanager 启动的接口中,然后由 alertmanager 轮训自己的通知方,将信息发送。因此,建议将 alertmanager 和 prometheus 分机器部署,不要放在一起,然后再用别的脚本什么的监控一下这两个,做到交叉监控。

服务器ip: 192.168.7.107

下面例子中,我使用docker 启动的 alertmanager , 使用了 邮件 、企业微信 、 钉钉 的通知方式。

alertmanager 的 yaml 文件

cat > alertmanager.yml << EOF
global:
  resolve_timeout: 5m
templates:
  - "/etc/alertmanager/template/wechat.tmpl"
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 6m
  receiver: default
receivers:
- name: 'default'
  email_configs:
  - to: "xxx@xxxxx.com"
    send_resolved: true
    from: "xxx@xxxxx.com"
    smarthost:  "smtp.xxxxx.com:25"
    auth_username: "xxx@xxxxx.com"
    auth_password: "1qwe1234qwe"
  webhook_configs:
  - url: 'http://192.168.7.107:8060/dingtalk/ops_dingding/send'
    send_resolved: true
  wechat_configs:
  - corp_id: 'wwd67845aba34a0c123'
    to_party: '2'
    agent_id: '1000001'
    api_secret: 'wfsdt2*HkjpQsz9jBfQxhVb0DL0xfdaspge90uytaZ0'
    message: '{{ template "wechat.html" .}}'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname']
EOF

钉钉报警接口
钉钉报警需要启动一个钉钉的接口,写到 alertmanager.yml 文件的 webhook_configs 中。从 github 下载项目 prometheus-webhook-dingtalk ,地址: https://github.com/timonwong/prometheus-webhook-dingtalk ,编译好后,得到 prometheus-webhook-dingtalk 二进制文件,使用它启动钉钉api ,另外我觉得钉钉默认的通知模板信息太多,因此我把模板简化了一下,启动时加载自己的模板
这是启动脚本

cat > start_dingding.sh << EOF
#!/bin/bash
cd /opt/dingding_api
kill -9 `ps -ef | grep prometheus-webhook-dingtalk | grep -v grep | awk '{print $2}'`
nohup ./prometheus-webhook-dingtalk \
      --template.file="/opt/dingding_api/alert.tmpl" \
      --ding.profile="ops_dingding=https://oapi.dingtalk.com/robot/send?access_token=abfc2126267fsdgfde70444a771da42cd3bb245dfafb39fsdf23rrfdwfs22d52" >> start_dingding.log &
EOF

这是钉钉模板
其实就是把项目中 template/default.tmpl 文件删除了多余的东西,建议使用 template/default.tmpl 文件 修改,直接复制我这个好像报错,不知道哪的原因,但是使用源文件修改的不报错。应该是回车符的原因。

cat > /opt/dingding_api/alert.tmpl << EOF
{{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }}
{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver }}{{ end }}

{{ define "__text_alert_list" }}{{ range . }}
**报警详情**
{{ range .Annotations.SortedPairs }}> - {{ .Name }}: {{ .Value | markdown | html }}
{{ end }}

{{ end }}{{ end }}

{{ define "ding.link.title" }}{{ template "__subject" . }}{{ end }}
{{ define "ding.link.content" }}#### \[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}\] **[{{ index .GroupLabels "alertname" }}]({{ template "__alertmanagerURL" . }})**
{{ template "__text_alert_list" .Alerts.Firing }}
{{ end }}
EOF

微信报警模板
微信报警默认的信息也和钉钉一样巨多,我整了个简洁的。这里的 Labels 直接取的是 prometheus 的 Graph 中的值,Annotations是 configmap 文件中报警项 annotations 中定义的值。触发时间,就写这个,发出来的信息就会变成报警时间,{{ define “wechat.html” }} 才是 alertmanager.yml 文件中 message 项要写的值。

cat > wechat.tmpl << EOF
{{ define "wechat.html" }}
{{ range .Alerts }}
======== 阿里云报警 ==========
***请注意告警状态: {{   .Status }}
告警级别: {{ .Labels.severity }}
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
========end==========
{{ end }}
{{ end }}
EOF

alertmanager 启动脚本

cat > start_alert.sh << EOF
#!/bin/bash

docker stop `docker ps -a |awk '/alertmanager/{print $1}'`
docker rm `docker ps -a |awk '/alertmanager/{print $1}'`

docker run -d \
  --name alertmanager \
  --restart=always \
  -p 9093:9093 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /opt/alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  -v /opt/alert/data:/alertmanager \
  prom/alertmanager:v0.15.3
EOF

启动以后,会有个 9093 端口。将 192.168.7.107:30003 写到 prometheus 的 configmap 中

    alerting:
      alertmanagers:
        - static_configs:
          - targets: ["192.168.7.107:9093"]

重读一下 configmap , 然后触发一条报警,等待 邮件 、 钉钉 、 微信 通知 。

下面是修改的模板和自定义模板的消息对比。

如图是默认的微信报警信息
在这里插入图片描述
自定义微信报警消息
告警级别怎么改模板都拿不到,真是醉了:
在这里插入图片描述

钉钉报警默认消息
在这里插入图片描述
钉钉报警使用模板后的消息
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值