Prometheus告警常用配置


引言:

Prometheus是一個按功能划分的憑條,指標的收集和存儲與警報是分開的。警報管理功能是由Alertmanager的工具提供,該工具是監控體系中的獨立組件。

在Prometheus上定義警報規則后,這些規則可以出發事件,然后傳播到Alertmanager,Alertmanager會決定如何處理相應的警報。Alertmanager對警報進行去重、分組,然后路由到不同的接收器,如電子郵件、短信或SaaS服務(PagerDuty等)。我們將在Prometheus服務器上編寫警報規則 [2] ,這些規則將使用我們收集的指標並在指定的閾值或標准上觸發警報。我們還將看到如何為警報添加一些上下文。當指標達到閾值或標准時,會生成一個警報並將其推送到Alertmanager。與Prometheus一樣,Alertmanager配置也是基於YAML的配置文件。

 

一、Alertmanager安裝使用

下載地址:

https://prometheus.io/download/#alertmanager

解壓並將以下兩個文件復制到指定目錄,如下

[root@bogon alertmanager]# cp alertmanager /usr/local/bin/
[root@bogon alertmanager]# cp amtool /usr/local/bin/
[root@bogon ~]# alternatives --version  #查看版本  
alternatives version 1.7.2
[root@bogon alertmanager]# ./alertmanager  #啟動Alertmanager

瀏覽器訪問ip:9093即可查看到Alertmanager圖形頁面

 

二、Prometheus配置Alertmanager

修改prometheus.yml文件,添加lerting塊。具體內容如下:(其中最后一行的alertmanager為ip地址,或可以解析到對應的Alertmanager的IP)

[root@bogon prometheus]# cat prometheus.yml |grep -A 5 alerting|grep -v ^#
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093
[root@bogon prometheus]#

配置監控好Alertmanager后,告警內容會發送給Alertmanager

 

三、Alertmanager服務發現

暫時沒明白什么意思,后續清楚了再進行補充


 

四、監控Alertmanager

配置prometheus.yml文件

- job_name: 'alertmanager'
  static_configs:
  - targets: ['localhost:9093']

添加報警規則

在prometheus.yml的同級目錄中,創建rules目錄,在該新建目錄下創建node_alerts.yml文件,內容如下:

rule_files:
  - "rules/*_rules.yml"
  - "rules/*_alerts.yml"

添加第一條警報規則,如果process_max_fds(點擊Prometheus界面的targets里對應的Alertmanager查看metrics,隨便挑一個值)大於80,則會觸發警報

[root@bogon rules]# cat node_alerts.yml 
groups:
- name: node_alerts
  rules:
  - alert: HighNodeCPU
    expr: process_max_fds >80
    for: 60m
    labels:
      serverity: warning
    annotations:
      summary: High Node CPU for 1 hour
      console: You might want to check the Node Dashboard

解釋:指定組名為nod_alerts,警報名稱為HighNodeCPU(每個警報組中,警報名稱必須唯一),觸發警報的測試表達式在expr中,檢查條件為該指標是否大於80(或者說是80%使用率),for為測試表達式必須為true的時間長度。其中annotations里的summary的標簽用來描述警報,console用注釋提供上下文,方便快速排錯。

 

 需要重啟Prometheus,配置生效,可以在Prometheus里的alerts里看到。剛開始的時候應該是inactive狀態,監測到滿足大於80的條件后就立刻轉為pending狀態了,當大於80的狀態滿足持續1小時的時間后就會觸發告警,發送郵件(郵件部分還需要做額外配置)

 

五、警報觸發

Prometheus以一個固定時間間隔來評估所有規則,這個時間由evaluate_interval定義,我們將其設置為15秒。

警報有三中狀態:Inactive 警報未激活。Pending:警報已滿足測試表達式條件,但未達到for指定的持續時間。Firing:警報滿足測試表達式條件,且持續時間達到了for指定的持續時間。

 

六、配置郵件告警

我是使用Outlook郵箱(微軟郵箱)進行測試的,QQ郵箱沒測試成功。后續我再進行改進,確定各部分代碼的用途,具體代碼如下:

[root@bogon alertmanager]# cat alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.office365.com:587'
  smtp_from: '請輸入你的郵箱賬號'
  smtp_auth_username: '請輸入你的outlook郵箱賬號'
  smtp_auth_password: '請輸入你的密碼'
  smtp_hello: 'office365.com'
  smtp_require_tls: true
  
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 5m
  receiver: default

  routes:
  - receiver: email
    group_wait: 10s
receivers:
- name: 'default'
  email_configs:
  - to: '請輸入你的郵箱賬號'
    send_resolved: true

- name: 'email'
  email_configs:
  - to: '請輸入你的郵箱賬號'
    send_resolved: true

我重啟了Prometheus和Alertmanager就收到郵件了。注意,需要滿足觸發郵件才會發送對應的告警郵件。郵件如下:

 

七、使用模板

使用模板的意思,簡單一點來說,就相當於在規則里使用變量。這樣做的好處在於,避免針對每一個監控對象重復編寫內容類似的告警內容。

例如,我們可以在node_alerts.yml中,將annotations中的summary改為

Host {{$labels.instance}} of {{ $labels.job}} ,which process_max_fds is too many!

可以看到,我們在上面這條語句中使用了變量。

 

八、路由配置

告警進行路由,匹配對應的告警類型,發送告警給指定用戶。

配置alertmanager.yml文件

route:
    group_bp: ['instance']  #進行告警匯總分類
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 3h
    receiver: email
    routes:          #匹配告警等級,將告警發送給指定用戶。當serverity為critical時發送給pager
    - match:    
           serverity: critical
         receiver:pager
    - match_re:
          servity: ^(waring|critical)$
       receiver: suppport_team
receivers:
- name: 'email'
  email_configs:
  - to: 'alerts@example.com'
- name : 'support_team'
  email_configs:
  - to: 'support@example.com'
-name: 'pager'
 email_configs
 - to: 'alert-pager@example.com'

 


免責聲明!

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



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