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}
觸發器添加完成
監控項已經自動完成
查看監控項數據的收集情況,點擊最新數據
嘗試觸發報警,通過修改全局宏的值實現