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


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

企業微信

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

添加機器人

登錄企業微信管理后台,獲取配置項基礎信息。

  • 創建應用

點擊應用管理>應用>創建應用,如下所示:

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

告警信息

恢復信息

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM