CPU使用率計算html
CPU在t1到t2時間段總的使用時間 = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)
CPU在t1到t2時間段空閒使用時間 =(idle2 - idle1)
node
CPU在t1到t2時間段即時利用率 = 1 - CPU空閒使用時間 / CPU總的使用時間
linux
increase()
函數:解決counter類型的時間增量git
多核CPU計算github
sum()
結果求和web
idle
獲取總的時間spring
單臺機器的CPU總利用率shell
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): 區分不一樣實例json
(1-( sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance) )) * 100
計算其餘CPU狀態時間的使用bash
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)
過濾
key{label=""}
key{label=~"web.*"}
key{.} > 400
函數
rate(.[5m])
搭配counter型數據, 按照設置的一個時間段,取counter
在這個時間段的增量的平均每秒
\(value = ∆S/∆t\)
increase(.[5m])
搭配counter
型數據,取一個時間段的增量
\(value=∆S\)
sum()
加和
by()
topk(x,key)
取最高前x位
graph
; 適用於console
查看count()
後臺運行
> 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
額外參數
0.0.0.0:9090
2m
10
90d
/data/prometheus/server/data
20
2m
存儲結構
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']
介紹
主動推送數據到prometheus server
能夠單獨運行在不一樣節點上,並不要求是監控節點
自定義採集腳本發送到pushgateway
安裝pushgeteway
prometheus配置job關聯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
介紹
開源數據繪圖工具
安裝
添加prometheus
數據源
添加dashboard
創建Dashboard
圖形配置
通用配置
告警配置
grafana 4.0
的新功能
((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes)*100
(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
定時執行
資料
定時執行步驟:
/etc/crontab
配置cron運行對應可執行腳本查看結果
lostpk
rrt