在之前博文中,已經成功的實現了郵件推送。目前主流的辦公終端,就是企業微信、釘釘、飛書。今天來分享下微信推送,我們具體來看。
企業微信
在配置企業微信推送時,需要有微信企業,具體如何註冊、使用,另外百度就好,在這裡就不多說了。
新增機器人
登入企業微信管理後臺,獲取配置項基礎資訊。
- 建立應用
點選應用管理>應用>建立應用,如下所示:
填寫對應資訊,配置應該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: 'https://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: 'https://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,我們來看下最終效果圖,如下所示:
告警資訊
恢復資訊
記憶體監控,按上述步驟就實現了,是不是就是一個規則的事情,其他指標監控也同理。
好了,今天分享就到這了,下期再會。