學習到本章時,相信你已經(jīng)掌握了Zabbix服務器的各個組件是如何工作的,以及通過Zabbix收集數(shù)據(jù)的方法,但在實際環(huán)境中,你可能會面對一個大型的、異構、復雜的基礎設施,你會發(fā)現(xiàn)有很多不同的應用平臺和系統(tǒng),服務器和網(wǎng)絡設備,還有可能有很多定制的設備和專用的硬件產(chǎn)品,這些設備的共同點是都提供網(wǎng)路接口。對于常規(guī)的服務器及網(wǎng)絡設備可以輕松的使用Zabbix提供的監(jiān)控方式收集數(shù)據(jù),但是還是會有一些應用系統(tǒng)或設備無法通過Zabbix提供的標準查詢方法或SNMP收集監(jiān)控數(shù)據(jù)。
目前創(chuàng)新互聯(lián)公司已為1000多家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)站空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設計、柯橋網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
假設在實際環(huán)境中用一個用戶定制的設備,只能通過特定的客戶端軟件能夠收集設備內(nèi)部溫度傳感器提供的當前溫度,這是一個關鍵性的指標現(xiàn)在必須要通過Zabbix進行監(jiān)控。在這種場景下,必須通過腳本調(diào)用客戶端軟件收集監(jiān)控數(shù)據(jù)。另外,還有很多應用系統(tǒng)如Nginx通過stub_status模塊提供運行狀態(tài)信息,redis通過命令redis-cli info可以收集系統(tǒng)的運行狀態(tài)。
Zabbix為了滿足這類場景,提供了以下幾種方式收集監(jiān)控數(shù)據(jù):
在Zabbix server中運行腳本收集監(jiān)控數(shù)據(jù)(External checks)
在Zabbix agent中運行腳本收集監(jiān)控數(shù)據(jù)(UserParameter)
在Zabbix server或agent中運行腳本收集監(jiān)控數(shù)據(jù)(Zabbix_sender)
依據(jù)Zabbix協(xié)議自行開發(fā)工具收集監(jiān)控數(shù)據(jù)
近日完成《深入淺出?zabbix 4.0》視頻教程的錄制并正式發(fā)布,該教程基于 zabbix 4.2 ,對Zabbix進行全面講解。歡迎大家圍觀。課程鏈接:https://edu.51cto.com/sd/ce000?
在實際環(huán)境中,你可能無法在監(jiān)控設備中安裝標準的Zabbix agent收集監(jiān)控數(shù)據(jù),通過Externalchecks監(jiān)控方式,可以在Zabbix server上執(zhí)行腳本或二進制程序收集監(jiān)控數(shù)據(jù)。
在使用這種方式前,需要在zabbix-server.conf配置文件中定義腳本或程序的路徑,設置正確的權限能夠讓Zabbix執(zhí)行。
# vi /etc/zabbix/zabbix-server.conf
ExternalScripts=/usr/lib/zabbix/externalscripts
ExternalScripts 可以使用系統(tǒng)標準的路徑,你也可以指定其他路徑。在這里我們可以把腳本或程序放在這里,并設置相應的權限。
使用External checks時需要注意以下幾點:
在Key語法中支持多個逗號分隔的參數(shù)。
在腳本命令中支持用戶定義的宏變量。
External checks通過標準輸出(STDOUT)將錯誤返回,可以在觸發(fā)器中進行管理。
支持多行的返回值。
通過External checks可以完成很復雜的監(jiān)控任務,但是在實際環(huán)境中使用時要注意服務器性能的問題,每一次腳本執(zhí)行時需要Zabbix server啟動一個進程,當有很多腳本運行時會降低Zabbix server的性能。
具體創(chuàng)建External checks監(jiān)控方式的監(jiān)控項步驟請參考第三章。
?
為了防止在服務器上運行腳本占用大量資源,影響服務器性能,Zabbix提供了一種方法即UserParameter,我們可以把腳本放到Zabbix agent上運行。
UserParameter是在agent配置文件中定義的。語法如下:
UserParameter=<key>,<command>
User parameter由兩部分組成,一部分是Key,在這里定義的Key在Zabbix server前端頁面中創(chuàng)建item時會用到,并且在引用這個Key的主機中名稱必須是唯一的,Key的名稱中我們可以使用點或下劃線,但不能有空格或其他特殊字符。另一部分是command,是一個可執(zhí)行的命令或腳本。
在User parameter中定義key時,我們也可以設定參數(shù),這些參數(shù)可以傳遞給命令或腳本。語法是:
UserParameter=key[*],command
[*]表示可以傳遞多個參數(shù),對應[*]中參數(shù)的位置,在command中可以使用$1,$2,$3 …$9來引用參數(shù),$0代表command本身。如果在使用的命令行中引用$2這種參數(shù),那就需要變成$$2,例如:awk '{print $$2}',在這種情況下$$2實際上引用的是$2參數(shù)。另外,像$2這些參數(shù)你即使用雙引號(”)或單引號(‘)括起來,它也會正常解析相應位置的參數(shù)。
通過Zabbix agent支持User parameter中的命令,最多返回512KB大小的數(shù)據(jù)。如果達到agent配置文件中定義的超時時間,這個User parameter進程會被殺掉。Userparameter返回的文本中(type ofinformation為character、log或text)可以包括空格,返回值無效時item將變成unsupported。
為了更好的理解UserParameter,下面舉幾個例子。
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運行正常返回1,否則返回0。
UserParameter=mysql.ping[*],mysqladmin-u$1 -p$2 ping | grep -c alive
mysql.ping[zabbix,our_password] 會把用戶名和密碼傳遞到命令行中參數(shù)引用的位置。
UserParameter=wc[*],grep -c"$2" $1
wc[/etc/services,zabbix],計算在services文件中包含zabbix的行數(shù),在這里$2用雙引號括起來后,在命令行中還是會正確引用相應位置的參數(shù)。
通常的做法是:
1、?編輯zabbix_agentd.conf配置文件,配置UserParameter選項。比如:
UserParameter= process.number[*], ps -e |grep $1 | wc -l
2、?使用zabbix-agentd -t 測試定義的UserParameter
# zabbix_agentd -t process.number[httpd]
process.number?????????????????????[t|8]
3、?保存agent 配置文件,重啟agent.
# systemctl restart zabbix-agent.service
4、?使用zabbix_get工具測試:
# zabbix_get -s 127.0.0.1 -k process.number[httpd]
8
5、?在Zabbix server中的主機上創(chuàng)建一個新的監(jiān)控項。類型可以是Zabbix agent或者Zabbix agent(active)。如下圖14-1所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
圖 14-1
6、?打開Monitoring --> Latest data 頁面,稍等片刻后你就能看到httpd process number這個監(jiān)控項的返回值了。
?
Zabbix也提供了工具用來發(fā)送數(shù)據(jù)到server,這個工具就是zabbix_sender。使用zabbix_sender之前,需要在Zabbix server前端頁面中添加類型為Zabbixtrapper的監(jiān)控項。如下圖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配置文件中讀取有關server的信息,如果不使用這個參數(shù),默認Zabbixsender是不讀取配置文件的。config-file必須指定配置文件的絕對路徑。目前僅支持Hostname、ServerActive和SourceIP,ServerActive配置有多個服務器時將使用第一個服務器的配置。
-z, --zabbix-server server:Zabbix server的主機名或IP地址。如果是使用proxy進行監(jiān)控,這里應該是proxy的主機名或IP地址。如果和--config一起使用,當前該參數(shù)的設置將覆蓋配置文件中ServerActive的第一個服務器配置的IP或主機名。
-p, --port port:Zabbix server trapper運行的端口,默認是10051。如果和--config一起使用,當前該參數(shù)的設置將覆蓋配置文件中ServerActive的第一個服務器配置的端口。
-I, --source-address IP-address:指定源IP地址。如果和--config一起使用,當前該參數(shù)的設置將覆蓋配置文件中SourceIP的設置。
-s, --host host:指定接收監(jiān)控項數(shù)據(jù)的主機名稱,在這里不能使用主機IP或DNS主機名。如果和--config一起使用,當前該參數(shù)的設置將覆蓋配置文件中Hostname的設置。
-k, --key key:指定發(fā)送數(shù)據(jù)的監(jiān)控項的key。
-o, --value value:指定監(jiān)控項的值。
-i, --input-file input-file:從文件中加載發(fā)送的數(shù)據(jù)。指定input-file為 – 時將從標準輸入讀取數(shù)據(jù)。輸入文件的內(nèi)容每行的格式為<hostname> <key> <value>,每個參數(shù)直接用空格分隔。其中hostname為Zabbix server前端頁面中添加的主機名稱,key為監(jiān)控項item key,value為監(jiān)控項的值。如果hostname指定為– 時,hostname將使用agent配置文件中的Hostname或—host參數(shù)。例如:
- iostat.avgrq-sz[sda] 39.48? # 使用--host或agent配置文件中Hostname
Server1 db.connections 60?# 主機server1,監(jiān)控項的key為db.connections,值為60
在Zabbix server前端頁面中必須設置正確的item的值類型,Zabbix sender每次連接能夠發(fā)送最多250個值。
下面舉個監(jiān)控磁盤IO的例子。在本例中通過iostat(sysstat的版本為10.1.5)收集磁盤數(shù)據(jù),在模板中定義自動發(fā)現(xiàn)規(guī)則和item、graph、trigger原型,當模板鏈接到主機后,自動創(chuàng)建item、graph和trigger。在模板中創(chuàng)建一個item,定期收集監(jiān)控數(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、?在模板中添加一個名稱為IO的application。
5、?創(chuàng)建一個名稱為Status的監(jiān)控項,如下圖14-4所示。
?

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

圖 14-5
7、?創(chuàng)建自動發(fā)現(xiàn)規(guī)則,定期調(diào)用腳本發(fā)現(xiàn)磁盤。在腳本中自動生成JOSN格式的數(shù)據(jù),例如:
{"data":
[
{"{#DISKNAME}":"sda"},
{"{#DISKNAME}":"sdb"}
]
}
如下圖14-6所示。

圖 14-6
?
8、?創(chuàng)建item原型。在第5步中創(chuàng)建的監(jiān)控項會定期調(diào)用腳本,腳本中根據(jù)iostat命令的返回結果自動生成的Zabbixsender需要的輸入文件。創(chuàng)建item原型時使用輸入文件中的key創(chuàng)建類型為Zabbix trapper的監(jiān)控項。輸入文件的內(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鏈接到主機,然后到Latest data中查看監(jiān)控數(shù)據(jù),如下圖14-11所示。

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

出自?http://ustogether.blog.51cto.com/8236854/1929788,如需轉(zhuǎn)載請與作者聯(lián)系。
分享文章:深入淺出Zabbix3.0--第十四章靈活的腳本擴展
文章URL:http://chinadenli.net/article18/jpsggp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站制作、企業(yè)建站、網(wǎng)站排名、微信小程序、手機網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)