Prometheus入門到放棄(6)之AlertManager進階

前面幾個篇幅,咱們介紹了alertmanger報警配置,在實際運維過程當中,咱們都會遇到,報警的重複發送,以及報警信息關聯性報警。接下來咱們就介紹下經過alertmanger對告警信息的收斂。
1、告警分組(Grouping)
1.1 定義三個報警規則:node

文中爲了實驗驗證,告警值設置比較小,實際生產中,應該跟據業務的實際使用場景,來肯定合理的告警值vim

[root@prometheus-server ~]# vim /etc/prometheus/rules/node_alerts.yml 

groups:
- name: node_alerts
  rules:
  - alert: InstanceDown
    expr: up{job='node'} == 0
    for: 2m
    labels:
      severity: "critical"
      env: dev
    annotations:
      summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down!
  - alert: OSLoad
    expr: node_load1 > 1
    for: 2m
    labels:
      severity: "warning"
      env: dev
    annotations:
      summary: "主機 {{ $labels.instance }} 負載大於 1"
      description: "當前值: {{ $value }}"
  - alert: HightCPU
    expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by(instance)*100 > 10
    for: 2m
    labels:
      severity: "warning"
    annotations:
      summary: "主機 {{ $labels.instance }} of CPU 使用率大於10%!"
      description: "當前值: {{ $value }}%"

以上3個報警規則,node_alerts是監控node_exporter服務狀態,OSLoad是監控系統負載,HightCPU是監控系統cpu使用率,前兩個有標籤env: dev,後面2個有標籤 severity: "warning",重啓Prometheus服務,能夠看到監控規則已經加載
服務器

 

 1.2 定義alertmanager報警組:網絡

[root@prometheus-server ~]# vim /etc/alertmanager/alertmanager.yml
global: smtp_smarthost:
'smtp.163.com:25' smtp_from: '****@163.com' smtp_auth_username: '****@163.com' smtp_auth_password: '****' ## 受權碼 smtp_require_tls: false route: group_by: ['env'] ### 以標籤env分組,擁有labels爲env的規則,若是在指定時間同時報警,報警信息會合併爲一條進行發送 group_wait: 10s   ### 組報警等待,等待該組中有沒有其它報警
group_interval: 30s ### 組報警時間間隔 repeat_interval: 2m ### 重複報警時間,這個生產中跟據服務選擇合適的時間 receiver: dev
-mail ## 接收者 receivers: - name: 'dev-mail' ## 對應上面的接收者 email_configs: - to: '****@vanje.com.cn'

 1.3 驗證併發

  咱們停掉一臺主機node_exporter(10.10.0.12)服務,用壓測工具使某一臺機器(10.10.0.11)負載大於1,cpu使用率(10.10.0.11)大於10,看下報警郵件是否會按咱們定義組進行報警:運維

  雖然咱們同時觸發了三個報警,可是跟據咱們的定義,應該只會發兩條報警信息,由於擁有env標籤的報警規則,同時報警,會被合併爲一條發送。工具

  觸發報警查看Prometheus ui界面上的alerts:ui

  

    等2分鐘後,若是檢測到機器仍是處於觸發告警狀態,Prometheus把會告警信息發送至alertmanager,而後跟據報警定義進行郵件報警:spa

   

 

 上圖從alertmanager報警界面能夠看到,報警信息已經按照分組合並,接下來咱們看下郵箱中報警信息:3d

分組總結:

  一、alertmanager跟據標籤進行分組時,應該選擇合適的標籤,標籤能夠自定義,也可使用默認的標籤。

  二、alertmanager報警分組,能夠有效減小告警郵件數,可是僅是在同一個時間段報警,同一個組的告警信息纔會合併發送。

 2、告警抑制(Inhibition)

  2.1 修改Prometheus 報警規則文件,爲報警信息添加新標籤area: A

[root@prometheus-server ~]# vim /etc/prometheus/rules/node_alerts.yml 
groups:
- name: node_alerts
  rules:
  - alert: InstanceDown
    expr: up{job='node'} == 0
    for: 2m
    labels:
      severity: "critical"
      env: dev
      area: A     annotations:
      summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down!
  - alert: OSLoad
    expr: node_load1 > 0.6
    for: 2m
    labels:
      severity: "warning"
      env: dev
      area: A
    annotations:
      summary: "主機 {{ $labels.instance }} 負載大於 1"
      description: "當前值: {{ $value }}"
  - alert: HightCPU 
    expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by(instance)*100 > 10
    for: 2m  
    labels: 
      severity: "warning" area: A
    annotations:
      summary: "主機 {{ $labels.instance }} of CPU 使用率大於10%!"
      description: "當前值: {{ $value }}%"

   2.2 修改alertmanager配置文件

[root@prometheus-server ~]# vim /etc/alertmanager/alertmanager.yml
## 新增如下配置
inhibit_rules:
- source_match: ## 源報警規則 severity: 'critical' target_match: ## 抑制的報警規則 severity: 'warning' equal: ['area'] ## 須要都有相同的標籤及值,不然抑制不起做用

2.3 驗證

跟上面同樣手動觸發三個規則告警,跟據定義規則,應該只會收到一條報警信息:

查看Prometheus告警都已經觸發,狀態變爲PENDING狀態

等待2分鐘後, 三個告警狀態由PENDING 變爲 FIRING,同時prometheus會把告警信息發給alertmanager。

Alertmanager中咱們只看到一條InstanceDown報警信息。

  查看郵件中,也只收到InstanceDown的報警,另外2條報警已經被配置的抑制規則,把報警信息忽略掉。

 抑制總結:

  一、抑制是指當警報發出後,中止重複發送由此警報引起其餘錯誤的警報的機制。(好比網絡不可達,服務器宕機等災難性事件致使其餘服務鏈接相關警報);

  二、配置抑制規則,須要合理源規則及須要抑制的規則;

  三、源規則與抑制規則須要具備相同的標籤及標籤值;

相關文章
相關標籤/搜索