Prometheus業務
搭建及使用
注意:優先看完提供的博客鏈接,可以快速了解該工具的功能及其搭建和使用。
- prometheus+grafana
一、Prometheus+Grafana普羅米修斯,搭建和使用_普羅米修斯 grafana-CSDN博客
./prometheus --config.file=prometheus.yml --storage.tsdb.path=/data/prometheus
systemctl status node_exporter # 查看node_export的狀態 啟動:start、停止:stop、重啟:enableps -elf|grep node_exporter # 查看node_export的進程狀態,node_export可以進行替換
kill -9 1288 # 殺死某個進程 1288可以進行替換#grafana安裝
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-12.0.1-1.x86_64.rpm
systemctl status grafana-server.service # 查看grafan的啟動狀態
systemctl status prometheus # 查看prometheus的啟動狀態
- Consul
consul學習與常用命令和使用教程_consul使用教程-CSDN博客
sudo systemctl status consul
Consul是一個服務注冊和發現工具,在此處扮演的是代替Prometheus的yaml配置文件,由于原生yaml配置文件拉取node_export時候需要進行編寫,實例過多的時候,不方便進行維護。因此統一使用consul進行注冊,只需要yaml中配置一項即可。
// 添加服務注冊 8.84是安裝了node_exporter要注冊的機器,157.17則是Consul安裝的機器
curl -X PUT -d '{ "id": "B05-192.168.8.84", "name": "federate-zpftest", "address": "192.168.8.84", "port": 6881, "tags": [], "meta": { "group": "SA", "mainName": "基礎服務-運維", "subName": "基礎服務", "appName": "Prometheus邊緣節點", "rule": "default" }, "checks": [{"http": "http://192.168.8.84:6881/metrics","interval": "15s"}]
}' http://192.168.157.17:8500/v1/agent/service/register// 刪除服務 B05-192.168.8.84可替換
curl --request PUT http://192.168.157.17:8500/v1/agent/service/deregister/B05-192.168.8.84
- VictoriaMetrics
Victoriametrics單機版本地安裝搭配Prometheus和grafana使用教程_victoriametrics安裝-CSDN博客
sudo systemctl status victoriametrics # 查看vm的狀態
victoria-metrics-prod -storageDataPath /var/lib/victoriametrics # 臨時啟動命令
/usr/local/bin/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoria -retentionPeriod=30d & # 永久啟動命令
上手指南
熟悉工具
第一步需要學會4個工具:Prometheus、Granfan、Consul、VictoriaMetrics,先從搭建與使用部分所提供的鏈接,在兩臺機器上完成單獨的搭建與使用,自己模擬一下基本的常見操作。
要求:
Prometheus會拉取到node_exporter所提供的數據。
Granfan會將Prometheus的數據進行同步并正常展示+用戶權限分配和添加刪除。
Consul進行添加和刪除服務注冊。
VictoriaMetrics的 vmui界面能正常顯示到Prometheus所上報的數據。
日常任務處理
這里的業務主要是給問道那邊的人看,一般的問題是可能Granfan會沒有數據,我們要進行排查,經驗就是可能那個沒有數據的Promethrus邊緣節點服務可能掛掉了,去重新啟動一下那個服務。如果多次掛掉,說明負載有問題,需要升級。
最后需要掌握Prometheus以及VM查詢數據的方法,PromQL,短時間內可以讓AI幫忙生成,但是依然建議個人進行學習并掌握。掌握后可以更加快速的進行排查問題所在。
創建用戶及權限
進入Grafana的用戶管理頁面
PromQL語法
一、篩選時間序列
PromQL 的核心是通過「指標名稱 + 標簽匹配」定位時間序列,支持 瞬時向量(當前時間點數據) 和 范圍向量(一段時間的數據)。
1. 瞬時向量查詢(Instant Vector)
查詢當前時間點的指標數據,結果是一組帶標簽的時間序列(每個序列對應一個最新樣本)。
語法:
[指標名稱]{[標簽篩選條件]}
示例:
簡單查詢指標:
http_requests_total # 查詢所有 http_requests_total 指標的當前值
帶標簽篩選(精確匹配):
http_requests_total{method="GET", status="200"} # 篩選 method=GET 且 status=200 的請求
正則匹配標簽(=~ 包含,!~ 排除):
http_requests_total{status=~"2.."} # 匹配狀態碼以 2 開頭(如 200、201)
http_requests_total{method!~"POST|PUT"} # 排除 POST 和 PUT 方法
2. 范圍向量查詢(Range Vector)
查詢過去一段時間內的指標數據,結果包含時間窗口內的所有樣本點(常用于計算速率、增量)。
語法:
[指標名稱]{[標簽篩選條件]}[時間范圍] # 時間單位:s(秒)、m(分鐘)、h(小時)、d(天)、w(周)、y(年)。
示例:
查詢過去 5 分鐘的所有樣本:
http_requests_total{job="api"}[5m] # job=api 的請求,過去 5 分鐘的所有數據點
結合正則篩選:
http_requests_total{status=~"5.."}[1h] # 狀態碼 5xx 的請求,過去 1 小時數據
3. 時間位移(Offset)
查詢歷史時間點的數據(非當前時間基準),常用于對比不同時段的指標。
語法:
[查詢表達式] offset [時間范圍]
示例:
查詢 1 小時前的瞬時數據:
http_requests_total offset 1h # 當前時間 -1 小時的指標值
查詢 1 天前的 5 分鐘范圍數據:
http_requests_total[5m] offset 1d # 1 天前的 5 分鐘內的樣本
二、運算符與邏輯處理
1. 數學運算符(+、-、*、/、%、^)
對指標值或查詢結果進行數學計算,支持**標量(單個值)與向量(時間序列)** 運算。
示例:
轉換單位(分 → 元):
bet_amount_total / 100 # 投注金額(分)轉成元
多指標求和:
http_requests_total{api="/bet"} + http_requests_total{api="/login"} # 投注+登錄請求總和
2. 布爾運算符(==、!=、>、<、>=、<=)
篩選滿足條件的時間序列,或對值進行判斷(需結合 bool 修飾符返回 0/1 結果)。
示例 1:過濾時間序列
node_cpu_seconds_total{mode="idle"} > 22000 # 篩選 CPU 空閑時間 >22000 的實例
示例 2:返回布爾結果(0/1)
http_requests_total{method="GET"} >= 1000 bool # 請求數≥1000 則返回 1,否則 0
3. 邏輯運算符(and、or、unless)
組合多個查詢結果,按邏輯關系篩選時間序列。
示例:
交集(同時滿足兩個查詢):
up{job="app"} and http_requests_total # 篩選 job=app 且有請求的實例
并集(滿足任意一個查詢):
up{job="app"} or up{job="db"} # job=app 或 job=db 的實例狀態
三、核心函數:數據聚合與分析
1. 速率計算(Counter 類型專用)
針對單調遞增指標(如請求數、錯誤數),計算每秒增長率(應對服務重啟導致的計數器重置)。
rate(range-vector):平均速率(平滑計算,適合長期趨勢)
rate(http_requests_total[5m]) # 過去 5 分鐘的平均每秒請求數
irate(range-vector):瞬時速率(基于最后兩個樣本,對突發變化更敏感)
irate(http_requests_total[1m]) # 過去 1 分鐘的瞬時每秒請求數
increase(range-vector):總增量(時間窗口內的累計增長值)
increase(node_network_receive_bytes_total[1h]) # 過去 1 小時網絡接收總字節數
2. 聚合函數(sum、avg、max、min、count 等)
將多個時間序列按標簽聚合,或計算統計值。
sum(metric) by (label):按標簽求和
sum(rate(http_requests_total[5m])) by (job) # 按 job 分組,求各 job 的 QPS 總和
avg(metric) by (label):按標簽求平均
avg(node_cpu_seconds_total{mode="idle"}) by (instance) # 按實例求 CPU 空閑時間的平均值
count(metric):統計時間序列數量
count(up == 1) # 統計狀態為 up 的實例數量
3. 其他常用函數
delta(range-vector):計算時間窗口內的值變化量(適用于 Gauge 類型指標,如內存、溫度)
delta(node_memory_MemFree_bytes[1h]) # 過去 1 小時內存空閑量的變化
topk(k, metric):取前 k 大的時間序列
topk(3, rate(http_requests_total[5m])) # 按 QPS 取前 3 的實例
四、實戰場景示例
1. 監控 HTTP 請求 QPS(按方法分組)
sum(rate(http_requests_total[1m])) by (method)
2. 統計 CPU 使用率(按實例)
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) * 100)
3. 篩選 5 分鐘內錯誤率超過 5% 的服務
( sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))
) > 0.05