天天看點

Prometheus-Alertmanager告警對接到企業微信

之前寫過将Prometheus的監控告警資訊通過Alertmanager推送到釘釘群。

最近轉移了陣地,需要将Prometheus監控告警資訊推送到企業微信群,經過兩天的摸索,以及查了網上的一些資料,總結了此文,避免後面的同學走彎路。

Alertmanager将告警資訊推送到微信群,主要涉及到如下幾方面的配置:

  1. 企業微信背景的配置,包括建立告警部門和應用;
  2. Alertmanager的主配置檔案配置和告警模闆配置;
  3. Prometheus主配置檔案的配置以及告警規則的配置;

下面就這三點分别進行介紹

1、企業微信背景配置

這裡就不得不啰嗦幾句,[互聯]網大了,什麼鳥都有,天下文章一大抄,管它對于不對,先轉到自己部落格再說。真正能夠自己驗證,能夠了解其告警政策和原理的能有幾人?

1.1 企業ID擷取

首先通路企業微信官網:https://work.weixin.qq.com/

注冊一個企業,目前是誰都可以注冊,沒有任何限制,也不需要企業認證,注冊即可。

注冊完成之後,登入背景管理,在【我的企業】這裡,先拿到後面用到的第一個配置:企業ID

Prometheus-Alertmanager告警對接到企業微信

1.2 部門ID擷取

然後在通訊錄中,添加一個子部門,用于接收告警資訊,後面把人加到該部門,這個人就能接收到告警資訊了。

Prometheus-Alertmanager告警對接到企業微信

 獲得我們配置告警的第二個參數:部門ID 2

Prometheus-Alertmanager告警對接到企業微信

1.3 告警AgentId和Secret擷取

告警AgentId和Secret擷取是需要在企業微信背景,【應用管理】中,自建應用才能夠獲得的。這裡網上介紹的非常多,都隻是說了這一步驟,而忽略了其他幾個重要的步驟。

Prometheus-Alertmanager告警對接到企業微信
Prometheus-Alertmanager告警對接到企業微信

 最後點選建立應用,可以看到我們剛才建立好的應用Prometheus。

點選這個應用,可以看到我們想要的AgentId和Secret

Prometheus-Alertmanager告警對接到企業微信

以上步驟完成後,我們就得到了配置Alertmanager的所有資訊,包括:企業ID,AgentId,Secret和接收告警的部門id

下面我們來配置Alertmanager服務

2、Alertmanager服務配置

2.1 主配置檔案

# 主配置檔案資訊如下:
cat /opt/alertmanager/alertmanager.yml
global:
  resolve_timeout: 1m   # 每1分鐘檢測一次是否恢複
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  wechat_api_corp_id: 'bbbbbbbbbbbbbbbb'      # 企業微信中企業ID
  wechat_api_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'      # 企業微信中,應用的Secret

templates:
  - '/opt/alertmanager/template/*.tmpl'

route:
  receiver: 'wechat'
  group_by: ['env','instance','type','group','job','alertname']
  group_wait: 10s       # 初次發送告警延時
  group_interval: 10s   # 距離第一次發送告警,等待多久再次發送告警
  repeat_interval: 5m   # 告警重發時間

receivers:
- name: 'wechat'
  wechat_configs: 
  - send_resolved: true
    message: '{{ template "wechat.default.message" . }}'
    to_party: '2'         # 企業微信中建立的接收告警的部門【告警機器人】的部門ID
    agent_id: '1000002'     # 企業微信中建立的應用的ID
    api_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'      # 企業微信中,應用的Secret      

2.2 告警模闆

# cat /opt/alertmanager/template/wechat.tmpl
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
========= 監控報警 =========
告警狀态:{{   .Status }}
告警級别:{{ .Labels.severity }}
告警類型:{{ $alert.Labels.alertname }}
故障主機: {{ $alert.Labels.instance }}
告警主題: {{ $alert.Annotations.summary }}
告警詳情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};
觸發閥值:{{ .Annotations.value }}
故障時間: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
========= = end =  =========
{{- end }}
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
========= 異常恢複 =========
告警類型:{{ .Labels.alertname }}
告警狀态:{{   .Status }}
告警主題: {{ $alert.Annotations.summary }}
告警詳情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};
故障時間: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢複時間: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
執行個體資訊: {{ $alert.Labels.instance }}
{{- end }}
========= = end =  =========
{{- end }}
{{- end }}
{{- end }}
{{- end }}      

2.3 Prometheus內建

下面配置prometheus告警規則

主配置檔案:prometheus.yml中加入:

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "rules/node_status.yml"      

然後配置告警規則檔案:node_status.yml

# cat rules/node_status.yml

[root@cn-prom prometheus-server]# cat rules/node_status.yml 
groups:
- name: 執行個體存活告警規則
  rules:
  - alert: 執行個體存活告警
    expr: up{job="prometheus"} == 0 or up{job="Linux-host"} == 0
    for: 1m
    labels:
      user: prometheus
      severity: Disaster
    annotations:
      summary: "Instance {{ $labels.instance }} is down"
      description: "Instance {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
      value: "{{ $value }}"

- name: 記憶體告警規則
  rules:
  - alert: "記憶體使用率告警"
    expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 75
    for: 1m
    labels:
      user: prometheus
      severity: warning
    annotations:
      summary: "伺服器: {{$labels.alertname}} 記憶體報警"
      description: "{{ $labels.alertname }} 記憶體資源使用率大于75%!(目前值: {{ $value }}%)"
      value: "{{ $value }}"

- name: CPU報警規則
  rules:
  - alert: CPU使用率告警
    expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 70
    for: 1m
    labels:
      user: prometheus
      severity: warning
    annotations:
      summary: "伺服器: {{$labels.alertname}} CPU報警"
      description: "伺服器: CPU使用超過70%!(目前值: {{ $value }}%)"
      value: "{{ $value }}"

- name: 磁盤報警規則
  rules:
  - alert: 磁盤使用率告警
    expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 80
    for: 1m
    labels:
      user: prometheus
      severity: warning
    annotations:
      summary: "伺服器: {{$labels.alertname}} 磁盤報警"
      description: "伺服器:{{$labels.alertname}},磁盤裝置: 使用超過80%!(挂載點: {{ $labels.mountpoint }} 目前值: {{ $value }}%)"
      value: "{{ $value }}"      

至此,企業Prometheus對接企業微信告警完畢,出現故障你就能看到如下告警資訊和恢複資訊了

========= 監控報警 =========
告警狀态:firing
告警級别:Disaster
告警類型:執行個體存活告警
故障主機: 10.137.10.211:9100
告警主題: Instance 10.137.10.211:9100 is down
告警詳情: Instance 10.137.10.211:9100 of job Linux-host has been down for more than 1 minutes.;
觸發閥值:0
故障時間: 2020-09-21 10:21:08
========= = end =  =========

========= 異常恢複 =========
告警類型:執行個體存活告警
告警狀态:resolved
告警主題: Instance 10.137.10.211:9100 is down
告警詳情: Instance 10.137.10.211:9100 of job Linux-host has been down for more than 1 minutes.;
故障時間: 2020-09-21 10:21:08
恢複時間: 2020-09-21 10:26:23
執行個體資訊: 10.137.10.211:9100
========= = end =  =========      

以上,請測試驗證,如有描述不清楚的地方,歡迎留言交流。

人們永遠沒有足夠的時間把它做好,但永遠有足夠的時間重新來過。

可是,因為并不是總有機會重做一遍,你必須做得更好,換句話說,

人們永遠沒有足夠的時間去考慮到底是不是想要它,但永遠有足夠的時間去為之後悔。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

淺掘千口井,不如深挖一口井!當知識支撐不了野心時,那就靜下心來學習吧!運維技術交流QQ群:618354452

個人微信公衆号,定期釋出技術文章和運維感悟。歡迎大家關注交流。

Prometheus-Alertmanager告警對接到企業微信

繼續閱讀