skill——zbbix(低級別發現 與 zabbix 自定義監控項)

低級別發現Low-level discovery(LLD)

在對主機的監控中,可能出現這樣的情況,例如對某主機網卡eth0進行監控,可以指定需要監控的網卡是 eth0,而將網卡作爲一個通用監控項時,根據主機操作系統的不同,網卡的名稱也不完全相同,有些操作系統的網卡名稱是 eth 開頭的,而有些網卡名稱是 em、enps0、ens 開頭的,遇到這種情況,如果分別針對不同的網卡名設置不同的監控項,那就太繁瑣了,此時使用 zabbix 的低級發現功能就可以解決這個問題

在 Zabbix 中,支持幾種現成的類型的數據項發現,分別是:

1.文件系統發現

2.網絡接口發現

3.SNMP OID 發現

4.CPU 核和狀態

下面是 zabbix 自帶的 LLD key

1.vfs.fs.discovery              #適用於zabbix agent監控方式

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 的例子:

blob.png

其中,{#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 讀取配置文件中的返回值通過處理前端的方式返回給用戶

1、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

2、讓 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'

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