監控 Promethus的監控告警Alertmanager、Grafana

Promethus的監控告警Alertmanager

Alertmanager 介紹

  • Prometheus的一個組件,用于定義和發送告警通知,內置多種第三方告警通知方式,同時還提供了對Webhook通知的支持
  • 基于警報規則對規則產生的警報進行分組、抑制和路由,并把告警發送給合適的接收端,例如郵件、釘釘或Webhook
  • 在Prometheus中一條告警規則組成
    • 告警名稱:用戶需要為告警規則命名
    • 告警規則:主要由PromQL進行定義,表示當表達式(PromQL)查詢結果持續多長時 間(During)后出發告警
  • 關鍵特點
    • 分組:將詳細的告警信息合并成一個通知,某些情況下,如由于系統宕機導致大量的告警被同時觸發
    • 抑制:當某一告警發出后,可以停止重復發送由此告警引發的其它告警的機制,避免告警轟炸
    • 靜默:根據標簽對告警進行靜默處理,如果接收到的告警符合靜默的配置, Alertmanager則不會發送告警通知

Alertmanager安裝

注意:記住這里的地址,后面告警需要配置這個地址

#下載
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-arm64.tar.gz
#解壓
tar -zxvf alertmanager-0.27.0.linux-arm64.tar.gz
#重名名
mv alertmanager-0.27.0.linux-amd64  alertmanager# 進入目錄
cd alertmanager#啟動
./alertmanager --config.file=alertmanager.yml#守護進程方式啟動
nohup ./alertmanager --config.file=alertmanager.yml &
  • 訪問 http://ip:port , ,比如 http://47.115.61.73:9093/#/alerts

在這里插入圖片描述

使用流程
  • 步驟

    • Prometheus的rules.yaml編寫告警規則
      • 配置Prometheus,定義在哪些情況下被告警
    • 配置Alertmanager
      • 添加Email、釘釘或者短信接收程序,為告警通知指定目標和通知媒介
    • 建立告警路由
      • 定義告警的路由方式,以便區分和分類告警級別,并為不同的告警目標設定不同的火災通知方法。
  • 關鍵配置解讀

    • Prometheus的rule.yaml配置文件
groups: # 告警規則組
- name: server-alarmrules: #規則,可以配置多個alert告警- alert: # 告警名稱expr:  # 告警表達式,基于PromQL表達式告警觸發條件,用于計算是否有時間序列滿足該條件。for:  # 評估等待時間,可選,用于表示只有當觸發條件持續一段時間后才發送告警,在等待期間新產生告警 的狀態為pending。labels: #自定義標簽,允許用戶指定要附加到告警上的一組附加標簽。severity:  # 告警嚴重程度annotations: #用于指定一組附加信息,比如用于描述告警詳細信息的文字等summary: # 告警摘要description: # 告警詳細描述- alert: "內存告警"expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80for: 1mlabels:severity: warningannotations:summary: "{{$labels.instance}}: 檢測到 高內存 使用率!"description: "{{$labels.instance}}: 內存使用率在 80% 以上 (當前使用值為:{{ $value }})"- alert: "CPU告警"expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) * 100 > 80for: 1mlabels:severity: warningannotations:summary: "{{$labels.instance}}: 檢測到 高CPU 使用率!"description: "{{$labels.instance}}: CPU使用率在 80% 以上 (當前使用值為:{{ $value }})"  
  • severity有以下幾種常用值

    • critical(嚴重),用于描述影響系統主要功能甚至導致系統崩潰的情況。
    • warning(警告),用于描述存在異常但不會導致系統崩潰或停止服務的情況。
    • info(信息),用于描述與業務正常運行相對應的正常狀態信息。
    • debug(調試),用于描述可以用于排除故障的調試信息。
  • Alertmanageralertmanager.yml配置文件

    • 主要包含兩個部分:路由(route) + 接收器(receivers)
      • 告警信息會從配置中的頂級路由(route)進入路由樹,根據路由規則將告警信息發送給相應的接收器
global:smtp_smarthost: 'smtp.126.com:25' # SMTP服務器地址和端口smtp_from: 'xxxxx@126.com' # 顯示在郵件“發件人”字段中的地址smtp_auth_username: 'xxxx@126.com' # STMP認證時使用的用戶名smtp_auth_password: 'xxxxxx' # SMTP認證時使用的密碼,不是密碼smtp_require_tls: false # SMTP服務器是否需要TLS加密route:receiver: 'email' # 發送告警通知的收件人,和下面的接受者名稱匹配group_wait: 10s # 在發送前等待各個警報的時間group_interval: 30s # 相同警報名稱的警報發送間隔repeat_interval: 10m # 重復發送警報的時間間隔group_by: ['alertname'] # 根據警報名分組告警接收者# 告警接收者
receivers:
- name: 'email' # 接收者名稱email_configs:- to: 'xxxxxx@qq.com' # 接收告警郵件的收件人

Alertmanager監控告警和郵件通知

需求
  • 應用程序監控,如果應用程序掛了,觸發郵件發送開發人員
Prometheus板塊配置
  • 配置Prometheus的rule告警規則
#創建配置文件 prometheus程序目錄下
touch rules.yml
#配置規則
groups:
- name: server-alarmrules:- alert: "InstanceDown"expr: up == 0for: 1mlabels:severity: warningannotations:summary: "{{ $labels.instance }}"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
  • 配置Prometheus關聯Alertmanager地址和rules規則啟用
    在這里插入圖片描述
  • 動態更新Prometheus配置

注意:Prometheus 需要開啟支持熱更新

curl -X POST http://localhost:9090/-/reload
Alertmanager板塊配置
  • alertmanager.yml 配置文件(如果測試服務是在阿里云,需要將25端口(被禁用)改成其它的)
# 第一個版本
global:smtp_smarthost: 'smtp.126.com:465'smtp_from: 'xxxxx@126.com'smtp_auth_username: 'xxxxx@126.com'smtp_auth_password: 'xxxx'smtp_require_tls: falseroute:receiver: 'dingding.webhook'group_wait: 10sgroup_interval: 30srepeat_interval: 10mgroup_by: ['alertname', 'cluster', 'service']routes:- receiver: 'dingding.webhook'continue: true- receiver: 'default-receiver'receivers:- name: 'default-receiver'email_configs:- to: 'xxxxx@qq.com'send_resolved: true- name: 'dingding.webhook'webhook_configs:- url: 'https://oapi.dingtalk.com/robot/send?access_token=xxxx'send_resolved: true
# 第二個版本
global:smtp_smarthost: 'smtp.126.com:25' # SMTP服務器地址和端口smtp_from: 'xxxxx@126.com' # 顯示在郵件“發件人”字段中的地址smtp_auth_username: 'xxxx@126.com' # STMP認證時使用的用戶名smtp_auth_password: 'xxxxxx' # SMTP認證時使用的密碼,不是密碼smtp_require_tls: false # SMTP服務器是否需要TLS加密route:receiver: 'email' # 發送告警通知的收件人,和下面的接受者名稱匹配group_wait: 10s # 在發送前等待各個警報的時間group_interval: 30s # 相同警報名稱的警報發送間隔repeat_interval: 10m # 重復發送警報的時間間隔group_by: ['alertname'] # 根據警報名分組告警接收者# 告警接收者
receivers:
- name: 'email' # 接收者名稱email_configs:- to: 'xxxxxx@qq.com' # 接收告警郵件的收件人
應用和驗證步驟
  • 應用
#啟動
./alertmanager --config.file=alertmanager.yml#守護進程方式啟動
nohup ./alertmanager --config.file=alertmanager.yml &
  • 驗證步驟
    • 停止spring boot程序(停止其他服務都可以)
    • 查看prometheus
    • 查看alertmanager
    • 查看郵件

擴展Alertmanager監控告警和釘釘通知

prometheus-webhook-dingtalk 簡介
  • prometheus-webhook-dingtalk是一個開源項目
  • 用于將Prometheus的告警信息通過Webhook的方式發送到釘釘(DingTalk)群聊中
  • 實現告警通知的即時送達與團隊協作
  • 該項目作為一個輕量級但功能強大的工具,使得運維人員和開發團隊能夠直接在常用的通訊平臺上接收到監控系統的告警消息,提高響應速度和協作效率
安裝 prometheus-webhook-dingtalk
配置config.yml
## Request timeout
# timeout: 5s## Uncomment following line in order to write template from scratch (be careful!)
#no_builtin_template: true## Customizable templates path
#templates:
#  - contrib/templates/legacy/template.tmpl## You can also override default template using `default_message`
## The following example to use the 'legacy' template from v0.3.0
#default_message:
#  title: '{{ template "legacy.title" . }}'
#  text: '{{ template "legacy.content" . }}'## Targets, previously was known as "profiles"
targets:webhook1:url: https://oapi.dingtalk.com/robot/send?access_token=xxxx
  • access_token: 從釘釘獲取的機器人Webhook地址的access_token
安裝
docker run -d --name prometheus-webhook-dingtalk \
-p 8060:8060 \
-v /usr/local/software/config/prometheus-webhook-dingtalk/config.yml:/etc/prometheus-webhook-dingtalk/config.yml \
timonwong/prometheus-webhook-dingtalk
  • /usr/local/software/config/prometheus-webhook-dingtalk/config.yml 修改為配置 config.yml 的路徑掛載到容器
修改alertmanageralertmanager.yml配置
global:resolve_timeout: 5m
route:group_by:  ['alertname']group_wait: 10sgroup_interval: 30srepeat_interval: 1mreceiver: 'dingding.webhook'
receivers:- name: 'dingding.webhook'webhook_configs:- url: 'http://47.115.61.73:8060/dingtalk/webhook1/send'send_resolved: true
  • 修改47.115.61.73到實際部署prometheus-webhook-dingtalk服務的地址
  • 重新啟動alertmanager
  • 按照應用和驗證步驟進行驗證
  • 教程效果如下
    在這里插入圖片描述

Grafana+釘釘群告警機器人

前言

  • Alertmanager告警和Grafana告警功能,兩個組件各有優缺點
  • Grafana更適合于小規模或簡單的監控系統,而Alertmanager更適合于大規模或更復雜的告警處理場景
  • 如果需要高級告警規則和復雜的告警邏輯,請使用Alertmanager
  • 如果僅需要基本的告警功能并且已經使用Grafana進行數據可視化,則可以使用Grafana作為告警處理工具

Alertmanager、Grafana對比

  • Grafana
    • 優點
      • 簡單易用,Grafana的告警規則配置界面直觀易懂,可以方便地設置告警的觸發條件、持續時間和通知方式等
      • 定制性強,Grafana的告警規則支持自定義查詢和指標,使得監控系統的告警范圍更加廣泛
      • 能夠對告警事件進行統計和可視化處理,在Grafana中可以方便地對告警事件進行統計,同時還可以進行實況監控和定期報告等操作
    • 缺點
      • 不支持高級告警邏輯。Grafana只能識別基于簡單算術或表達式的邏輯,無法支持更復雜的邏輯
      • 設計初衷不是作為告警處理工具,Grafana更多地是作為數據可視化工具
      • 核心功能是數據分析和展示,并不是專門的告警處理工具,因此不太適合大規模或復雜的告警處理場景
      • 可擴展性不夠,無法滿足比較復雜、高級的告警規則設計
  • Alertmanager
    • 優點
      • 提供高級告警邏輯功能,支持許多常用的高級告警邏輯,如靜默、抑制和聚合等
      • 支持多通道分發告警,支持將告警通知分發到多個通道,如電子郵件,短信等,能夠滿足不同場景下的需求
      • 可靠性高,提供多種保護機制,如去重、失敗重試和自動恢復,確保告警能夠可靠地傳送給相應的接收方
      • 支持高度可擴展性,可以與各種 monitoring system 集成使告警觸發進一步個性
    • 缺點
      • 復雜和難以部署,Alertmanager的配置比Grafana更復雜,需要深入了解監控系統和告警系統
      • 學習成本高,Alertmanager需要學習更多的知識和技能才能掌握
      • 不善于定義靜態監控告警,對于 Dashboard 監控告警,它可能不太適合

需求

  • 使用Grafana的alert告警模塊,內存告警
  • 配置自動告警機器人,如果內存超過一定范圍,推送到釘釘群

實現步驟

  • 創建釘釘告警機器人,獲取webhook地址

    • webhook地址:https://oapi.dingtalk.com/robot/send?access_token=xxxx
    • Postman 驗證消息推送是否準確
    • 釘釘機器人相關地址:https://open.dingtalk.com/document/robots/custom-robot-access
  • Grafana新建推送通道
    在這里插入圖片描述

  • 面板Panel配置告警規則

在這里插入圖片描述

告警流程驗證

  • 停止應用服務器
  • 查看prometheus相關監控(可以停止Alert Manager)
  • 查看Grafana相關告警
  • 查看釘釘群機器人是否推送(記得配置ip白名單)
    在這里插入圖片描述

問題修復

  • 點擊群告警信息沒法直接進到告警頁面
  • 解決方案
    • 配置默認跳轉路徑,使用root用戶進入容器修改配置文件
docker exec -u 0 -it #{容器id/容器名稱} /bin/bash
#使用該-u選項時,可以使用root用戶(ID = 0)而不是提供的默認用戶登錄Docker容器.root(id = 0)是容器中的默認用戶
- 編輯配置文件,修改為Grafana的部署地址,然后重啟

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37430.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37430.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37430.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入了解Spring框架的模塊組成

目錄 Spring CoreSpring ContextSpring AOPSpring DAOSpring ORMSpring WebSpring MVCSpring WebFluxSpring TestSpring BootSpring SecuritySpring BatchSpring IntegrationSpring Cloud結論 Spring Core 1.1 核心容器 Spring Core模塊是整個Spring框架的基礎。它包含了框架…

vue如何引入圖標

方法1&#xff1a;iconify/vue pnpm add iconify/vue -D 網址&#xff1a;https://icon-sets.iconify.design/ 使用哪個需要安裝 如下截圖,安裝指令&#xff1a; > npm install iconify/icons-gg在使用的頁面引入 import { Icon } from “iconify/vue”; <template>…

Mysql存儲過程用法:使用存儲過程編程,來判斷數據庫中數據表中的字段是否重復,避免重復插入記錄

目錄 一、mysql的存儲過程介紹 二、. 創建存儲過程 1、準備 2、創建插入記錄的存儲過程 三. 調用存儲過程 四. 刪除存儲過程 五. 修改存儲過程&#xff0c;避免數據表的姓名出現重復 1、修改存儲過程的方式 2、重新創建存儲過程 六. 驗證新的存儲過程 1、插入新的記…

高考后的抉擇:專業優先還是學校優先?

隨著2024年高考的帷幕落下&#xff0c;高考生們面臨的一個重要抉擇再度浮上心頭&#xff1a;在分數受限的情況下&#xff0c;是選擇一個心儀的專業&#xff0c;還是選擇一個知名度更高的學校&#xff1f;這是一個困擾了眾多考生和家長的長期難題。在這個關鍵的時刻&#xff0c;…

好用的導航網站有哪些

網址導航網站是我們日常上網的一個重要工具。它們不僅可以幫助我們快速找到所需的資源和信息&#xff0c;還能提高我們的工作效率。以下是小編收藏的幾個好用的導航網站&#xff0c;涵蓋了辦公、學習、娛樂等多個領域&#xff0c;分享給大家。 1. 辦公人導航 辦公人導航是一個…

Drag Select Compose:實現多平臺圖片多選功能的利器

Drag Select Compose:實現多平臺圖片多選功能的利器 在現代移動應用開發中,圖片多選功能是一個常見且實用的需求。而實現這種功能可能涉及到復雜的手勢處理和狀態管理。今天,我將介紹一款強大的Compose多平臺庫——Drag Select Compose,它能夠輕松實現類似于Google Photos…

【鴻蒙】第2天?裝飾器?組件和頁面生命周期

背景知識 &#xff11;?ArkTS 拓展了 TypeScript&#xff0c;TypeScript 拓展了 JavaScript。 增加了一些約束。 &#xff12;?ArkTS 是聲明式編程。 構建對象時類似構建者設計模式。鏈式賦值。 裝飾器 &#xff20;Component 自定義組件 Component裝飾器僅能裝飾str…

BGP中的TCP連接源地址問題

3.TCP連接源地址&#xff08;用loop back地址是最優選擇&#xff09; 應用場景與理論&#xff1a; 由于BGP應用于大型網絡中&#xff0c;為了避免單點失敗&#xff0c;往往需要通過多條鏈路連接&#xff0c;當一條鏈路故障時候就用另一條鏈路繼續工作&#xff0c;但是BGP又無法…

為何重要?解析企業實行網絡安全等級保護的必要性

在全球信息化迅速發展的背景下&#xff0c;企業數據資產成為核心競爭力的重要組成部分。然而&#xff0c;隨之而來的網絡安全威脅亦日益嚴峻&#xff0c;從數據泄露到勒索軟件攻擊&#xff0c;每一次安全事件都可能給企業帶來不可估量的損失。在此情境下&#xff0c;實行網絡安…

Java IO: 使用 FileReader 和 FileWriter 進行文件操作

在 Java 中&#xff0c;進行文件操作是一個常見的任務。FileReader 和 FileWriter 是用于讀取和寫入文本文件的類&#xff0c;它們提供了一種方便的方法來處理文件內容。本文將介紹如何使用 FileReader 和 FileWriter&#xff0c;并提供一些示例代碼。 FileReader 類概述 Fil…

使用PHP創建一個簡單的Web爬蟲

隨著互聯網的不斷發展&#xff0c;信息的獲取變得越來越方便。然而&#xff0c;海量的信息也給我們帶來了很多的煩惱&#xff0c;如何高效地獲取到我們所需要的信息就成了一項非常重要的任務。在實現自動化獲取信息的過程中&#xff0c;web爬蟲被廣泛應用。 Web爬蟲是一種自動…

R語言進行字符的替換和刪減gsub,substr函數

目錄 R語言讀文件“-“變成“.“ 提取列字符前幾個 提取列字符末尾幾個 進行字母替換 paste0函數使用</

學計算機的學生假期可以干什么?

學習目標&#xff1a; 學計算機的學生假期可以干什么 學習內容&#xff1a; 實習&#xff1a;尋找計算機相關領域的實習機會&#xff0c;積累工作經驗。這對你未來找工作非常有幫助。在線課程&#xff1a;參加編程、數據科學或其他技術領域的在線課程&#xff0c;提升技能。公…

python實現API調用緩存

python實現API調用緩存 1.代碼2.輸出3.保存的json數據 想把python某些函數的參數及返回值記錄下來,如果之前已計算過,則直接返回緩存中的數據 1.代碼 import jsondef get_variable_name(var):變量轉變量名local_varsglobals()return [name for name, value in local_vars.ite…

螺旋模型:結合瀑布模型和增量模型的項目管理利器

目錄 前言1. 螺旋模型概述1.1 螺旋模型的核心理念1.2 螺旋模型的四個階段 2. 螺旋模型的詳細步驟2.1 計劃階段2.2 風險分析階段2.3 工程階段2.4 評估階段 3. 螺旋模型在大型項目中的應用3.1 應對需求變化3.2 有效的風險管理3.3 增強的客戶參與3.4 靈活的資源分配 4. 螺旋模型的…

redis分布式事務

1. 使用RedisTemplate.opsForValue().setIfAbsent(key, value, time, TimeUnit.SECONDS) 這種方法是基于Redis的SET命令的NX&#xff08;Not eXists&#xff09;選項和EX&#xff08;expiry time&#xff09;選項來實現的。它嘗試設置一個鍵值對&#xff0c;只有當鍵不存在時才…

git-extras

當使用 git-extras 時&#xff0c;除了安裝和基本命令之外&#xff0c;了解如何結合常見的 Git 工作流程和實際開發需求會更加有幫助。下面是一個更全面的 git-extras 使用教程&#xff0c;涵蓋了安裝、常見命令以及實際應用場景的示例。 1. 安裝 git-extras 在 macOS 上&…

Java面試題:討論單例模式的實現方式,包括懶漢式和餓漢式,并討論線程安全問題

單例模式&#xff08;Singleton Pattern&#xff09;是一種設計模式&#xff0c;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。單例模式在某些場景下很有用&#xff0c;例如配置管理、日志記錄等。以下是單例模式的兩種主要實現方式&#xff1a;懶漢式&#xff08…

【Python】已解決:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv‘

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv’ 一、分析問題背景 在編寫Python代碼進行文件操作時&#xff0c;開發者可能會遇到…

備戰秋招day7

很高興又堅持了7天。 算法&#xff08;回溯&#xff09; 77. 組合 class Solution {List<Integer> list new LinkedList<>();List<List<Integer>> llist new LinkedList<>();public List<List<Integer>> combine(int n, int k)…