低級別發現Low-level discovery(LLD)前端
在對主機的監控中,可能出現這樣的狀況,例如對某主機網卡 eth0 進行監控,能夠指定須要監控的網卡是 eth0,而將網卡做爲一個通用監控項時,根據主機操做系統的不一樣,網卡的名稱也不徹底相同,有些操做系統的網卡名稱是 eth 開頭的,而有些網卡名稱是 em、enps0、ens 開頭的,遇到這種狀況,若是分別針對不一樣的網卡名設置不一樣的監控項,那就太繁瑣了,此時使用 zabbix 的低級發現功能就能夠解決這個問題mysql
在 Zabbix 中,支持幾種現成的類型的數據項發現,分別是:web
1.文件系統發現
sql
2.網絡接口發現服務器
3.SNMP OID 發現網絡
4.CPU 核和狀態ide
下面是 zabbix 自帶的 LLD keyoop
1.vfs.fs.discovery #適用於zabbix agent監控方式spa
2.snmp.discovery #SNMP agent監控方式操作系統
3.net.if.discovery #適用於zabbix agent監控方式
4.system.cpu.discovery #適用於zabbix agent監控方式
能夠用 zabbix-get 來查看 key 獲取的數據,對於 snmp 不能經過 zabbix-get 來驗證,只能在 web 頁面中進行配置使用
下面是一個 zabbix-get 的例子:
其中,{#IFNAME} 就是一個宏變量,會返回系統中全部網卡的名字。宏變量能夠定義在主機、模板以及全局,宏變量都是大寫的。使用宏變量,可使 zabbix 功能更增強大
在自動發現中使用zabbix自帶的宏,固定的語法格式爲:{#MACRO}
zabbix還支持用戶自定義的宏,這些自定義的宏也有特定的語法:{$MACRO}
在 LLD 中,經常使用的內置宏有 {#FSNAME}, {#FSTYPE}, {#IFNAME}, {#SNMPINDEX}, {#SNMPVALUE} 等
{#FSNAME}:表示文件系統名稱
{#FSTYPE}:表示文件系統類型
{#IFNAME}:表示網卡名稱
{#SNMPINDEX}:會獲取 OID 中最後一個值
{#SNMPVALUE}:從返回的值中過濾掉 loopback 接口
宏的級別有多種:其優先級由高到低順序以下:
1.主機級別的宏優先級最高
2.第一級模式中的宏
3.第二季模式中的宏
4.全局級別的宏
所以,zabbix 查找宏的順序爲:首選查找主機級別的宏,若是在主機級別不存在宏設置,那麼 zabbix 就會去模板中看是否設置有宏;若是模板中也沒有,將會查找使用全局的宏;如果在各級別都沒找到宏,那麼將不使用宏
zabbix 自定義監控項
有時候當咱們監控的項目在 zabbix 預約義的key中沒有定義時,這時候咱們能夠經過編寫 zabbix 的用戶參數的方法來監控咱們要求的項目 item。形象一點說 zabbix 代理端配置文件中的 User parameters 就至關於經過腳本獲取要監控的值,而後把相關的腳本或者命令寫入到配置文件中的 User parameter 中,而後 zabbix server 讀取配置文件中的返回值經過處理前端的方式返回給用戶
一、zabbix agent 端開啓 Userparameter 指令
UnsafeUserParameters=1
啓用 agent 端自定義 item 功能,設置此參數爲1後,就可使用 UserParameter 指令了
UserParameter用於自定義itme。語法格式爲:
UserParameter=<key>,<command>
其中:
UserParameter爲關鍵字
key爲用戶自定義key名字能夠隨便起
<command>爲咱們要運行的命令或者腳本。
一個簡單的例子:
UserParameter=ping,echo 1
代理程序程序將會永遠的返回 1 當咱們在服務器端添加 item 的 key 爲 ping 的時候
稍微複雜的例子:
UserParameter=mysql.ping, /usr/local/mysql/bin/mysqladmin ping|grep -c alive
當咱們執行 mysqladmin -uroot ping 命令的時候若是 mysq 存活要返回 mysqld is alive,咱們經過 grep–c 來計算 mysqld is alive 的個數,若是 mysql 存活着,則個數爲 1,若是不存活很,明顯 mysqld is alive 的個數爲 0,經過這種方法咱們能夠來判斷 mysql 的存活狀態。
當咱們在服務器端添加 item 的 key 爲 mysql.ping 時候,對於 zabbix 代理程序,若是 mysql 存活,則狀態將返回 1,不然,狀態將返回 0
二、讓 key 接受參數
讓 key 也接受參數的方法使 item 添加時更具有了靈活性
例如,系統預約義 key :
vm.memory.size[<mode>]
其中的 mode 模式就是用戶要接受的參數,當咱們填寫爲 free 時則返回的爲內存的剩餘大小,若是咱們填入的爲 userd 時返回的是內存已經使用的大小
相關語法以下:
UserParameter=key[*],command
其中,Key 的值在主機系統中必須是惟一的,其中 * 表明命令中接受的參數,command 表示命令,也就是客戶端系統中可執行的命令
例如:
UserParameter=ping[*].echo $1
若是執行ping[0],那麼將一直返回 '0',若是執行ping[aaa],將一直返回 'aaa'