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: "[email protected]"
    send_resolved: true
    from: "[email protected]"
    smarthost:  "smtp.xxxxx.com:25"
    auth_username: "[email protected]"
    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 , 然后触发一条报警,等待 邮件 、 钉钉 、 微信 通知 。

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

如图是默认的微信报警信息
Prometheus监控之altermanager——部署篇_第1张图片
自定义微信报警消息
告警级别怎么改模板都拿不到,真是醉了:
Prometheus监控之altermanager——部署篇_第2张图片

钉钉报警默认消息
Prometheus监控之altermanager——部署篇_第3张图片
钉钉报警使用模板后的消息
Prometheus监控之altermanager——部署篇_第4张图片

你可能感兴趣的:(服务监控)