您好,登錄后才能下訂單哦!
學(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 server或agent中運(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?
在實(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)參考第三章。
?
為了防止在服務(wù)器上運(yùn)行腳本占用大量資源,影響服務(wù)器性能,Zabbix提供了一種方法即UserParameter,我們可以把腳本放到Zabbix agent上運(yùn)行。
UserParameter是在agent配置文件中定義的。語法如下:
UserParameter=<key>,<command>
User parameter由兩部分組成,一部分是Key,在這里定義的Key在Zabbix 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 ofinformation為character、log或text)可以包括空格,返回值無效時(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 agent(active)。如下圖14-1所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
圖 14-1
6、? 打開Monitoring --> Latest data 頁面,稍等片刻后你就能看到httpd process number這個(gè)監(jiān)控項(xiàng)的返回值了。
?
Zabbix也提供了工具用來發(fā)送數(shù)據(jù)到server,這個(gè)工具就是zabbix_sender。使用zabbix_sender之前,需要在Zabbix server前端頁面中添加類型為Zabbixtrapper的監(jiān)控項(xiàng)。如下圖14-2所示。
圖 14-2
Zabbix_sender用法可以通過 -h 閱讀幫助文件,也可以瀏覽Zabbix網(wǎng)站的頁面https://www.zabbix.com/documentation/3.0/manpages/zabbix_sender。下面介紹一些主要的參數(shù)和用法。
參數(shù)說明:
-c, --config config-file:Zabbix sender從agent配置文件中讀取有關(guān)server的信息,如果不使用這個(gè)參數(shù),默認(rèn)Zabbixsender是不讀取配置文件的。config-file必須指定配置文件的絕對(duì)路徑。目前僅支持Hostname、ServerActive和SourceIP,ServerActive配置有多個(gè)服務(wù)器時(shí)將使用第一個(gè)服務(wù)器的配置。
-z, --zabbix-server server:Zabbix 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 port:Zabbix 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ī)IP或DNS主機(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ù)直接用空格分隔。其中hostname為Zabbix 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? # 使用--host或agent配置文件中Hostname
Server1 db.connections 60?# 主機(jī)server1,監(jiān)控項(xiàng)的key為db.connections,值為60
在Zabbix server前端頁面中必須設(shè)置正確的item的值類型,Zabbix sender每次連接能夠發(fā)送最多250個(gè)值。
下面舉個(gè)監(jiān)控磁盤IO的例子。在本例中通過iostat(sysstat的版本為10.1.5)收集磁盤數(shù)據(jù),在模板中定義自動(dòng)發(fā)現(xiàn)規(guī)則和item、graph、trigger原型,當(dāng)模板鏈接到主機(jī)后,自動(dòng)創(chuàng)建item、graph和trigger。在模板中創(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所示。
圖 14-3
4、? 在模板中添加一個(gè)名稱為IO的application。
5、? 創(chuàng)建一個(gè)名稱為Status的監(jiān)控項(xiàng),如下圖14-4所示。
?
圖 14-4
6、? 創(chuàng)建一個(gè)觸發(fā)器,如下圖14-5所示。
圖 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所示。
圖 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所示。
圖 14-7
創(chuàng)建的item原型列表如下圖14-8所示。
圖 14-8
9、? 創(chuàng)建graph原型,如下圖14-9所示。
圖 14-9
graph原型列表如下圖14-10所示。
圖 14-10
10、??將模板Template IOTrap鏈接到主機(jī),然后到Latest data中查看監(jiān)控?cái)?shù)據(jù),如下圖14-11所示。
圖 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ī)做任何操作。
出自?http://ustogether.blog.51cto.com/8236854/1929788,如需轉(zhuǎn)載請(qǐng)與作者聯(lián)系。
免責(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)容。