Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)

溫一壺清酒發表於2021-06-09

在之前博文中,已經成功的實現了郵件推送。目前主流的辦公終端,就是企業微信、釘釘、飛書。今天來分享下微信推送,我們具體來看。

企業微信

在配置企業微信推送時,需要有微信企業,具體如何註冊、使用,另外百度就好,在這裡就不多說了。

新增機器人

登入企業微信管理後臺,獲取配置項基礎資訊。

  • 建立應用

點選應用管理>應用>建立應用,如下所示:

填寫對應資訊,配置應該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,我們來看下最終效果圖,如下所示:

告警資訊

恢復資訊

記憶體監控,按上述步驟就實現了,是不是就是一個規則的事情,其他指標監控也同理。

好了,今天分享就到這了,下期再會。

相關文章