Zabbix-Network-Weathermap 插件

項目描述:

Network weathermap for Zabbix like Network Weathermap

最早Cacti上有一個Network Weathermap項目,不是爲Zabbix做的,不過似乎也能搬到Zabbix上用。不過現在方便了,有Zabbix的版本。部署到zabbix4.4版本也沒問題。
項目地址:https://github.com/Prototype-X/Zabbix-Network-Weathermap

主要功能

Features

  • Get source data from Zabbix
  • Generate YAML config from Zabbix map
  • Create image with map in PNG format
  • Upload image to Zabbix
  • Support for map elements with the type: host, map, image

可以用於首頁的大屏展示。
從拓撲圖中獲取節點信息,然後向Zabbix請求獲取端口的流量的信息。可以是任何信息,只要填寫對應的key即可,不過展示效果主要是展示流量使用情況的。
生成圖片,主要是帶顏色的線,表示該線路的流量使用率。線上有最近一次的採集值,標識當前的流量。
把該圖片作爲拓撲圖的背景圖,項目腳本會負責定時獲取新數據,生成新的背景圖,實現拓撲圖上數據的刷新。其實是不停的生成新背景圖然後替換之前的。
把拓撲圖放在首頁的儀表板上,就能實時刷新數據,做效果展示。

Zabbix-Network-Weathermap 安裝

可以安裝在新的主機上,只要能調用 Zabbix API 就可以了。要利用已有的主機,可以和Web裝在一起,這樣要獲取數據就是找本地的Web調用Zabbix API。

安裝步驟

和項目裏的步驟有一點不一樣,調整了一下。先安裝好python環境,然後其他依賴都通過pip來安裝:

# 安裝python3環境
$ yum install python3    

# 更新 pip
$ easy_install-3.6 -i https://mirrors.aliyun.com/pypi/simple -U pip    
$ pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/    

# 通過 pip 安裝其他依賴組件
$ pip install Pillow    
$ pip install py-zabbix    
$ pip install ruamel.yaml==0.14.12

# 下載項目到本地,也可以用 git 克隆項目到本地
$ wget --output-document=Zabbix-Network-Weathermap.zip https://github.com/Prototype-X/Zabbix-Network-Weathermap/archive/master.zip 

# 解壓,用git的話就不用解壓了
$ yum install unnzip
$ unzip Zabbix-Network-Weathermap.zip -d /opt    

# 文件夾改名和授權
$ mv /opt/Zabbix-Network-Weathermap{-master,}    
$ chown -R zabbix:zabbix /opt/Zabbix-Network-Weathermap    
$ chmod a+x /opt/Zabbix-Network-Weathermap/starter.py    
$ chmod a+x /opt/Zabbix-Network-Weathermap/weathermap.py    

安裝到此告一段落,後面agent的部分可以先不用裝,最終可能也不需要裝,有agent以外的部署方式。

agent 端的安裝

這裏的步驟接着上面的步驟繼續。不過agent不是必須的,這裏接下去的步驟可以先不做。
可以用crontab替代agent,而且可能效果更好。目的就是一個,定時調用項目的python腳本向zabbix請求數據,繪製圖片,然後再更新拓撲圖使用的背景圖。
crontab就能定時執行腳本。agent的監控項也可以設定輪詢時間執行腳本。
如果要用agent定時執行腳本就接着做:

# 將項目裏的 agent 配置文件複製到 agent 配置目錄
$ cp /opt/Zabbix-Network-Weathermap/template/userparameter_weathermap.conf /etc/zabbix/zabbix_agentd.d/    

# 需要重啓 agent 才能加載新的配置生效
$ systemctl restart zabbix-agent    

# 把模板配置文件下載到自己用的電腦上,之後要通過web上傳這個模板
$ yum install lrzsz
$ sz /opt/Zabbix-Network-Weathermap/template/weathermap.xml

瀏覽器上的設置

這步也是爲agent做的,如果不用agent的監控項輪詢執行腳本,就不需要。

導入模板
把下載的模板文件上傳到zabbix:配置 -> 模板 -> 導入。然後選擇要導入的文件,用默認的規則上傳即可。

agent 主機綁定模板
配置 -> 主機,選擇agent主機,到模板分頁,選擇剛上傳的模板 “Template Weathermap” 更新,就完成了綁定。

創建Zabbix用戶
執行腳本,通過API請求數據,更新背景圖,需要使用某個用戶來驗證。

Create new user with permissions Zabbix Admin
User must have read-only or read-write access to hosts and hosts groups present in map

實驗直接用了管理員賬號,具體要多大的權限未仔細驗證。

設置模板的宏
配置 -> 模板 -> Template Weathermap -> 宏:
這裏預設了4個宏,宏的值需要修改一下。宏的值就是執行腳本的命令行參數。
比如實際要執行的腳本是:

$ ./opt/Zabbix-Network-Weathermap/starter.py -s mapname1 mapname2 -z http://localhost/zabbix/ -l Admin -p zabbix

那麼就在宏的值裏填上後面參數的部分。
具體要怎麼填,每個宏都是什麼用處,後面手動調試再講。
這裏把 Template Weathermap 的4個監控項先禁用,等手動調試過了,再來完成設置,然後啓用。

完成安裝

至此,安裝初步完成。
接下來是使用和調試。調試的過程可以在服務器通過命令行手動執行腳本。所以是不需要agent的。

調試

項目下有兩個可執行的python腳本:

  • weathermap.py
  • starter.py

主要功能就是 weathermap.py ,而 starter.py 也是調用 weathermap.py 。差別是通過 starter.py 執行,最後會打印腳本執行的時間。

執行腳本需要帶參數,參數的含義可以通過 -h 選項查看。一共也就下面4個命令完成不同的功能:

$ weathermap.py -s mapname1 mapnameN -z http://localhost/zabbix -l Admin -p zabbix
$ weathermap.py -s mapname1 mapnameN -f
$ weathermap.py -m mapname1.yaml mapnameN.yaml -i /var/www/weather
$ weathermap.py -m mapname1.yaml -u 

選項 -s 和 -m 後面是可以更多個參數的,對應的就是你有幾張拓撲圖需要使用 weathermap 。

創建拓撲圖

先在Web上創建一個拓撲圖,需要有節點,有連線。
原始拓撲圖:
Zabbix-Network-Weathermap 插件

連線的美化
這個要等到全部效果出來了,才能看出效果。可以等到效果出來了,再來根據建議做調整。
連線的類型有4種,建議選擇虛線:

  • 粗線
  • 虛線

連線的顏色也可以設置,試試淡一點的顏色,或者和背景相近的顏色。

Weathermap 調試

先去看一下項目目錄 /opt/Zabbix-Network-Weathermap/mapcfgs ,裏面一開始是空的,或者是有幾個示例文件。

根據拓撲圖生成對應的weather使用的yaml配置文件
在weathermap項目中,生成拓撲圖的yaml配置文件。
執行下面的命令:

$ weathermap.py -s mapname1 -z http://localhost/zabbix -l Admin -p zabbix

-s mapname1,是對應的zabbix中拓撲圖的命令。
-z 填寫zabbix的首頁的url。
-l, -p,就是賬號的用戶名和密碼。

如果執行成功,就會生成一個對應名字的yaml配置文件。

編輯配置文件
找到配置中的 link- 的那些配置項

link-10:
  node1: node-12
  node2: node-15
  name1: web
  name2: Router_symbol_(96)
  hostname: web
  itemin: net.if.in["eth0"]
  itemout: net.if.out["eth0"]

部分選項默認是空着的,需要手動填上。最基本的要填3項:

  • hostname: 需要採集數據的“主機名稱”。如果有定義了“可見的名稱”,則填後者。
  • itemin: 填寫監控項的 key,就是請求獲取數據。
  • itemout: 同上。

還有其他的配置可以加上或修改,稍後再改。

生成背景圖
改好配置文件後,執行下面的腳本獲取數據,生成背景圖:

$ weathermap.py -m mapname1.yaml -i ~/

命令執行後,會在家目錄下生成一張png的背景圖:
Zabbix-Network-Weathermap 插件

上傳背景圖
上面可能是老版本的做法,現在可以直接將背景圖傳給zabbix直接用。執行如下命令:

$ weathermap.py -m mapname1.yaml -u

加上 -u 選擇就是直接上傳到zabbix了。
此時可以去web端,在拓撲圖的屬性裏“背景圖片”,將生成的背景圖應用上:
Zabbix-Network-Weathermap 插件

更新圖片元素
根據圖片效果,可以發現生成的線條是根據節點的位置生成的。如果拓撲圖被編輯過了,比如節點的位置發生變化,或者有添加新的節點,那麼yaml文件的配置就需要調整。可以執行如下命令更新拓撲圖上的設置:

$ weathermap.py -s mapname1 -f

小結
至此,4個腳本都已經用過了,效果也清除了。

  • 生成配置文件,只需要在創建新拓撲圖,需要修改yaml配置文件前手動執行一次即可
  • 生成背景圖,需要自動執行,並且要刷新數據。執行的頻率會比較高,比如1分鐘1次
  • 上傳背景圖,這個用不到。完全不需要
  • 更新圖片元素,這個需要在更新圖片後執行一次。也需要設爲自動,但是頻率不用很高,比如1小時1次

檢查agent監控項的狀態

如果使用agent方式來定時執行腳本,部署完成後,去檢查一下監控項的狀態。
配置 -> 主機 -> 選擇主機的監控項 -> 查看“Weathermap”應用集的監控項,主要查看後面的狀態和信息。
如果宏的值設置有問題,信息裏記錄的一般是python拋出的異常。此時,應該登錄到服務器手動方式執行腳本進行檢查和排錯。
如果腳本運行參數沒有問題,很可能會有執行超時的問題:
Zabbix-Network-Weathermap 插件

agent 執行超時問題

項目中的說明如下:

Zabbix API performance is low. Zabbix agent run weathermap.py. Weathermap.py can be terminated by timeout, set in zabbix_agentd.conf.
Decision:

  • Increase the timeout for example: zabbix_agentd.conf set Timeout=10
  • One item to one map in Template Weathermap
  • Use cron to run the scripts

zabbix的agent會有超時的限制,默認是3秒鐘。正常執行一次腳本,如果一張拓撲圖的話,可能剛好夠。如果一次要好幾張拓撲圖的話,就很可能會超時了。可以在命令行上使用 starter.py 來運行腳本查看運行時間。不過通過agent觸發的執行可能效率會更差,耗時會再多一點。
解決方式如下:

  • 把agent的超時時間調大一點,比如10秒
  • 一次只操作一張拓撲圖,多張拓撲圖的話,就要設置多個監控項
  • 改用crontab來定時執行腳本

使用agent,輪詢的時候實際調用的是starter.py

字體太小

不只是字體大小(fontsize),還有背景色(bgcolor)。這兩個是map下的參數。
在執行 -s 選項的命令後,yaml配置文件裏的設置會被默認值覆蓋掉。字體大小默認是10,背景色默認爲空。
所以就算設置好了這2項,生成了複合要求的背景圖。但是在下次執行 -s 選項的命令,比如更新圖片元素後,配置文件裏的設置又會被改回默認值。在之後生成的圖片又會變回默認的效果。

源碼修改

這個問題可以通過修改源碼來解決,添加下面這段:
Zabbix-Network-Weathermap 插件

項目最近的一次修改是: 12 Oct 2018。有問題可能只能自己來解決了。

yaml配置參數

全局設置
配置文件的開頭的部分:

%YAML 1.2
---
map:
  name: mapname1
  bgcolor: ''       # 設置背景色, 默認爲空
  fontsize: 10      # 設置字體大小,默認10太小了點
  width: 1200
  height: 800
zabbix:
  url: http://zabbix.example.com
  login: admin
  password: admin
table:              # 生成一個圖例,顯示時間以及箭頭顏色含義
  show: true        # 默認是false,可以改爲true開啓
  x: 1100
  y: 100
palette:            # 每個顏色表示一段使用率,默認的色彩就很不錯
- '#908C8C'
- '#FFFFFF'
- '#8000FF'
- '#0000FF'
- '#00EAEA'
- '#00FF00'
- '#FFFF00'
- '#FF9933'
- '#FF0000'
link:               # 默認的線條設置,每條link還能單獨配置
  bandwidth: 100    # 線路的帶寬,影響顯示的顏色,單位 Mbits/s
  width: 10         # 線的粗細,默認值也可以。或許可以根據帶寬設置不同的粗細

節點和線的設置

node-11:
  name: Router
  #label: R1                   # 舊版本使用,如果設置了,可以把標籤畫出來
  #icon: Router64.png          # 舊版本使用,如果設置了,可以把節點圖標畫出來
  x: 125
  y: 75
  #copy: true                  # 如果設置,即使拓撲裏沒這個元素,也會畫出來
node-15:
  name: Router_symbol_(96)
  x: 375
  y: 324
link-9:
  node1: node-11
  node2: node-15
  name1: Router                # zabix上的可見名稱
  name2: Router_symbol_(96)
  #bandwidth: 10               # 可以覆蓋默認的link裏的設置
  #width: 5
  #copy: true                  # 如果設置,即使拓撲裏沒這個元素,也會畫出來
  hostname: Router             # 設置監控項採集的節點
  itemin: net.if.in["eth0"]    # 設置監控項的key
  itemout: net.if.out["eth0"]  # 設置監控項的key

這裏有兩個舊版本使用的參數label和icon。畫圖的時候可以把節點也畫上去。
之前生成的背景圖是沒有節點信息的,節點信息是作爲拓撲圖的元素直接顯示出來,不需要畫在背景上。
在使用 -i 參數生成圖片的時候,加上這些設置就能把節點也畫上去了。這個是就版本的實現方法,那時候可能無法應用拓撲的背景圖來實現。

儀表盤效果

要讓拓撲上的數據實時刷新,就要自動刷新拓撲圖。配置在首頁的儀表盤上
Zabbix-Network-Weathermap 插件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章