日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Prometheus之Alertmanager告警(七)

發(fā)布時(shí)間:2024/6/21 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 Prometheus之Alertmanager告警(七) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、部署Alertmanager服務(wù)

1.1 alertmanager服務(wù)介紹

在Prometheus平臺(tái)中,警報(bào)由獨(dú)立的組件Alertmanager處理。通常情況下,我們首先告訴Prometheus Alertmanager所在的位置,然后在Prometheus配置中創(chuàng)建警報(bào)規(guī)則,最后配置Alertmanager來處理警報(bào)并發(fā)送給接收者(郵件,webhook、slack等)。

軟件下載地址:

https://prometheus.io/download/
https://github.com/prometheus/alertmanager/releases

1.2alertmanager服務(wù)部署

Anertmanager可以不用和Prometheus部署在同一臺(tái)機(jī)器,只要服務(wù)之間可以通信即可。

# wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz

# tar xf alertmanager-0.20.0.linux-amd64.tar.gz -C /usr/local/
# ln -s /usr/local/alertmanager-0.20.0.linux-amd64/ /usr/local/alertmanager

# 修改alertmanager配置文件
# cat alertmanager.yml                                                       
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'gaojing@163.com'
  smtp_auth_username: 'gaojing@163.com'
  smtp_auth_password: 'password'
  smtp_require_tls: false

route:
  group_by: ['alertname']  # 分組標(biāo)簽
  group_wait: 10s          # 分組等待時(shí)間,同一組內(nèi)在10秒鐘內(nèi)還有其它告警,如果有則一同發(fā)送
  group_interval: 10s      # 上下兩組間隔時(shí)間
  repeat_interval: 1h      # 重復(fù)告警間隔時(shí)間
  receiver: 'mail'         # 接收者是誰
receivers:                 # 定義接收者,將告警發(fā)送給誰
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
- name: 'mail'
  email_configs:
  - to: '532141928@qq.com'

# 檢查配置文件
# ./amtool check-config alertmanager.yml 

# 使用systemd來管理alertmanager服務(wù)
# cat /usr/lib/systemd/system/alertmanager.service    
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager  --config.file=/usr/local/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target

# 啟動(dòng)alertmanager服務(wù)
# systemctl daemon-reload 
# systemctl start alertmanager 
# systemctl enable alertmanager 

二、配置Prometheus與alertmanager集成

2.1配置prometheus與alertmanager告警

配置告警規(guī)則可參考:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

# vim /usr/local/prometheus/prometheus.yml
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - 127.0.0.1:9093    # alertmanager的通信地址

rule_files:
  - "rules/*.yml"          # alertmanager使用的配置文件存放地址

# mkdir /usr/local/prometheus/rules
# cat /usr/local/prometheus/rules/general.yml
groups:
- name: example
  rules:
  - alert: InstanceDown
    expr: up == 0   # 表達(dá)式當(dāng)前實(shí)例服務(wù)狀態(tài),1為正常
    for: 3m         # 告警持續(xù)時(shí)間5分鐘 
    labels:
      severity: page     # 告警級(jí)別
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} 已經(jīng)停止工作3分鐘."

# /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml 
Checking /usr/local/prometheus/prometheus.yml
  SUCCESS: 1 rule files found

Checking /usr/local/prometheus/rules/general.yml
  SUCCESS: 1 rules found

# systemctl restart prometheus.service 

重啟服務(wù)之后就能看到新的規(guī)則:

停止一個(gè)服務(wù)進(jìn)行驗(yàn)證

2.2告警狀態(tài)

Inactive:這里什么都沒有發(fā)生。
Pending:已觸發(fā)閾值,但未滿足告警持續(xù)時(shí)間(即rule中的for字段)
Firing:已觸發(fā)閾值且滿足告警持續(xù)時(shí)間。警報(bào)發(fā)送到Notification Pipeline,經(jīng)過處理,發(fā)送給接受者。

這樣的目的是多次判斷失敗才發(fā)告警,減少郵件。

查看郵箱已經(jīng)收到郵件:

2.3告警分配到指定接收到組,處理流程如下

1.接收到Alert,根據(jù)labels判斷屬于哪些Route(可存在多個(gè)Route,一個(gè)Route有多個(gè)Group,一個(gè)Group有多個(gè)Alert)。
2.將Alert分配到Group中,沒有則新建Group。
3.新的Group等待group_wait指定的時(shí)間(等待時(shí)可能收到同一Group的Alert),根據(jù)resolve_timeout判斷Alert是否解決,然后發(fā)送通知。
4.已有的Group等待group_interval指定的時(shí)間,判斷Alert是否解決,當(dāng)上次發(fā)送通知到現(xiàn)在的間隔大于repeat_interval或者Group有更新時(shí)會(huì)發(fā)送通知。

route:  
  receiver: 'default-receiver'    # 所有不匹配以下子路由的告警都將保留在根節(jié)點(diǎn),并發(fā)送到“default-receiver”
  group_wait: 30s                 # 為一個(gè)組發(fā)送通知的初始等待時(shí)間,默認(rèn)30s
  group_interval: 5m              # 在發(fā)送新告警前的等待時(shí)間。通常5m或以上
  repeat_interval: 1h             # 發(fā)送重復(fù)告警的周期。如果已經(jīng)發(fā)送了通知,再次發(fā)送之前需要等待多長(zhǎng)時(shí)間。
  group_by: [cluster, alertname]  # 報(bào)警分組依據(jù)
  
  routes:
  - receiver: 'database-pager'    # 所有service=mysql或者service=cassandra的告警分配到數(shù)據(jù)庫接收端
    group_wait: 10s
    match_re:
      service: mysql|cassandra
      
  - receiver: 'frontend-pager'    # 所有帶有team=frontend標(biāo)簽的告警都與此子路由匹配,它們是按產(chǎn)品和環(huán)境分組的,而不是集群
    group_by: [product, environment]
    match:
      team: frontend 
receivers:                        # 定義接收者,將告警發(fā)送給誰
- name: 'database-pager'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
  
- name: 'frontend-pager'
  email_configs:
  - to: '532141928@qq.com'

三、告警的收斂(分組、抑制、靜默)

告警面臨最大問題,是警報(bào)太多,相當(dāng)于狼來了的形式。收件人很容易麻木,不再繼續(xù)理會(huì)。關(guān)鍵的告警常常被淹沒。在一問題中,alertmanger在一定程度上得到很好解決。
Prometheus成功的把一條告警發(fā)給了Altermanager,而Altermanager并不是簡(jiǎn)簡(jiǎn)單單的直接發(fā)送出去,這樣就會(huì)導(dǎo)致告警信息過多,重要告警被淹沒。所以需要對(duì)告警做合理的收斂。
告警收斂手段:
分組(group):將類似性質(zhì)的警報(bào)分類為單個(gè)通知 (相同組中的告警合并到一封郵件中進(jìn)行發(fā)送 - alert: InstanceDown)
抑制(Inhibition):當(dāng)警報(bào)發(fā)出后,停止重復(fù)發(fā)送由此警報(bào)引發(fā)的其他警報(bào)
靜默(Silences):是一種簡(jiǎn)單的特定時(shí)間靜音提醒的機(jī)制

抑制

# vim /usr/local/alertmanager/alertmanager.yml 
inhibit_rules:    # 抑制 告警收斂 發(fā)送關(guān)鍵告警
  - source_match:
      severity: 'critical'    # 如果是此級(jí)別的告警,就會(huì)忽略下面warning級(jí)別告警郵件的發(fā)送
    target_match:
      severity: 'warning'
    equal: ['app', 'instance']   # 根據(jù)標(biāo)簽來判斷主機(jī)

靜默

特定的時(shí)間內(nèi)不再發(fā)送告警,訪問IP:9093端口在WEB頁面進(jìn)行配置,一般用來在維護(hù)階段組止預(yù)期的告警通知。

觸發(fā)告警的流程:

1.Prometheus Server監(jiān)控目標(biāo)主機(jī)上暴露的http接口(這里假設(shè)接口A),通過上述Promethes配置的'scrape_interval'定義的時(shí)間間隔,定期采集目標(biāo)主機(jī)上監(jiān)控?cái)?shù)據(jù)。

2.當(dāng)接口A不可用的時(shí)候,Server端會(huì)持續(xù)的嘗試從接口中取數(shù)據(jù),直到"scrape_timeout"時(shí)間后停止嘗試。這時(shí)候把接口的狀態(tài)變?yōu)?DOWN"。

3.Prometheus同時(shí)根據(jù)配置的"evaluation_interval"的時(shí)間間隔,定期(默認(rèn)1min)的對(duì)Alert Rule進(jìn)行評(píng)估;當(dāng)?shù)竭_(dá)評(píng)估周期的時(shí)候,發(fā)現(xiàn)接口A為DOWN,即UP=0為真,激活A(yù)lert,進(jìn)入“PENDING”狀態(tài),并記錄當(dāng)前active的時(shí)間;

4.當(dāng)下一個(gè)alert rule的評(píng)估周期到來的時(shí)候,發(fā)現(xiàn)UP=0繼續(xù)為真,然后判斷警報(bào)Active的時(shí)間是否已經(jīng)超出rule里的"for" 持續(xù)時(shí)間,如果未超出,則進(jìn)入下一個(gè)評(píng)估周期;如果時(shí)間超出,則alert的狀態(tài)變?yōu)?FIRING";同時(shí)調(diào)用Alertmanager接口,發(fā)送相關(guān)報(bào)警數(shù)據(jù)。

5.AlertManager收到報(bào)警數(shù)據(jù)后,會(huì)將警報(bào)信息進(jìn)行分組,然后根據(jù)alertmanager配置的"group_wait"時(shí)間先進(jìn)行等待。等wait時(shí)間過后再發(fā)送報(bào)警信息。

6.屬于同一個(gè)Alert Group的警報(bào),在等待的過程中可能進(jìn)入新的alert,如果之前的報(bào)警已經(jīng)成功發(fā)出,那么間隔"group_interval"的時(shí)間間隔后再重新發(fā)送報(bào)警信息。比如配置的是郵件報(bào)警,那么同屬一個(gè)group的報(bào)警信息會(huì)匯總在一個(gè)郵件里進(jìn)行發(fā)送。

7.如果Alert Group里的警報(bào)一直沒發(fā)生變化并且已經(jīng)成功發(fā)送,等待"repeat_interval"時(shí)間間隔之后再重復(fù)發(fā)送相同的報(bào)警郵件;如果之前的警報(bào)沒有成功發(fā)送,則相當(dāng)于觸發(fā)第6條條件,則需要等待group_interval時(shí)間間隔后重復(fù)發(fā)送。

8.同時(shí)最后至于警報(bào)信息具體發(fā)給誰,滿足什么樣的條件下指定警報(bào)接收人,設(shè)置不同報(bào)警發(fā)送頻率,這里有alertmanager的route路由規(guī)則進(jìn)行配置。

四、自定義告警

自定義磁盤、CPU、內(nèi)存大于80%的告警

# vim /usr/local/prometheus/rules/node.yml                                          
groups:
- name: node.rules
  rules:
  - alert: NodeFilesystemUsage
    expr: 100 - (node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: {{$labels.mountpoint }} 分區(qū)使用過高"
      description: "{{$labels.instance}}: {{$labels.mountpoint }} 分區(qū)使用大于 80% (當(dāng)前值: {{ $value }})"
  - alert: NodeMemoryUsage
    expr: 100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 內(nèi)存使用過高"
      description: "{{$labels.instance}}: 內(nèi)存使用大于 80% (當(dāng)前值: {{ $value }})"
  - alert: NodeCPUUsage
    expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: CPU使用過高"
      description: "{{$labels.instance}}: CPU使用大于 80% (當(dāng)前值: {{ $value }})"

# /usr/local/prometheus/promtool  check config /usr/local/prometheus/prometheus.yml 
Checking /usr/local/prometheus/prometheus.yml
  SUCCESS: 2 rule files found

Checking /usr/local/prometheus/rules/general.yml
  SUCCESS: 1 rules found

Checking /usr/local/prometheus/rules/node.yml
  SUCCESS: 3 rules found

# systemctl restart prometheus.service 

總結(jié)

以上是生活随笔為你收集整理的Prometheus之Alertmanager告警(七)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。