通過 Docker 運行 Prometheus 入門

Prometheus 流程拓撲

Promethues 組件

  • prometheus server
  • exporter
  • alertmanager

環境準備

  • Docker

拉取鏡像備用

# https://hub.docker.com/r/prom/prometheus
docker pull m.daocloud.io/docker.io/prom/prometheus:main# https://hub.docker.com/r/prom/node-exporter
docker pull m.daocloud.io/docker.io/prom/node-exporter:master# https://hub.docker.com/r/prom/alertmanager
docker pull m.daocloud.io/docker.io/prom/alertmanager:main
  • 接收 Prometheus Alertmanager Webhook 告警的 API

本文使用 php 接收

$ cat index.php
<?php$a = $_GET;
$b = $_POST;
$c = file_get_contents('php://input');file_put_contents('debug.log', print_r([date('Y-m-d H:i:s', time()), $a, $b, $c], true), FILE_APPEND);print_r([$a, $b, $c]);# 在 9977 端口監聽 HTTP 請求,用于告警的 webhook
$ php -S 0.0.0.0:9977

代碼示例

目錄結構

tree .
├── alertmanager # Alertmanager 相關配置及數據目錄
│   ├── config
│   │   └── alertmanager.yml # 配置文件
│   └── data # 數據目錄
├── prometheus # Prometheus 相關配置及數據目錄
│   ├── config
│   │   ├── alert_rules.yml # 告警配置
│   │   └── prometheus.yml # prometheus 配置文件
│   └── data # 數據目錄
├── run-alertmanager.sh # 啟動 Alertmanager 腳本
├── run-node-exporter.sh # 啟動 Node-Exporter 腳本
└── run-prometheus.sh # 啟動 Prometheus Server 腳本

腳本內容

  • alertmanager/config/alertmanager.yml
route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'web.hook'
receivers:- name: 'web.hook'webhook_configs:# webhook 的通知地址- url: 'http://192.168.1.8:9977/'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']
  • prometheus/config/prometheus.yml
# my global config
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.# scrape_timeout is set to the global default (10s).# Alertmanager configuration
alerting:alertmanagers:- static_configs:- targets:# alertmanager 的服務地址- 192.168.1.8:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:# - "first_rules.yml"# - "second_rules.yml"- "alert_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: "prometheus"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["localhost:9090"]# The label name is added as a label `label_name=<label_value>` to any timeseries scraped from this config.labels:app: "prometheus"- job_name: "my_node_exporter"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:# node_exporter 地址- targets: ["192.168.1.8:9100"]# The label name is added as a label `label_name=<label_value>` to any timeseries scraped from this config.labels:app: "another_node_exporter"
  • prometheus/config/alert_rules.yml
groups:- name: examplerules:- alert: HighCPUUsage# 當 CPU 使用率 >= 85% 持續時間 >= 2 分鐘以上時進行告警expr: sum(rate(node_cpu_seconds_total{mode=~"user|system"}[5m]))/sum(rate(node_cpu_seconds_total[5m])) >= 0.8for: 2mlabels:severity: warningannotations:summary: "CPU usage on {{ $labels.instance }} is high"
  • run-alertmanager.sh
#!/bin/shCONFIG_PATH=$PWD/alertmanager/config
DATA_PATH=$PWD/alertmanager/data
IMAGE=m.daocloud.io/docker.io/prom/alertmanager:maindocker run --rm --name alertmanager -d \-v $CONFIG_PATH:/etc/alertmanager \-v $DATA_PATH:/alertmanager \-p 9093:9093 \$IMAGE
  • run-node-exporter.sh
#!/bin/shIMAGE=m.daocloud.io/docker.io/prom/node-exporter:master
docker run -d \-p 9100:9100 \$IMAGE
  • run-prometheus.sh
#!/bin/sh
IMAGE=m.daocloud.io/docker.io/prom/prometheus:main
CONFIG_PATH=$PWD/prometheus/config
DATA_PATH=$PWD/prometheus/data# 注:--web.enable-lifecycle 啟用熱重載
# 配置熱重載方式:curl -X POST http://192.168.1.8:9090/-/reload
docker run --rm --name prometheus -d \-v $CONFIG_PATH:/etc/prometheus \-v $DATA_PATH:/prometheus \-p 127.0.0.1:9090:9090 \$IMAGE \--config.file=/etc/prometheus/prometheus.yml \--storage.tsdb.path=/prometheus \--web.enable-lifecycle

開始運行

(1)啟動組件

# 啟動 Alertmanager
sh run-alertmanager.sh# 啟動 Exporter
sh run-node-exporter.sh# 啟動 Prometheus Server
sh run-prometheus.sh# 查看容器狀態
docker ps
CONTAINER ID   IMAGE                                               COMMAND                   CREATED          STATUS          PORTS                                         NAMES
f8eafe761ada   m.daocloud.io/docker.io/prom/alertmanager:main      "/bin/alertmanager -…"   37 minutes ago   Up 37 minutes   0.0.0.0:9093->9093/tcp, [::]:9093->9093/tcp   alertmanager
e9059e4b093e   m.daocloud.io/docker.io/prom/prometheus:main        "/bin/prometheus --c…"   39 minutes ago   Up 39 minutes   127.0.0.1:9090->9090/tcp                      prometheus
b2d29afc5f8d   m.daocloud.io/docker.io/prom/node-exporter:master   "/bin/node_exporter …"   2 hours ago      Up 2 hours      0.0.0.0:9100->9100/tcp, [::]:9100->9100/tcp   pedantic_edison

(2)進入 node-exporter 通過命令 yes > /dev/null & 使 CPU 負載達到告警閥值

docker exec -it b2d29afc5f8d /bin/sh
b2d29afc5f8d $ yes > /dev/null &
b2d29afc5f8d $ yes > /dev/null &
b2d29afc5f8d $ yes > /dev/null &
b2d29afc5f8d $ yes > /dev/null &
... 
b2d29afc5f8d $ yes > /dev/null &
b2d29afc5f8d $ yes > /dev/null &

(3)然后訪問 192.168.1.8:9090 查看 CPU 使用率變化情況
查詢語句 sum(rate(node_cpu_seconds_total{mode=~"user|system"}[5m])) / sum(rate(node_cpu_seconds_total[5m]))
prometheus 查看 CPU 負載
(4)點擊 Alerts 查看是否觸發告警
prometheus alerts
(5)訪問 192.168.1.8:9093 查看 Alertmanager 是否觸發告警 webhook
alertmanager
(6)在 webhook 接收端查看數據情況

cat debug.log(debug.log 由上述的 index.php 生成)
webhook 收到的報文

(7)其它

  • 可根據接收到報文進行自定義處理(如通知到釘釘、企業微信等)
  • Alertmanager 可以配置郵件告警,可參考官方文檔

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

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

相關文章

Java 8特性(一)

目錄 一、Lambda表達式 1、語法格式&#xff1a; &#xff08;1&#xff09;接口名 對象名(參數類型1參數名1,....參數類型n 參數名n)->{方法體;} &#xff08;2&#xff09;參數類型h 參數名n:接口中抽象方法的參數項 &#xff08;3&#xff09;->:表示連接操作 &a…

【代碼隨想錄|232.用棧實現隊列、225.用隊列實現棧、20.有效的括號、1047.刪除字符串中的所有相鄰重復項】

232.用棧實現隊列 timutimtit232. 用棧實現隊列 - 力扣&#xff08;LeetCode&#xff09; class MyQueue { public:stack<int> Sin;stack<int> Sout;MyQueue() {}void push(int x) {Sin.push(x);}int pop() {if (Sout.empty()) { // 出棧為空就把入棧的數導出來w…

碼上爬第三題【協程+瀏覽器調試檢測】

前言&#xff1a;圖靈第三題就是對用戶瀏覽器調試檢測&#xff0c;檢測鼠標右擊打開控制臺&#xff0c;檢測鍵盤按鍵ctrlshifti&#xff0c;從瀏覽器設置打開開發者工具也不行&#xff0c;應該是有瀏覽器寬高檢測的&#xff0c;所以我們保證瀏覽器頁面寬高不變即可。你如果想右…

windows、linux應急響應入侵排查

windows入侵排查 1.1檢查賬號 1.查看服務器是否有弱口令&#xff0c;遠程管理端口是否對公網開放 2.查看服務器是否存在可疑賬號、新增賬號 檢查方法&#xff1a;打開 cmd 窗口&#xff0c;輸入 lusrmgr.msc 命令&#xff0c;查看是否有新增/可疑的賬號&#xff0c;如有管…

11. 為什么要用static關鍵字

11. 為什么要用static關鍵字 static&#xff1a;通常來說&#xff1a;在new一個對象的時候&#xff0c;數據存儲空間才會被分配&#xff0c;方法才能被外界使用。但是有時只想單獨分配一個存儲空間&#xff0c;不考慮需要創建對象或不創建對象&#xff0c;在沒有對象的情況下也…

[Oracle] MAX()和MIN()函數

MAX() 和 MIN() 是 Oracle 常用的聚合函數&#xff0c;用于從一組值中找出最大值和最小值1.MAX()函數MAX()函數返回指定列或表達式中的最大值語法格式MAX(expression)參數說明expression&#xff1a;可以是列名、計算列或表達式示例-- 返回employees表中salary列的最大值 SELEC…

網絡資源模板--基于Android Studio 實現的麻雀筆記App

目錄 一、測試環境說明 二、項目簡介 三、項目演示 四、部設計詳情&#xff08;部分) 添加頁面 五、項目源碼 一、測試環境說明 電腦環境 Windows 11 編寫語言 JAVA 開發軟件 Android Studio (2020) 開發軟件只要大于等于測試版本即可(近幾年官網直接下載也可以)&…

96-基于Flask的酷狗音樂數據可視化分析系統

基于Flask的酷狗音樂數據可視化分析系統 &#x1f4cb; 目錄 項目概述技術棧系統架構功能特性數據庫設計核心代碼實現數據可視化部署指南項目總結 &#x1f3af; 項目概述 本項目是一個基于Flask框架開發的酷狗音樂數據可視化分析系統&#xff0c;旨在為用戶提供音樂數據的…

Java基礎-紅包雨游戲-多線程

目錄 案例要求&#xff1a; 實現思路&#xff1a; 代碼&#xff1a; Employee RedPacket RedPacketRain 總結&#xff1a; 案例要求&#xff1a; 實現思路&#xff1a; 創建一個員工類,id和搶到的金額&#xff0c;創建一個紅包類&#xff0c;里面就是金額&#xff0c;創…

[激光原理與應用-203]:光學器件 - 增益晶體 - 增益晶體的使用方法

增益晶體是激光器的核心元件&#xff0c;其作用是通過受激輻射放大光信號。正確使用增益晶體需綜合考慮晶體選型、光路設計、熱管理、泵浦方式及安全防護等關鍵環節。以下是增益晶體的詳細使用方法及注意事項&#xff1a;一、晶體選型&#xff1a;根據需求匹配參數材料選擇Nd:Y…

?什么是抽象主義人工智能??

什么是抽象主義人工智能&#xff1f; 傳統的人工智能分為符號主義和連接主義兩個派別&#xff0c;后來又增加了行為主義。 我發現符號主義和連接主義處理的都是文本&#xff0c;而不是語義。原來的專家系統是符號主義的產物。現在的大語言模型是連接主義的產物。它們處理的都…

OpenSpeedy綠色免費版下載,提升下載速度,網盤下載速度等游戲變速工具

下載地址獲取點擊這里打開&#xff1a;OpenSpeedy 簡單介紹OpenSpeedy 是一款開源免費的游戲變速工具&#xff08;對某些網盤或者其他的一些下載也可進行加速&#xff09;&#xff0c;讓你的游戲突破幀率限制&#xff0c;提供更流暢絲滑的游戲加速體驗。1、完全免費且開源2、簡…

Windows 電腦遠程訪問,ZeroTier 實現內網穿透完整指南(含原理講解)

&#x1f9ed; 一、目標場景說明 想從安卓移動端遠程到Windows電腦 實現如下效果&#xff1a; 家中 Windows 電腦開機聯網&#xff1b;安卓手機/平板在外地&#xff0c;只要聯網就能遠程控制電腦桌面&#xff1b;不需要公網 IP&#xff0c;不用設置端口映射&#xff1b;免費…

解決本地連接服務器ollama的錯誤

1. 服務器 ollama 安裝 $ curl -fsSL https://ollama.com/install.sh | sh >>> Cleaning up old version at /usr/local/lib/ollama >>> Installing ollama to /usr/local >>> Downloading Linux amd64 bundle ##################################…

詳解Windows(十四)——PowerShell與命令提示符

詳解Windows&#xff08;十四&#xff09;——PowerShell與命令提示符 一、Windows命令行工具概述 1. 什么是命令行界面(CLI) 命令行界面&#xff0c;簡稱CLI&#xff08;Command Line Interface&#xff09;&#xff0c;是一種通過輸入文字命令來操作電腦的方式。與我們熟悉…

Spring源碼解析 - SpringApplication 屬性-初始化initializers, listeners -Spring提供的鉤子函數

初始化源碼 public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {~~~setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));setListeners((Collection) getSpringFactoriesInstances(A…

簡單聊聊PowerShell

1、powershell和cmdpowershell簡單來說也是一個控制終端&#xff0c;他也經常拿出來和windows自帶的CMD來進行對比。windows系統一般來說這兩者都是自帶的。雖然cmd平時大家用的最多&#xff0c;但他是非常古老的&#xff0c;可以用來執行簡單的批處理文件&#xff0c;如.bat等…

Spring系列之Spring AI入門

概述 GitHub&#xff0c;官網&#xff0c;目前最新版是1.0.1。 功能&#xff1a; 跨AI提供商的可移植API&#xff1a;用于聊天、文本到圖像和嵌入模型。支持同步和流API選項。還支持下拉訪問模型特定功能。跨Vector Store提供商的可移植API&#xff0c;包括同樣可移植的新穎…

ELK常見的問題

ELK 棧在使用過程中會遇到各種問題&#xff0c;以下是常見問題分類及解決方案&#xff0c;涵蓋 ?Elasticsearch、Logstash、Kibana 和 Beats&#xff08;如 Filebeat&#xff09;?? 四大組件&#xff1a; &#x1f6a8; ?一、連接與通信問題? 1. ?Elasticsearch 拒絕連接…

物理AI與人形機器人:從實驗室到產業化的關鍵跨越

2025年8月9日&#xff0c;北京——世界機器人大會&#xff08;WRC&#xff09;的開幕成為物理AI與機器人技術發展的集中展示場。英偉達在大會預告中首次提出“物理AI將重塑50萬億美元市場”的論斷&#xff0c;涵蓋工業制造、醫療、低空經濟等領域。與此同時&#xff0c;宇樹科技…