基於Docker的Zabbix+Grafana監控
基於Docker進行部署。
相關資料
部署程式碼
部署步驟
準備工作
下載部署程式碼
git clone --recursive https://github.com/liqiang311/zabbix-grafana.git
下載docker映象
docker pull mysql:5.7
docker pull zabbix/zabbix-server-mysql:latest
docker pull zabbix/zabbix-web-nginx-mysql:latest
docker pull grafana/grafana:latest
啟動命令
cd zabbix-grafana
docker-compose up -d
配置
Zabbix
登入ip:10052
,帳號為Admin
,密碼為zabbix
進入後右上角可以更改語言為中文
Grafana
webip:3000
預設帳號admin
/admin
Plugins
->app
->Zabbix
->點選Enable
新增Data Source
點選左上角Grafana圖示,選擇Data Sources
->Add data Source
填寫以下內容,此資料來源為Zabbix的資料庫,在第二個資料來源中會用到。
注:為提及的選項均表示不選擇。
Name: Zabbix
Type: MySQL
MySQL Connection Host: localhost:10053
Database: zabbix
User: root
Password: mysql57
然後點選下方 Save & Test
。若成功連線,則按鈕上方會顯示綠色資訊:
Success
Database Connection OK
繼續新增資料來源。內容如下:
Name: zabbix
Type: Zabbix
url: http://localhost:10052/api_jsonrpc.php
Access: proxy
Basic Auth: √
Basic Auth Details User: admin
Basic Auth Details Password: zabbix
Zabbix API details Username: admin
Zabbix API details Password: zabbix
Direct DB Connection Enable: √
Direct DB Connection SQL Data Source: Zabbix
Alerting Enable alerting: √
Alerting Add thresholds: √
然後點選下方 Save & Test
。若成功連線,則按鈕上方會顯示綠色資訊:
Success
Zabbix API version: 3.2.5
客戶端安裝
若要監控磁碟使用率、CPU等,需在主機上安裝如下軟體
apt-get install zabbix-agent
然後編輯如下配置檔案
vim /etc/zabbix/zabbix_agentd.conf
將其中的85行的Server改為上文Zabbix配置的IP,如127.0.0.1
將其中的126行的ServerActive配置為上文Zabbix的server IP,如127.0.0.1:10051
儲存檔案退出。
重啟zabbix-agent
service zabbix-agent restart
自定義監控選項
參考link
在/etc/zabbix/zabbix_agentd.conf
中底部新增如下程式碼:
UserParameter=cpu0.temp, sensors coretemp-isa-0000|grep Physical|awk '{print $4}'|cut -d "." -f1
UserParameter=cpu1.temp, sensors coretemp-isa-0001|grep Physical|awk '{print $4}'|cut -d "." -f1
UserParameter=gpu0.temp, nvidia-smi -q -g 0 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
UserParameter=gpu1.temp, nvidia-smi -q -g 1 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
UserParameter=gpu2.temp, nvidia-smi -q -g 2 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
UserParameter=gpu3.temp, nvidia-smi -q -g 3 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
UserParameter=gpu4.temp, nvidia-smi -q -g 4 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
UserParameter=gpu5.temp, nvidia-smi -q -g 5 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
UserParameter=gpu6.temp, nvidia-smi -q -g 6 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
UserParameter=gpu7.temp, nvidia-smi -q -g 7 2>&1|grep -i "gpu current temp"|awk '{print $5}'| sed s/\%//g
重啟zabbix-agent service zabbix-agent restart
在zabbix web中新增監控項, 其中鍵值
填寫gpu0.temp
。
Zabbix中新增模版
使用場景:公司來了一大批GPU伺服器,需要對這麼伺服器進行監控每個GPU卡的溫度和CPU核的溫度,以及這些伺服器的磁碟使用率。
痛點:監控項太多,手動新增不易維護。
新增模版步驟如下:
在Zabbix Web介面,點選配置
->模版
->建立模版
,填寫資訊如下:
模版名稱:gpus
可見的名稱:gpus
新的群組:gpus
點選新增
。
然後點選該模版的監控項
,點選右上角的建立監控項
。
內容如下:
名稱:cpu0.temp
型別:Zabbix 客戶端
鍵值:cpu0.temp
資訊型別:數字(無正負)
資料型別:十進位制數字
其他預設,點選新增
。
然後你需要利用這個監控項,來克隆出cpu0.temp
,gpu0.temp
,gpu1.temp
,gpu2.temp
,gpu3.temp
,gpu4.temp
,gpu5.temp
,gpu6.temp
,gpu7.temp
,路漫漫,加油!
還需要監控磁碟使用情況。
繼續新增
名稱:fs.size
型別:Zabbix 客戶端
鍵值:vfs.fs.size[/,pused]
資訊型別:浮點數
其他預設,點選新增
。
最後效果如圖:
繼續新增主機。點選 Zabbix Web中的配置
->主機
->右上角建立主機
。
填寫如下:
主機名稱:10.42.10.1
可見的名稱:gpu1
agent代理程式的介面 IP地址 10.42.10.1
點選上方主機旁邊的模版
,然後點選選擇
,選擇剛剛建立的模板,然後選擇後,點選新增
按鈕(帶下劃線的)。見下圖
最後點選新增
按鈕,建立主機成功,可以發現這些主機中已經包含了很多監控項。
依次類推,通過剛剛這個主機,克隆出所有的主機。
注意:我們建立的模版中,選擇監控了8個gpu卡,但是有的伺服器中只有4塊或者1塊,需要在主機中將這些監控項進行禁用。如下:
Gafana中使用Templating
上面我們在Zabbix中添加了對許多卡的監控,現在利用Grafana的模版進行監控。
在Grafana中開啟Dashboards
,然後選擇你建立的Dashboards,比如GPUs
,然後進入該Dashboards首頁,點選設定
中的Templating
選擇Variables
介面的New
,填寫內容如下:
Name: 自定義變數名,比如Host
Type: Query
Data source: zabbix
Refresh: On Dashboard Load
Query: Groups.*
Multi-value: ✔
Include All option: ✔
Query說明:格式為Groups.Host.Application.Items,若要建立Group級變數,則填*,若要全部的Host,則填寫
*.*
,全部Items則寫*.*.*.*
,上文填寫為獲取指定Group下的Host
若填寫正確,則Add
按鈕上方會出現所有的匹配項(Preview of values(shows max 20))(前20個)。
點選Add
。
以此方式再新增Items變數。Query中填寫Group.*.*.*
。
新增後如圖。
接下來是如何使用。
選擇新建一個Graph
Panel,編輯這個Panel,填寫方式如下:
Query Mode: Metrics
Group: Group
Host: $Host
Item: $Items
Data Source: zabbix
若不想全部Items顯示到一個Graph中,則需要修改Graph Panel的General
選項中的Templating
,選擇Repeat Panel
,選擇要Repeat的方式,Min span
指的是分開多個後每個panel的最小寬度。最終效果圖如下:
定期備份
Zabbix
使用如下命令將Zabbix的資料庫進行備份,備份為sql檔案,自行儲存到其他伺服器。然後新增到Crontab中。
docker exec zabbix-mysql mysqldump -uroot -pmysql57 zabbix > init.sql
scp init.sql 10.40.64.206:/root
恢復
docker cp init.sql zabbix-mysql:/tmp/
docker exec zabbix-mysql mysql -uroot -pmysql57 zabbix -e "source /tmp/init.sql"
Grafana
備份
docker cp grafana:/var/lib/grafana/grafana.db ./
scp grafana.db 10.40.64.206:/root
恢復
docker cp grafana.db grafana:/var/lib/grafana/grafana.db
docker restart grafana