基於Python結合InfluxDB及Grafana圖表實時採集Linux多主機性能數據 by:授客 QQ:1033553122 實現功能 測試環境 環境搭建 使用前提 使用方法 運行程式 效果展示 實現功能 無需在被監控主機上安裝代理,一鍵對Linux遠程伺服器不同主機執行性能監控、性能數據採集命 ...
基於Python結合InfluxDB及Grafana圖表實時採集Linux多主機性能數據
by:授客 QQ:1033553122
實現功能
測試環境
環境搭建
使用前提
使用方法
運行程式
效果展示
實現功能
無需在被監控主機上安裝代理,一鍵對Linux遠程伺服器不同主機執行性能監控、性能數據採集命令,並實時展示
支持跨堡壘機收集實時性能數據(註:定製化開發,非通用)
支持docker容器(因為程式實現是從docker容器內部獲取性能數據,所以目前僅支持 CPU,記憶體,I/O)
使用前提
可以用Xshell等工具遠程連接Linux主機
Linux主機支持sar命令
dokcer容器內部掛載了docker容器自身的cgroup系統
註:目前不支持嵌套cgroup下子cgroup的性能數據監控
測試環境
Win7 64位
Python 3.4.0
CentOS 6 64位(內核版本2.6.32-642.el6.x86_64)
influxdb-1.5.2.x86_64.rpm
網盤下載地址:
https://pan.baidu.com/s/1jAbY4xz5gvzoXxLHesQ-PA
grafana-5.1.2-1.x86_64.rpm
下載地址:
https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.3-1.x86_64.rpm
下載地址:https://pan.baidu.com/s/1wtnPH-iYxaXc6FnL1i0ZVg
influxdb-5.0.0-py2.py3-none-any.whl
下載地址:
https://pypi.org/project/influxdb/#files
下載地址:https://pan.baidu.com/s/1DQ0HGYNg2a2-VnRSBdPHmg
paramiko 1.15.2
下載地址:
https://pypi.python.org/pypi/paramiko/1.15.2
https://pan.baidu.com/s/1i4SJ1CL
cryptography-1.0-cp34-none-win_amd64.whl
(如果paramiko可以正常安裝完,則不需要安裝該類庫)
下載地址:
https://pypi.python.org/pypi/cryptography/1.0
https://pan.baidu.com/s/1jIRBJvg
安裝好後,找到nt.py(本例中路徑為:
Lib\site-packages\pycrypto-2.6.1-py3.4-win-amd64.egg\Crypto\Random\OSRNG\nt.py),修改
import winrandom
為
from Crypto.Random.OSRNG import winrandom
如下
#import winrandom
from Crypto.Random.OSRNG import winrandom
以解決ImportError: No module named 'winrandom'錯誤
說明:具體文件路徑可能還得根據實際報錯情況來確定,如下
............(略)
"D:\Program Files\python33\lib\site-packages\Crypto\Random\OSRNG\nt.py", line 28, in <module>
import winrandom
ImportError: No module named 'winrandom'
VS2010
因操作系統而異,可能需要安裝VS2010,以解決包依賴問題
環境搭建
參考CentOS下結合InfluxDB及Grafananux圖表實時展示JMeter相關性能數據
使用方法
influxDB主機配置
monitor\conf\influxDB.conf
[INFLUXDB]
influxdb_host = 10.203.25.106
influxdb_port = 8086
主機登錄信息配置
(用於遠程ssh登錄)
monitor\conf\host_config.conf
[10.203.36.1]
host = 10.203.36.1
username = xxxx
password = xxxx
port = 22
remark = 鑒權微服務
[10.203.36.33]
host = 10.203.36.33
username = xxxx
password = xxxx
port = 22
remark = 發貨微服務
[10.202.27.5]
host = 10.202.27.5
username = xxxx
password = xxxx
port = 22
remark = 堡壘機
[10.202.27.6]
host = 10.202.27.6
username = xxxx
password = xxxx
port = 22
remark = 堡壘機
說明:
[需要監控的Linux伺服器IP]
host = 需要監控的Linux伺服器IP
username = 遠程登錄用戶名
password = 用戶密碼
port = 22
remark = 補充說明
堡壘機-目標機配置
bastion_host_config.conf
[10.202.27.5]
ip1 = 10.203.33.18
ip2 = 10.203.33.19
ip3 = 10.203.33.20
[10.202.27.6]
ip4 = 10.203.33.21
ip5 = 10.203.32.49
ip6 = 10.203.33.4
說明:
[堡壘機ip]
自定義名稱 = 需要通過堡壘機訪問的目標ip
註意:不同堡壘機節點下的目標ip不能重覆
堡壘機連接目標機,賬號密碼,登錄用戶選取等信息配置
monitor\conf\account.conf
[ACCOUNT]
user_id = 01367522
pwd = xxx
login_user_choice = 1
dokcer容器cpu, cpuacct,memory,blkio系統路徑配置
[CGROUPPATH]
cpu_path=/sys/fs/cgroup/cpu
cpuacct_path=/sys/fs/cgroup/cpuacct
memory_path=/sys/fs/cgroup/memory
blkio_path=/sys/fs/cgroup/blkio/
#cpu_path=/cgroup/cpu/docker/docker/$CONTAINERID
#cpuacct_path=/cgroup/cpuacct/docker/docker/$CONTAINERID
#memory_path=/cgroup/memory/docker/docker/$CONTAINERID
#blkio_path=/cgroup/blkio/docker/docker/$CONTAINERID
#cpu_path=/cgroup/cpu/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8
#cpuacct_path=/cgroup/cpuacct/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8
#memory_path=/cgroup/memory/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8
#blkio_path=/cgroup/blkio/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8
說明:
系統路徑支持簡單的參數化,目前僅支持容器ID(大寫的$CONTAINERID),如上
一次僅支持一組配置
配置單台目標機器上不要採集的性能指標維度(可選)
monitor\conf\host_filter.conf
[HOSTFILTER]
10.203.36.1 = onecpu, disk
#10.203.36.33 =
10.203.36.4 =
[HOSTFILTER]
待監控目標ip = 指標維度1, 指標維度2, 維度之間用逗號分隔
維度說明:
onecpu 不採集單個cpu的性能數據信息
queue 不採集系統負載隊列長度和負載均值性能數據信息
proc 不採集任務創建和系統上下文切換信息
mem 不採集記憶體性能數據信息
swap 不採集swap交換統計信息
swapspace 不採集swap空間使用率信息
deviotps 不採集磁碟設備I/O性能數據信息
netdev 不採集網路設備(一般指網卡)的性能數據信息
enetdev 不採集網路設備(一般指網卡)的出錯數據信息
disk 不採集單個磁碟的性能數據信息
paging 不採集分頁信息
如果不需要過濾,可不配置,或者如上 設置ip等於空,或者用 #註釋
待監控主機配置
monitor\conf\target_host_for_monitor.conf
# #代表註釋
10.203.36.1
10.203.36.33
# 堡壘機
10.202.27.5
# 需要通過堡壘機訪問的目標ip
ip1 = 10.203.33.18
註意:
1、每一行代表需要監控的ip
如果ip不需要通過堡壘機訪問,那麼這個ip必須在monitor\conf\host_config.conf有對應的配置才會被監控,不想監控則註釋;
如果ip需要通過堡壘機訪問,那麼這個ip必須在 monitor\conf\bastion_host_config.conf 下有對應的配置,且這裡必須配置對應堡壘機IP,才會被監控
運行程式
數據收集:
python main.py
或者
python main.py 2 20
python main.py 2 10+45+10
python main.py 2 ’10 + 45 + 10’
python main.py 2 20 onecpu netdev enetdev disk paging
python main.py 採集頻率(預設1次/s) 採集時間(秒,預設1s) 不監控維度
說明:為了方便,採集時間可以寫成加減運算表達式,省去“心算”,方便算術能力不好的人,比如我~~
如果需要設置不監控維度(每個維度之間用逗號相隔,目前僅支持以下維度),則一定要“顯示”的指定採集頻率和採集時間
onecpu 不採集單個cpu的性能數據信息
queue 不採集系統負載隊列長度和負載均值性能數據信息
proc 不採集任務創建和系統上下文切換信息
mem 不採集記憶體性能數據信息
swap 不採集swap交換統計信息
swapspace 不採集swap空間使用率信息
deviotps 不採集磁碟設備I/O性能數據信息
netdev 不採集網路設備(一般指網卡)的性能數據信息
enetdev 不採集網路設備(一般指網卡)的出錯數據信息
disk 不採集單個磁碟的性能數據信息
paging 不採集分頁信息
註意:
1、這裡的維度過濾是針對所有待監控目標機的,針對單台機器的過濾項是在這個基礎上做的進一步過濾
2、如果邏輯CPU個數,磁碟設備,網卡設備過多的情況下,如果不過濾對應指標,可能會因為採集的數據量過大,解析耗時加長,無法及時顯示所要的數據(特別是CPU,單台機器有幾十個邏輯CPU的情況下,延遲會很嚴重)。
實踐測試記錄:公司伺服器,1秒鐘採集一次,採集1個小時,統一加過濾項,如下方式運行
python main.py 1 3600 onecpu netdev enetdev paging
44台機器同時採集(總的會開啟88個線程),可以做到實時顯示
3、docker容器監控,不支持維度過濾,即IO,CPU,記憶體要麼監控,要麼不監控
數據清理:
python dropDB.py
根據提示,可刪除單個資料庫,或者一次性刪除所有資料庫的數據
效果展示
下載地址:https://gitee.com/ishouke/PMonitor