prometheus告警插件-alertmanager


prometheus本身不支持告警功能,主要通過插件alertmanage來實現告警。AlertManager用於接收Prometheus發送的告警並對於告警進行一系列的處理后發送給指定的用戶。

prometheus觸發一條告警的過程:

prometheus--->觸發閾值--->超出持續時間--->alertmanager--->分組|抑制|靜默--->媒體類型--->郵件|釘釘|微信等。

配置alertmanager

  • 安裝alertmanager。https://github.com/prometheus/alertmanager/releases/download/v0.16.2/alertmanager-0.16.2.linux-amd64.tar.gz
  • 配置告警信息   vim alertmanager.yml
    global:
      resolve_timeout: 5m
      smtp_smarthost: 'smtp.163.com:25'
      smtp_from: 'xxx@163.com'
      smtp_auth_username: 'xxx@163.com'
      smtp_auth_password: 'xxxxxx'
      smtp_require_tls: false
    
    route:   # route用來設置報警的分發策略
      group_by: ['alertname']  # 采用哪個標簽來作為分組依據
      group_wait: 10s   # 組告警等待時間。也就是告警產生后等待10s,如果有同組告警一起發出
      group_interval: 10s  # 兩組告警的間隔時間
      repeat_interval: 20m  # 重復告警的間隔時間,減少相同郵件的發送頻率
      receiver: 'default-receiver'  # 設置默認接收人
      routes:   # 可以指定哪些組接手哪些消息
      - receiver: 'default-receiver'  
        continue: true
        group_wait: 10s
      - receiver: 'fping-receiver'  
        group_wait: 10s
        match_re:  #根據標簽分組,匹配標簽dest=szjf的為fping-receiver組
          dest: szjf
    
    receivers:
    - name: 'default-receiver'
      email_configs:
      - to: 'xxxxxxxx@qq.com'
    - name: "fping-receiver"
      webhook_configs:
      - url: 'http://127.0.0.1:9095/dingtalk'
        send_resolved: true

     

注意:之前報警了但是郵件一直沒有發送出去,# telnet smtp.163.com 25發現也不通,發現是騰訊雲做了限制,需要點擊25端口解封。 

啟動alertmanage

   # ./amtool check-config alertmanager.yml   # 檢查配置
  Checking 'alertmanager.yml' SUCCESS
  Found:
  - global config
  - route
  - 0 inhibit rules
  - 1 receivers
  - 0 templates

   #  ./alertmanager --config.file='alertmanager.yml'   # 啟動

 web ui查看 : http://alertmanager_ip:9093

 

配置prometheus與alertmanager通信 

# vim prometheus.yml

alerting:
  alertmanagers:  # 配置alertmanager
  - static_configs: - targets: - 127.0.0.1:9093 #alertmanager服務器ip端口 rule_files: # 告警規則文件 - 'rules/*.yml'

 配置報警規則rules

# vim rules/node.yml

groups:
- name: test rules: - alert: 內存使用率過高 expr: 100-(node_memory_Buffers_bytes+node_memory_Cached_bytes+node_memory_MemFree_bytes)/node_memory_MemTotal_bytes*100 > 30 for: 1m # 告警持續時間,超過這個時間才會發送給alertmanager labels: severity: warning annotations: summary: "Instance {{ $labels.instance }} 內存使用率過高" description: "{{ $labels.instance }} of job {{$labels.job}}內存使用率超過80%,當前使用率[{{ $value }}]." - alert: cpu使用率過高 expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)*100 > 0 for: 1m labels: severity: warning annotations: summary: "Instance {{ $labels.instance }} cpu使用率過高" description: "{{ $labels.instance }} of job {{$labels.job}}cpu使用率超過80%,當前使用率[{{ $value }}]."
# 盡可能把詳細告警信息寫入summary標簽值,因為告警短信/郵件/釘釘發送的內容使用了summary標簽中的值。

檢查告警規則,重啟prometheus

# ./promtool check rules rules/node.yml 
  Checking rules/node.yml
  SUCCESS: 2 rules found

  amtool 管理工具可以查看:

# ./amtool alert --alertmanager.url=http://localhost:9093
Alertname            Starts At                Summary                              
內存使用率過高    2019-04-09 13:14:45 CST   Instance 192.168.1.12:9100 內存使用率過高  

 在prometheus界面的alert可以看到告警狀態。

  • 綠色表示正常。
  • 紅色狀態為 PENDING表示alerts 還沒有發送至 Alertmanager,因為rules里面配置了for: 1m。
  • 1分鍾后狀態由 PENDING 變為 FIRING,此時,prometheus才將告警發給alertmanager,在 Alertmanager 中可以看到有一個 alert。 

收到郵件:

 

告警收斂(分組,抑制,靜默)

  • 分組(group): 將類似性質的警報合並為單個通知。
  group_by: ['alertname']  # 以標簽作為分組依據
  group_wait: 10s    # 分組報警等待時間
  group_interval: 10s   # 發送組告警間隔時間
  repeat_interval: 1h  # 重復告警發送間隔時間
  •    抑制(inhibition): 當警報發出后,停止重復發送由此警報引發的其他警報。可以消除冗余告警
inhibit_rules:
  - source_match:  # 當此告警發生,其他的告警被抑制
      severity: 'critical'   
    target_match:   # 被抑制的對象
      severity: 'warning'  
    equal: ['id', 'instance']
  • 靜默(silences): 是一種簡單的特定時間靜音的機制。例如:服務器要升級維護可以先設置這個時間段告警靜默。

           靜默在alertmanager的web界面silence里面配置,create silence。

 

配置完成后可以看到

在這期間就收不到報警郵件了。

 


免責聲明!

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



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