溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

發(fā)布時(shí)間:2020-07-21 08:31:07 來源:網(wǎng)絡(luò) 閱讀:30475 作者:大白一起學(xué) 欄目:建站服務(wù)器

第十四章 靈活的腳本擴(kuò)展

學(xué)習(xí)到本章時(shí),相信你已經(jīng)掌握了Zabbix服務(wù)器的各個(gè)組件是如何工作的,以及通過Zabbix收集數(shù)據(jù)的方法,但在實(shí)際環(huán)境中,你可能會(huì)面對(duì)一個(gè)大型的、異構(gòu)、復(fù)雜的基礎(chǔ)設(shè)施,你會(huì)發(fā)現(xiàn)有很多不同的應(yīng)用平臺(tái)和系統(tǒng),服務(wù)器和網(wǎng)絡(luò)設(shè)備,還有可能有很多定制的設(shè)備和專用的硬件產(chǎn)品,這些設(shè)備的共同點(diǎn)是都提供網(wǎng)路接口。對(duì)于常規(guī)的服務(wù)器及網(wǎng)絡(luò)設(shè)備可以輕松的使用Zabbix提供的監(jiān)控方式收集數(shù)據(jù),但是還是會(huì)有一些應(yīng)用系統(tǒng)或設(shè)備無法通過Zabbix提供的標(biāo)準(zhǔn)查詢方法或SNMP收集監(jiān)控?cái)?shù)據(jù)。

假設(shè)在實(shí)際環(huán)境中用一個(gè)用戶定制的設(shè)備,只能通過特定的客戶端軟件能夠收集設(shè)備內(nèi)部溫度傳感器提供的當(dāng)前溫度,這是一個(gè)關(guān)鍵性的指標(biāo)現(xiàn)在必須要通過Zabbix進(jìn)行監(jiān)控。在這種場(chǎng)景下,必須通過腳本調(diào)用客戶端軟件收集監(jiān)控?cái)?shù)據(jù)。另外,還有很多應(yīng)用系統(tǒng)如Nginx通過stub_status模塊提供運(yùn)行狀態(tài)信息,Redis通過命令redis-cli info可以收集系統(tǒng)的運(yùn)行狀態(tài)。

Zabbix為了滿足這類場(chǎng)景,提供了以下幾種方式收集監(jiān)控?cái)?shù)據(jù):

  • Zabbix server中運(yùn)行腳本收集監(jiān)控?cái)?shù)據(jù)(External checks

  • Zabbix agent中運(yùn)行腳本收集監(jiān)控?cái)?shù)據(jù)(UserParameter

  • Zabbix serveragent中運(yùn)行腳本收集監(jiān)控?cái)?shù)據(jù)(Zabbix_sender

  • 依據(jù)Zabbix協(xié)議自行開發(fā)工具收集監(jiān)控?cái)?shù)據(jù)

    近日完成《深入淺出?zabbix 4.0》視頻教程的錄制并正式發(fā)布,該教程基于 zabbix 4.2 ,對(duì)Zabbix進(jìn)行全面講解。歡迎大家圍觀。課程鏈接:https://edu.51cto.com/sd/ce000?

    14.1 Zabbix Server中運(yùn)行腳本

在實(shí)際環(huán)境中,你可能無法在監(jiān)控設(shè)備中安裝標(biāo)準(zhǔn)的Zabbix agent收集監(jiān)控?cái)?shù)據(jù),通過Externalchecks監(jiān)控方式,可以在Zabbix server上執(zhí)行腳本或二進(jìn)制程序收集監(jiān)控?cái)?shù)據(jù)。

在使用這種方式前,需要在zabbix-server.conf配置文件中定義腳本或程序的路徑,設(shè)置正確的權(quán)限能夠讓Zabbix執(zhí)行。

# vi /etc/zabbix/zabbix-server.conf

ExternalScripts=/usr/lib/zabbix/externalscripts

ExternalScripts 可以使用系統(tǒng)標(biāo)準(zhǔn)的路徑,你也可以指定其他路徑。在這里我們可以把腳本或程序放在這里,并設(shè)置相應(yīng)的權(quán)限。

使用External checks時(shí)需要注意以下幾點(diǎn):

  • Key語法中支持多個(gè)逗號(hào)分隔的參數(shù)。

  • 在腳本命令中支持用戶定義的宏變量。

  • External checks通過標(biāo)準(zhǔn)輸出(STDOUT)將錯(cuò)誤返回,可以在觸發(fā)器中進(jìn)行管理。

  • 支持多行的返回值。

通過External checks可以完成很復(fù)雜的監(jiān)控任務(wù),但是在實(shí)際環(huán)境中使用時(shí)要注意服務(wù)器性能的問題,每一次腳本執(zhí)行時(shí)需要Zabbix server啟動(dòng)一個(gè)進(jìn)程,當(dāng)有很多腳本運(yùn)行時(shí)會(huì)降低Zabbix server的性能。

具體創(chuàng)建External checks監(jiān)控方式的監(jiān)控項(xiàng)步驟請(qǐng)參考第三章。

?

14.2 Zabbix agent中運(yùn)行腳本

為了防止在服務(wù)器上運(yùn)行腳本占用大量資源,影響服務(wù)器性能,Zabbix提供了一種方法即UserParameter,我們可以把腳本放到Zabbix agent上運(yùn)行。

UserParameter是在agent配置文件中定義的。語法如下:

UserParameter=<key>,<command>

User parameter由兩部分組成,一部分是Key,在這里定義的KeyZabbix server前端頁面中創(chuàng)建item時(shí)會(huì)用到,并且在引用這個(gè)Key的主機(jī)中名稱必須是唯一的,Key的名稱中我們可以使用點(diǎn)或下劃線,但不能有空格或其他特殊字符。另一部分是command,是一個(gè)可執(zhí)行的命令或腳本。

User parameter中定義key時(shí),我們也可以設(shè)定參數(shù),這些參數(shù)可以傳遞給命令或腳本。語法是:

UserParameter=key[*],command

[*]表示可以傳遞多個(gè)參數(shù),對(duì)應(yīng)[*]中參數(shù)的位置,在command中可以使用$1,$2,$3 …$9來引用參數(shù),$0代表command本身。如果在使用的命令行中引用$2這種參數(shù),那就需要變成$$2,例如:awk '{print $$2}',在這種情況下$$2實(shí)際上引用的是$2參數(shù)。另外,像$2這些參數(shù)你即使用雙引號(hào)(或單引號(hào)()括起來,它也會(huì)正常解析相應(yīng)位置的參數(shù)。

通過Zabbix agent支持User parameter中的命令,最多返回512KB大小的數(shù)據(jù)。如果達(dá)到agent配置文件中定義的超時(shí)時(shí)間,這個(gè)User parameter進(jìn)程會(huì)被殺掉。Userparameter返回的文本中(type ofinformationcharacter、logtext)可以包括空格,返回值無效時(shí)item將變成unsupported。

為了更好的理解UserParameter,下面舉幾個(gè)例子。

  • UserParameter=ping,echo 1

總是返回1。

  • UserParameter=ping[*],echo $1

ping[0] 將返回 '0';ping[aaa] 將返回 'aaa'。

  • UserParameter=mysql.ping,mysqladmin–uroot -p<password> ping | grep -c alive

如果MySQL運(yùn)行正常返回1,否則返回0。

  • UserParameter=mysql.ping[*],mysqladmin-u$1 -p$2 ping | grep -c alive

mysql.ping[zabbix,our_password] 會(huì)把用戶名和密碼傳遞到命令行中參數(shù)引用的位置。

  • UserParameter=wc[*],grep -c"$2" $1

wc[/etc/services,zabbix],計(jì)算在services文件中包含zabbix的行數(shù),在這里$2用雙引號(hào)括起來后,在命令行中還是會(huì)正確引用相應(yīng)位置的參數(shù)。

通常的做法是:

1、? 編輯zabbix_agentd.conf配置文件,配置UserParameter選項(xiàng)。比如:

UserParameter= process.number[*], ps -e |grep $1 | wc -l

2、? 使用zabbix-agentd -t 測(cè)試定義的UserParameter

# zabbix_agentd -t process.number[httpd]

process.number?????????????????????[t|8]

3、? 保存agent 配置文件,重啟agent.

# systemctl restart zabbix-agent.service

4、? 使用zabbix_get工具測(cè)試:

# zabbix_get -s 127.0.0.1 -k process.number[httpd]

8

5、? Zabbix server中的主機(jī)上創(chuàng)建一個(gè)新的監(jiān)控項(xiàng)。類型可以是Zabbix agent或者Zabbix agentactive)。如下圖14-1所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-1

6、? 打開Monitoring --> Latest data 頁面,稍等片刻后你就能看到httpd process number這個(gè)監(jiān)控項(xiàng)的返回值了。

?

14.3 使用zabbix_sender發(fā)送數(shù)據(jù)

Zabbix也提供了工具用來發(fā)送數(shù)據(jù)到server,這個(gè)工具就是zabbix_sender。使用zabbix_sender之前,需要在Zabbix server前端頁面中添加類型為Zabbixtrapper的監(jiān)控項(xiàng)。如下圖14-2所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-2

Zabbix_sender用法可以通過 -h 閱讀幫助文件,也可以瀏覽Zabbix網(wǎng)站的頁面https://www.zabbix.com/documentation/3.0/manpages/zabbix_sender。下面介紹一些主要的參數(shù)和用法。

參數(shù)說明:

  • -c, --config config-fileZabbix senderagent配置文件中讀取有關(guān)server的信息,如果不使用這個(gè)參數(shù),默認(rèn)Zabbixsender是不讀取配置文件的。config-file必須指定配置文件的絕對(duì)路徑。目前僅支持Hostname、ServerActiveSourceIPServerActive配置有多個(gè)服務(wù)器時(shí)將使用第一個(gè)服務(wù)器的配置。

  • -z, --zabbix-server serverZabbix server的主機(jī)名或IP地址。如果是使用proxy進(jìn)行監(jiān)控,這里應(yīng)該是proxy的主機(jī)名或IP地址。如果和--config一起使用,當(dāng)前該參數(shù)的設(shè)置將覆蓋配置文件中ServerActive的第一個(gè)服務(wù)器配置的IP或主機(jī)名。

  • -p, --port portZabbix server trapper運(yùn)行的端口,默認(rèn)是10051。如果和--config一起使用,當(dāng)前該參數(shù)的設(shè)置將覆蓋配置文件中ServerActive的第一個(gè)服務(wù)器配置的端口。

  • -I, --source-address IP-address:指定源IP地址。如果和--config一起使用,當(dāng)前該參數(shù)的設(shè)置將覆蓋配置文件中SourceIP的設(shè)置。

  • -s, --host host:指定接收監(jiān)控項(xiàng)數(shù)據(jù)的主機(jī)名稱,在這里不能使用主機(jī)IPDNS主機(jī)名。如果和--config一起使用,當(dāng)前該參數(shù)的設(shè)置將覆蓋配置文件中Hostname的設(shè)置。

  • -k, --key key:指定發(fā)送數(shù)據(jù)的監(jiān)控項(xiàng)的key

  • -o, --value value:指定監(jiān)控項(xiàng)的值。

  • -i, --input-file input-file:從文件中加載發(fā)送的數(shù)據(jù)。指定input-file時(shí)將從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)。輸入文件的內(nèi)容每行的格式為<hostname> <key> <value>,每個(gè)參數(shù)直接用空格分隔。其中hostnameZabbix server前端頁面中添加的主機(jī)名稱,key為監(jiān)控項(xiàng)item key,value為監(jiān)控項(xiàng)的值。如果hostname指定為時(shí),hostname將使用agent配置文件中的Hostname—host參數(shù)。例如:

- iostat.avgrq-sz[sda] 39.48? # 使用--hostagent配置文件中Hostname

Server1 db.connections 60?# 主機(jī)server1,監(jiān)控項(xiàng)的keydb.connections,值為60

Zabbix server前端頁面中必須設(shè)置正確的item的值類型,Zabbix sender每次連接能夠發(fā)送最多250個(gè)值。

下面舉個(gè)監(jiān)控磁盤IO的例子。在本例中通過iostatsysstat的版本為10.1.5)收集磁盤數(shù)據(jù),在模板中定義自動(dòng)發(fā)現(xiàn)規(guī)則和item、graph、trigger原型,當(dāng)模板鏈接到主機(jī)后,自動(dòng)創(chuàng)建item、graphtrigger。在模板中創(chuàng)建一個(gè)item,定期收集監(jiān)控?cái)?shù)據(jù)。

1、? 定義UserParameter

# vi /etc/zabbix/zabbix_agentd.d/userparameter_io.conf

UserParameter = iostat_status,/etc/zabbix/script/io_stat.sh

UserParameter = iostat.discovery_disks,/etc/zabbix/script/io_stat.shdisks

2、? 編輯腳本文件

# vi /etc/zabbix/script/io_stat.sh

#!/bin/bash

?

if [ -z $1 ]; then

RespStr=$(/usr/bin/iostat -dkxy 2>/dev/null)

(cat <<EOF

$RespStr

EOF

?) |? awk 'BEGIN {split("disk rrqm_s wrqm_sr_s w_s rkB_s wkB_s avgrq-sz avgqu-sz await r_await w_await svct util",aParNames)}

?? $1 ~ /^[hsv]d[a-z]$/ {print$0;

?? if(NF == 14)

???? for(i = 2; i <= 14;i++) print "- iostat."aParNames[i]"["$1"]", $i

?}' | /usr/bin/zabbix_sender--config /etc/zabbix/zabbix_agentd.conf?--input-file - >/dev/null 2>&1

?echo 1

?exit 0

elif [ "$1" = 'disks' ]; then

?DiskStr=`/usr/bin/iostat -d |awk '$1 ~ /^[hsv]d[a-z]$/ {print $1}'`

?es=''

?for disk in $DiskStr; do

??OutStr="$OutStr$es{\"{#DISKNAME}\":\"$disk\"}"

?? es=","

?done

?echo -e"{\"data\":[$OutStr]}"

fi

3、? 創(chuàng)建模板Template IO Trap。如下圖14-3所示。深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-3

4、? 在模板中添加一個(gè)名稱為IOapplication。

5、? 創(chuàng)建一個(gè)名稱為Status的監(jiān)控項(xiàng),如下圖14-4所示。

?

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-4

6、? 創(chuàng)建一個(gè)觸發(fā)器,如下圖14-5所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-5

7、? 創(chuàng)建自動(dòng)發(fā)現(xiàn)規(guī)則,定期調(diào)用腳本發(fā)現(xiàn)磁盤。在腳本中自動(dòng)生成JOSN格式的數(shù)據(jù),例如:

{"data":

[

{"{#DISKNAME}":"sda"},

{"{#DISKNAME}":"sdb"}

]

}

如下圖14-6所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-6

?

8、? 創(chuàng)建item原型。在第5步中創(chuàng)建的監(jiān)控項(xiàng)會(huì)定期調(diào)用腳本,腳本中根據(jù)iostat命令的返回結(jié)果自動(dòng)生成的Zabbixsender需要的輸入文件。創(chuàng)建item原型時(shí)使用輸入文件中的key創(chuàng)建類型為Zabbix trapper的監(jiān)控項(xiàng)。輸入文件的內(nèi)容格式如下:

-iostat.rrqm_s[sda] 0.00

-iostat.wrqm_s[sda] 0.02

-iostat.r_s[sda] 0.12

-iostat.w_s[sda] 5.17

-iostat.rkB_s[sda] 4.30

-iostat.wkB_s[sda] 99.98

-iostat.avgrq-sz[sda] 39.48

-iostat.avgqu-sz[sda] 0.01

-iostat.await[sda] 1.21

-iostat.r_await[sda] 2.18

-iostat.w_await[sda] 1.19

-iostat.svct[sda] 0.66

-iostat.util[sda] 0.35

使用輸入文件中的key參數(shù)創(chuàng)建item原型,如下圖14-7所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-7

創(chuàng)建的item原型列表如下圖14-8所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-8

9、? 創(chuàng)建graph原型,如下圖14-9所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-9

graph原型列表如下圖14-10所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-10

10、??將模板Template IOTrap鏈接到主機(jī),然后到Latest data中查看監(jiān)控?cái)?shù)據(jù),如下圖14-11所示。

深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

14-11

Zabbix sender的執(zhí)行在例子中我們通過一個(gè)監(jiān)控項(xiàng)的查詢來調(diào)用腳本,實(shí)際上你也可以通過cron來運(yùn)行腳本。通過定義監(jiān)控項(xiàng)的方式管理比較方便,Update interval (in sec)等設(shè)置的改變都可以在前端頁面中完成,不需要對(duì)監(jiān)控主機(jī)做任何操作。


深入淺出Zabbix 3.0 -- 第十四章 靈活的腳本擴(kuò)展

出自?http://ustogether.blog.51cto.com/8236854/1929788,如需轉(zhuǎn)載請(qǐng)與作者聯(lián)系。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI