1. 程式人生 > >prometheus配置企業微信報警

prometheus配置企業微信報警

1. 告警概述

prometheus的告警管理分為兩部分。通過在prometheus服務端設定告警規則, Prometheus伺服器端產生告警向Alertmanager傳送告警。 然後,Alertmanager管理這些告警,包括靜默,抑制,聚合以及通過電子郵件,PagerDuty和HipChat等方法傳送通知。

設定警報和通知的主要步驟如下:

  • 設定並配置Alertmanager;
  • 配置Prometheus對Alertmanager訪問;
  • 在普羅米修斯建立警報規則;

2. 告警管理模組 ALERTMANAGER

Alertmanager處理客戶端應用程式(如Prometheus伺服器)傳送的告警。 它負責對它們進行重複資料刪除,分組和路由,以及正確的接收器整合,例如電子郵件,PagerDuty或OpsGenie。 它還負責警報的靜默和抑制。

以下描述了Alertmanager實現的核心概念。 請參閱配置文件以瞭解如何更詳細地使用它們。

分組(Grouping)

分組將類似性質的告警分類為單個通知。 這在大型中斷期間尤其有用,因為許多系統一次失敗,並且可能同時發射數百到數千個警報。

示例:

發生網路分割槽時,群集中正在執行數十或數百個服務例項。 一半的服務例項無法再訪問資料庫。 Prometheus中的告警規則配置為在每個服務例項無法與資料庫通訊時傳送告警。 結果,數百個告警被髮送到Alertmanager。

作為使用者,只能想要獲得單個頁面,同時仍能夠確切地看到哪些服務例項受到影響。 因此,可以將Alertmanager配置為按群集和alertname對警報進行分組,以便傳送單個緊湊通知。

這些通知的接收器通過配置檔案中的路由樹配置告警的分組,定時的進行分組通知。

抑制(Inhibition)

如果某些特定的告警已經觸發,則某些告警需要被抑制。

示例:

如果某個告警觸發,通知無法訪問整個叢集。 Alertmanager可以配置為在該特定告警觸發時將與該叢集有關的所有其他告警靜音。 這可以防止通知數百或數千個與實際問題無關的告警觸發。

靜默(SILENCES)

靜默是在給定時間內簡單地靜音告警的方法。 基於匹配器配置靜默,就像路由樹一樣。 檢查告警是否匹配或者正則表示式匹配靜默。 如果匹配,則不會發送該告警的通知。

在Alertmanager的Web介面中可以配置靜默。

客戶端行為(Client behavior)

Alertmanager對其客戶的行為有特殊要求。 這些僅適用於不使用Prometheus傳送警報的高階用例。

3. 配置

Alertmanager通過命令列標誌和配置檔案進行配置。 命令列標誌配置不可變系統引數,而配置檔案定義禁止規則,通知路由和通知接收器。 
要檢視所有可用的命令列標誌,請執行alertmanager -h。 
Alertmanager可以在執行時重新載入其配置。 如果新配置格式不正確,則不會應用更改並記錄錯誤。 通過向程序傳送SIGHUP或向/ - / reload端點發送HTTP POST請求來觸發配置重新載入。傳送HTTP POST的方式比較常用,我們更改過配置檔案之後,reload一下即可重啟Alertmanager模組使新配置的規則生效。

4.安裝配置

wget https://github.com/prometheus/alertmanager/releases/download/v0.13.0/alertmanager-0.13.0.linux-amd64.tar.gz
tar -axvf alertmanager-0.13.0.linux-amd64.tar.gz  #解壓即可用

4.1 準備

step 1: 訪問網站 註冊企業微信賬號(不需要企業認證)。

step 2: 訪問apps 建立第三方應用,點選建立應用按鈕 -> 填寫應用資訊:

 

 

4.2詳細配置

4.2.1prometheus配置檔案修改

vim /server/prometheus/prometheus.yml

global:
  scrape_interval:    60s
  evaluation_interval: 60s

alerting:
  alertmanagers:
    - static_configs:
      - targets: ['localhost:9093']

rule_files:
   - "/server/prometheus/rules.yml"

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

rules.yml

groups:
- name: prometheus_go_goroutines
  rules:
  - alert: go_goroutines_numbers
    expr: go_goroutines > 100
    for: 15s
    annotations:
      summary: "prometheus的gorotine資料超過100!"
- name: node
  rules:
  - alert: server_status
    expr: up{job="prometheus"} == 0 or up{job="linux"} == 0
    for: 15s
    annotations:
      summary: "機器{{ $labels.instance }} 掛了"
      description: "報告.請立即檢視!"

alertmanger 配置:

vim /server/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m
  wechat_api_corp_id: 'xxxx'
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  wechat_api_secret: 'xxxxx'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'wechat'
receivers:
- name: 'wechat'
  wechat_configs:
  - send_resolved: true
    to_party: '1'
    agent_id: 1000003
    corp_id: 'xxxx'
    api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
    api_secret: 'xxxxx'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

引數說明:

  • corp_id: 企業微信賬號唯一 ID, 可以在我的企業中檢視。
  • to_party: 需要傳送的組。
  • agent_id: 第三方企業應用的 ID,可以在自己建立的第三方企業應用詳情頁面檢視。
  • api_secret: 第三方企業應用的金鑰,可以在自己建立的第三方企業應用詳情頁面檢視。

當停掉node_expor就會收到報警測試

修改/server/alertmanager/alertmanager.yml

新增如下

[[email protected] /server/alertmanager]# cat alertmanager.yml
global:
  resolve_timeout: 5m
  wechat_api_corp_id: 'xxx'
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  wechat_api_secret: 'xxxx'
templates:
  - '/server/alertmanager/template/wechat.tmpl'
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'wechat'
receivers:
- name: 'wechat'
  wechat_configs:
  - send_resolved: true
    to_party: '2'
    agent_id: 1000003
    corp_id: 'xxx'
    api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
    api_secret: 'xxxx'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

vim /server/alertmanager/template/wechat.tmpl


{{ define "wechat.default.message" }}
{{ range .Alerts }}
========start=========
告警程式: prometheus_alert
告警級別: {{ .Labels.serverity }}
告警型別: {{ .Labels.alertname }}
故障主機: {{ .Labels.instance }}
告警主題: {{ .Annotations.summary }}
告警詳情: {{ .Annotations.description }}
觸發時間: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
=========end===========
{{ end }}
{{ end }}
~