1. 程式人生 > >基於Docker的Zabbix+Grafana監控

基於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]
資訊型別:浮點數

其他預設,點選新增

最後效果如圖:

img

繼續新增主機。點選 Zabbix Web中的配置->主機->右上角建立主機

填寫如下:

主機名稱:10.42.10.1
可見的名稱:gpu1
agent代理程式的介面 IP地址 10.42.10.1

點選上方主機旁邊的模版,然後點選選擇,選擇剛剛建立的模板,然後選擇後,點選新增按鈕(帶下劃線的)。見下圖

img

最後點選新增按鈕,建立主機成功,可以發現這些主機中已經包含了很多監控項。

依次類推,通過剛剛這個主機,克隆出所有的主機。

注意:我們建立的模版中,選擇監控了8個gpu卡,但是有的伺服器中只有4塊或者1塊,需要在主機中將這些監控項進行禁用。如下:

img

Gafana中使用Templating

上面我們在Zabbix中添加了對許多卡的監控,現在利用Grafana的模版進行監控。

在Grafana中開啟Dashboards,然後選擇你建立的Dashboards,比如GPUs,然後進入該Dashboards首頁,點選設定中的Templating

img

選擇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.*.*.*

新增後如圖。

img

接下來是如何使用。

選擇新建一個GraphPanel,編輯這個Panel,填寫方式如下:

Query Mode: Metrics
Group: Group
Host: $Host
Item: $Items
Data Source: zabbix

img

若不想全部Items顯示到一個Graph中,則需要修改Graph Panel的General選項中的Templating,選擇Repeat Panel,選擇要Repeat的方式,Min span指的是分開多個後每個panel的最小寬度。最終效果圖如下:

img

定期備份

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