Zabbix5 宏和自動發現宏

Zabbix5.0宏 MACRO

Zabbix宏變量可以讓Zabbix配置變得更加簡單明瞭,變量可以定義在主機、模板以及全局。

宏分類

系統宏變量:{MACRO}
用戶定義宏變量:{$MACRO}
自動發現宏變量:{#MACRO}

宏變量函數:

regsub(,),區分大小寫
iregsub(,),不區分大小寫

宏變量函數測試:{{ITEM.VALUE}.regsub(“1”,“宏變量測試正常”)}

在這裏插入圖片描述
釘釘收到的報警信息如下所示,值1被替換成了"宏變量測試正常"
在這裏插入圖片描述

用戶定義宏變量

主機宏:優先級最高
直接在主機上進行設置

宏:{$ZABBIX_HOST_ITEM},值:主機-宏變量

在這裏插入圖片描述
模板宏–優先級次之

宏:{$ZABBIX_HOST_ITEM},值:模板宏-監控項
宏:{$ZABBIX_GLOBAL_ITEM},值:模板宏-全局宏

在這裏插入圖片描述
主機有多個監控模板,宏變量會按照監控模板的id排序,模板越靠前那麼宏的優先級越高(Template)。例如主機Zabbix server有兩個模板,Template App Zabbix Server,Template OS Linux by Zabbix agent,假設這兩個模板有相同名稱的宏變量{$ZABBIX_GLOBAL_ITEM},那只有Template App Zabbix Server模板中的宏變量會生效。
在這裏插入圖片描述

全局宏變量
優先級最低
選擇管理、一般、界面設置,點擊宏查看用戶自定義全局宏。
在這裏插入圖片描述
設置全局宏

宏:{$ZABBIX_GLOBAL_ITEM},值:全局宏名稱

在這裏插入圖片描述
在監控項上應用宏變量
設置名稱爲:

主機宏:{$ZABBIX_HOST_ITEM},全局宏:{$ZABBIX_GLOBAL_ITEM}

在這裏插入圖片描述
顯示如下圖所示:

按照優先級從高到底:主機宏,模板宏,全局宏,因此
{$ZABBIX_HOST_ITEM}的值顯示的是主機設置的值:主機-宏變量
{$ZABBIX_GLOBAL_ITEM}的值顯示的是模板宏設置的值:模板宏-全局宏

在這裏插入圖片描述

自動發現宏

查看zabbix進程

#顯示其他用戶啓動的進程(a)
#查看系統中屬於自己的進程(x)
#啓動這個進程的用戶和它啓動的時間(u)
ps aux|grep zabbix

在這裏插入圖片描述
查看zabbix設置

#去掉#號開頭和空行
cat /etc/zabbix/zabbix_agentd.conf|grep -v ^#|grep -v ^$

LogFileSize=0
DenyKey=system.run[*]
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
#將配置文件納入配置管理中
Include=/etc/zabbix/zabbix_agentd.d/*.conf

設置zabbix_agent允許以root用戶運行

vim /etc/zabbix/zabbix_agentd.conf
AllowRoot=1

重啓zabbix_agent

systemctl restart zabbix-agent
ps aux|grep zabbix

設置自動發現配置文件,需要在Include=/etc/zabbix/zabbix_agentd.d/目錄下,在配置文件中定義python腳本存放目錄

vim /etc/zabbix/zabbix_agentd.d/userparameter_listen_port.conf
UserParameter=listen.ports.discovery,python3 /etc/zabbix/lldscripts/lld_listen_ports.py

監控端口的python腳本如下,
#!/usr/local/bin/python3爲python路徑

vim /etc/zabbix/lldscripts/lld_listen_ports.py

#!/usr/local/bin/python3
import os
import json

cmd = os.popen("""netstat -nltp|grep -v -w -|grep -v rpc|awk -F "[ :]+" '{if($4 ~ /0.0.0.0/ || $4 ~ /127.0.0.1/) print $5}'
""")

ports=[]
for port in cmd.readlines():
    r=port.strip()
    ports += [{'{#PORT}':r}]

print(json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':')))

python3 lld_listen_ports.py

在這裏插入圖片描述

設置自動發現

自動發現的鍵值需要與配置文件一致,這裏爲listen.ports.discovery
在這裏插入圖片描述
在這裏插入圖片描述
自動發現設置完成
在這裏插入圖片描述
手動驗證定義的自動發現的監控項能否正常的獲取值

# 通過rpm包安裝zabbix_get
yum install zabbix-get-5.0.1-1.el7.x86_64.rpm 
# -s 是被監控主機的ip,-p是端口,-k是監控項的id
zabbix_get -s 127.0.0.1 -p 10050 -k "listen.ports.discovery"

自動發現監控項符合預期
在這裏插入圖片描述
創建監控項原型,名稱爲端口{#PORT}狀態
在這裏插入圖片描述
在這裏插入圖片描述
監控項原型添加完成
在這裏插入圖片描述
創建觸發器類型,點擊添加,選擇原型,添加剛纔創建的監控項原型,表達式值替換成全局宏

#表達式值替換成全局宏
{Template App Zabbix Server:net.tcp.listen[{#PORT}].last()}=0
#全局宏替換0
{Template App Zabbix Server:net.tcp.listen[{#PORT}].last()}={$ZABBIX_GLOBAL_TRIGGER}

在這裏插入圖片描述
在這裏插入圖片描述
觸發器添加完成
在這裏插入圖片描述
監控項已經自動完成
在這裏插入圖片描述
查看監控項數據的收集情況,點擊最新數據
在這裏插入圖片描述
嘗試觸發報警,通過修改全局宏的值實現
在這裏插入圖片描述
在這裏插入圖片描述

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