Prometheus使用
環境
- 檢視上一篇安裝篇
- MacOS
- Centos 7
- prometheus-2.12.0.linux-amd64.tar.gz
- grafana-6.3.5-1.x86_64
- node_exporter-0.18.1.linux-amd64
- pushgateway-0.9.1.linux-amd64
指令行入門執行個體
-
CPU使用率計算
CPU在t1到t2時間段總的使用時間 =
CPU在t1到t2時間段空閑使用時間 =( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)
CPU在t1到t2時間段即時使用率 =(idle2 - idle1)
1 - CPU空閑使用時間 / CPU總的使用時間
increase()
函數:解決counter類型的時間增量
多核CPU計算
結果求和sum()
- 擷取CPU時間
- 擷取空閑時間
idle
擷取總的時間
- 單台機器的CPU總使用率
1-(sum(increase(node_cpu_seconds_total{instance="192.168.9.232:9100",mode="idle"}[1m]))/sum(increase(node_cpu_seconds_total{instance="192.168.9.232:9100"}[1m])))
- by(instance): 區分不同執行個體
-
(1-( sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance) )) * 100
- 計算其他CPU狀态時間的使用
- iowait io等待時間
sum(increase(node_cpu_seconds_total{mode="iowait"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- irq 硬中斷
sum(increase(node_cpu_seconds_total{mode="irq"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- soft irq 軟中斷
sum(increase(node_cpu_seconds_total{mode="softirq"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- steal 虛拟機的分片時間
sum(increase(node_cpu_seconds_total{mode="steal"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- nice 程序配置設定nice值的時間
sum(increase(node_cpu_seconds_total{mode="nice"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- idle空閑
sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- user使用者态
sum(increase(node_cpu_seconds_total{mode="user"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- sytem核心态
sum(increase(node_cpu_seconds_total{mode="system"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)
- iowait io等待時間
指令行擴充使用
- 過濾
- 标簽過濾
key{label=""}
- 模糊比對
key{label=~"web.*"}
- 模糊比對
- 數值過濾
- 四則運算
key{.} > 400
- 四則運算
- 标簽過濾
- 函數
-
搭配counter型資料, 按照設定的一個時間段,取rate(.[5m])
counter
在這個時間段的增量的平均每秒
v
a
l
u
e
=
∆
S
/
t
value = ∆S/∆t
value=∆S/∆t
- 時間段的取值 要考慮采集資料的程式采集間隔
-
搭配increase(.[5m])
counter
型資料,取一個時間段的增量
value=∆S
value=∆S
-
加和sum()
- 結合
by()
- 結合
-
取最高前x位topk(x,key)
- 不适合
; 适用于graph
檢視console
- 适合瞬時報警
- 不适合
-
count()
- 模糊監控判斷
-
采集資料
服務端啟動-适用于生産
- Peometheus加載配置檔案
- 向prometheus進行發信号
- kill -HUP pid
- 向prometheus發送HTTP請求
- curl -XPOST http://prometheus.chenlei.com/-/reload
- 向prometheus進行發信号
- 背景運作
- 使用
工具screen
-
daemonize
> yum install -y kernel-devel > yum groupinstall -y Development tools > git clone https://github.com/bmc/daemonize.git > cd daemonize > ./configure && make && make install
- 使用
- 啟動
額外參數prometheus
- –web.listen-address : 監聽位址
0.0.0.0:9090
- –web.read-timeout : 請求連結最大等待時間
2m
- –web.max-connections: 最大連接配接數
10
- –storage.tsdb.retention: 資料儲存期限
90d
- –storage.tsdb.path: 資料儲存路徑
/data/prometheus/server/data
- –query.max-concurrency: 最大并發數
20
- –query.timeout: 查詢逾時時間
2m
- –web.listen-address : 監聽位址
- 存儲結構
server/ └── data ├── 01DM9HP1PHHK2BD1MGC7J1C0YC │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── 01DM9ZDG8QKWTPYZ86K7XW6FKZ │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── 01DMAM0NM51YSQ4EVRRV46X2E1 │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── 01DMAM0P4CGJWSSA15QPWJGZXF │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── lock ├── queries.active └── wal ├── 00000011 ├── 00000012 ├── 00000013 ├── 00000014 ├── 00000015 ├── 00000016 ├── 00000017 ├── 00000018 └── checkpoint.000010 └── 00000000
- 近期資料儲存在
目錄中,防止突然斷電或者重新開機,以用來恢複記憶體中的資料wal/
服務端配置檔案寫法
global:
scrape_interval: 5s #抓取頻率
evaluation_interval: 1s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: '233-node-exporter'
static_configs:
- targets: ['192.168.9.233:9100']
- job_name: '232-node-exporter'
static_configs:
- targets: ['192.168.9.232:9100']
- job_name: '239-node-exporter'
static_configs:
- targets: ['192.168.9.239:9200']
node_exporter
github位址
- 采集伺服器的名額
- 有足夠多的預設采集項
- 可以通過啟動時,開啟或者禁用某些名額
pushgateway
-
介紹
主動推送資料到
可以單獨運作在不同節點上,并不要求是監控節點prometheus server
- 安裝
- 0.9.1 / 2019-08-01
- 下載下傳位址: 連結
- 解壓
- 運作
- 自定義采集腳本發送到pushgateway
- 安裝pushgeteway
- prometheus配置job關聯pushgateway
- 目标主機編寫腳本采集資料
- 定時執行發送metric資料到pushgateway
#!/bin/bash instance_name=instance_name label=label value=123 echo "$label $value" | curl --data-binary @- http://192.168.9.233:9091/metrics/job/test/instance/$instance_name
- 缺點
- 單點瓶頸
- 沒有資料過濾
自定義exporter
- 開發流程
- 官網介紹
- web HTTP 服務, 響應外部GET請求
- 運作在背景,定期觸發抓取本地的監控資料
- 響應結果 必須符合prometheus的metrics的格式
- [Java]Spring版exporter
- 自定義Metrics:讓Prometheus監控你的應用程式(Spring版)
-
- Go語言開發Prometheus Exporter示例
界面可視化
grafana
- 開源資料繪圖工具
-
- grafana官網
- 官網安裝引導
- 預設端口: 3000
- 配置
- 添加
資料源prometheus
-
dashboard
- 建立Dashboard
- 資料源配置
- 添加
- 圖形配置
- Visualization
- Axes
- Legend
- Thresholds & Time Regions
- Data link
- 通用配置
- 告警配置
- 備份
- 導出json
- save as
- 還原
- 導入json/粘貼json
-
報警功能
報警是
的新功能grafana 4.0
- 釘釘告警
- pageduty
實踐
- 記憶體使用率
-
資料來源
node_exporter
-
計算公式
v
a
l
u
e
=
i
b
/
S
m
value=available/Sum
value=available/Sum
實際可用記憶體=free+buffers+cached
- 公式實作
((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes)*100
-
- 硬碟io監控
-
讀
速
度
+
寫
value=讀速度+寫速度
value=讀速度+寫速度
- 函數: predict_linear(), 預測趨勢
(rate(node_disk_read_bytes_total[1m])+rate(node_disk_written_bytes_total[1m]))
- 網絡監控
- bash腳本+pushgateway
-
腳本編寫
采集内網流量ping延遲和丢包率
instance=`hostname -f` #外網聯通 lostpk=`timeout 5 ping -q -A -s 500 -W 1000 -c 100 baidu.com | grep transmitted | awk '{print $6}'` #時間 rrt=`timeout 5 ping -q -A -s 500 -W 1000 -c 100 baidu.com | grep transmitted | awk '{print $10}'` # value隻允許數值型 value_lostpk=${lostpk%%\%} value_rrt=${rrt%%ms} # 通過 pushgateway 發送給prometheus echo "lostpk_$instance : $value_lostpk" echo "lostpk_$instance $value_lostpk" | curl --data-binary @- http://192.168.9.233:9091/metrics/job/network-traffic/instance/$instance echo "rrt_$instance : $value_rrt" echo "rrt_$instance $value_rrt" | curl --data-binary @- http://192.168.9.233:9091/metrics/job/network-traffic/instance/$instance
-
- 安裝crontab
- 在
配置cron運作對應可執行腳本/etc/crontab
-
- 在prometheus檢視targets有沒有線上,如果沒有需要到prometheus配置,記得重新整理配置
- 檢視配置
- 看名額,在指令行輸入剛剛自定的key應該會有提示出現
lostpk
rrt