文章目錄
zabbix宏的概述
宏的作用是便於在模板、Items、Trigger中的引用
Zabbix有許多內置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.NAME}等
詳細信息請參考官方文檔: https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location
爲了更強的靈活性,Zabbix還支持全局宏-模板宏-主機宏級別使用用戶自定義宏(user macro),用戶自定義宏要使用”{$MACRO}”這種特殊的語法格式, 宏的名稱只能使用大寫字母、數字及下劃線
宏可以應用在item keys和descriptions、Trigger名稱和表達式、主機接口IP/DNS及端口、discovery機制的SNMP協議的相關信息中等。
宏的替換次序
首先是主機級別的宏;其次是當前主機上一級模板中(直接鏈接至主機的模板)的宏,多個一級模板按其ID號排序;
再接着是二級模板中的宏;而後依次類推;最後檢查的是全局宏;
Zabbix如果無法查找到某主機定義使用的宏,則不會對其進行替換操作。要使用用戶自定義宏,有以下兩種途徑:
全局宏:Administration→General→Macros
主機或模板級別的宏:編輯相應主機或者模板的屬性即可
宏的使用示例
在主機級別定義一個名爲{$NETWORK_NUMBER}的宏,以定義當前主機所接受的網卡進口流量的合理大小(當然這裏值根據具體情況來做,僅供一個參考)
宏的分類
- 系統宏變量 {MACRO}
- 用戶自定義宏 {$MACRO}
- 自動發現宏 {#MACRO}
- 系統宏變量 {MACRO}
- 用戶自定義宏 {$MACRO}
- 自動發現宏 {#MACRO}
- 宏變量函數
-
- regsub(,)
- iregsub(,)
自定義宏演示
-
自定義全域宏
我們可以通過自定義全域宏來定義用戶名密碼,告警觸發器的值等等,通過更改全域宏的值來高效的管理zabbix的觸發器或者是用戶名密碼
-
自定義全域宏演示
- 克隆之前的觸發器,修改名稱爲
Macro測試:{$TEST_GLOBAL_ITEM}
-
現在全域宏觸發器
{$TEST_GLOBAL_TRIGGER}
的值是1,觸發告警
-
將全域宏觸發器
{$TEST_GLOBAL_TRIGGER}
的值改爲0,告警解除
用戶自定義宏在監控模板中的使用
- 在自定義模板中配置自定義宏
{$TEST_TEMPLATE_ITEM}
,{$TEST_TEMPLATE_TRIGGER}
- 在模板中克隆一個監控項,修改其名稱爲
模板宏測試:{$TEST_TEMPLATE_ITEM}
-
添加觸發器
-
修改全域宏
{$TEXT_GLOBAL_TRIGGER}
的值,模擬觸發告警
模板宏變量的優先級大於全域宏
- 一個監控項中連接了多個模板同時這幾個模板中有同名稱的宏變量,那麼宏變量的值優先取編號靠前的模板宏變量值
優先級:主機宏 > 模板宏 > 全域宏
主機層面的宏變量驗證
- 1.給主機上添加宏變量
{$TEST_HOST_ITEM}
,{$TEST_HOST_TRIGGER}
- 定義個item引用主機宏
{$TEST_HOST_ITEM}
-
定義個trigger引用主機宏
{$TEST_HOST_TRIGGER}
-
測試效果
lb-node1引用了該模板,其生效了上面定義的主機宏測試item
還測試生效了主機宏trigger
-
2.給全域宏、模板宏和主機宏都定義一個相同的
{$TEST_PRIORITY_ITEM2}
宏變量,觀察到主機的宏變量優先級最高
-
在模板裏定義一個監控項,觀測到模板裏生效的是模板宏的值
-
在主機的監控項上生效的是主機宏的值
自動發現宏的演示
配置低級別自動發現的步驟
- 配置自動發現監控項
Discovery rules
(根據腳本或命令生成低級別的自動發現宏變量) - 定義item原型
Item prototypes
(主要利用低級別自動發現產生的變量,來動態的創建監控項、觸發器、圖形)
實戰演示低級別自動發現的配置管理
- 演示內容:自動發現服務器本地的監聽的端口,並且將這些端口進行自動化的監控和告警
- 配置agent客戶端
[root@lb-node2 /etc/zabbix]# vim zabbix_agentd.d/userparameter_ports.conf
UserParameter=listen.ports.discovery,python /etc/zabbix/scripts/listen_ports.py
- 編寫獲取服務端口的腳本
listen_ports.py
#!/usr/bin/python
import os
import json
cmd=os.popen("""netstat -lntp|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=(',',':'))
- 配置測試的監控模板
- 設置zabbix權限
默認zabbix-agent使用zabbix用戶啓動,爲了可以是zabbix執行腳本,我們修改他的權限,給他提升權限sudovi
- 兩種方法
-
提升sudo權限
[root@lb-node2 ~]# visudo
…
zabbix ALL=NOPASSWD ALL -
修改zabbix配置,使zabbix-agent以root用戶運行(修改配置後要重啓agent)
sed -i 's@# AllowRoot=0@AllowRoot=1@g' /etc/zabbix/zabbix_agentd.conf
3. 還有一種方法:思路用root用戶生成json格式的端口信息日誌,然後zabbix-agent讀取這個日誌即可 -
- zabbix-server端測試獲取agent端的端口信息
- 自動發現規則已經創建
- 創建監控項原型
- 創建監控項觸發器原型
- lb-node1主機上自動發現監聽端口實現了
- 並且監聽的端口都有值了
- 測試關閉80端口,zabbix-agent觸發告警