您好,登錄后才能下訂單哦!
學習到本章時,相信你已經掌握了Zabbix服務器的各個組件是如何工作的,以及通過Zabbix收集數據的方法,但在實際環境中,你可能會面對一個大型的、異構、復雜的基礎設施,你會發現有很多不同的應用平臺和系統,服務器和網絡設備,還有可能有很多定制的設備和專用的硬件產品,這些設備的共同點是都提供網路接口。對于常規的服務器及網絡設備可以輕松的使用Zabbix提供的監控方式收集數據,但是還是會有一些應用系統或設備無法通過Zabbix提供的標準查詢方法或SNMP收集監控數據。
假設在實際環境中用一個用戶定制的設備,只能通過特定的客戶端軟件能夠收集設備內部溫度傳感器提供的當前溫度,這是一個關鍵性的指標現在必須要通過Zabbix進行監控。在這種場景下,必須通過腳本調用客戶端軟件收集監控數據。另外,還有很多應用系統如Nginx通過stub_status模塊提供運行狀態信息,Redis通過命令redis-cli info可以收集系統的運行狀態。
Zabbix為了滿足這類場景,提供了以下幾種方式收集監控數據:
在Zabbix server中運行腳本收集監控數據(External checks)
在Zabbix agent中運行腳本收集監控數據(UserParameter)
在Zabbix server或agent中運行腳本收集監控數據(Zabbix_sender)
依據Zabbix協議自行開發工具收集監控數據
近日完成《深入淺出?zabbix 4.0》視頻教程的錄制并正式發布,該教程基于 zabbix 4.2 ,對Zabbix進行全面講解。歡迎大家圍觀。課程鏈接:https://edu.51cto.com/sd/ce000?
在實際環境中,你可能無法在監控設備中安裝標準的Zabbix agent收集監控數據,通過Externalchecks監控方式,可以在Zabbix server上執行腳本或二進制程序收集監控數據。
在使用這種方式前,需要在zabbix-server.conf配置文件中定義腳本或程序的路徑,設置正確的權限能夠讓Zabbix執行。
# vi /etc/zabbix/zabbix-server.conf
ExternalScripts=/usr/lib/zabbix/externalscripts
ExternalScripts 可以使用系統標準的路徑,你也可以指定其他路徑。在這里我們可以把腳本或程序放在這里,并設置相應的權限。
使用External checks時需要注意以下幾點:
在Key語法中支持多個逗號分隔的參數。
在腳本命令中支持用戶定義的宏變量。
External checks通過標準輸出(STDOUT)將錯誤返回,可以在觸發器中進行管理。
支持多行的返回值。
通過External checks可以完成很復雜的監控任務,但是在實際環境中使用時要注意服務器性能的問題,每一次腳本執行時需要Zabbix server啟動一個進程,當有很多腳本運行時會降低Zabbix server的性能。
具體創建External checks監控方式的監控項步驟請參考第三章。
?
為了防止在服務器上運行腳本占用大量資源,影響服務器性能,Zabbix提供了一種方法即UserParameter,我們可以把腳本放到Zabbix agent上運行。
UserParameter是在agent配置文件中定義的。語法如下:
UserParameter=<key>,<command>
User parameter由兩部分組成,一部分是Key,在這里定義的Key在Zabbix server前端頁面中創建item時會用到,并且在引用這個Key的主機中名稱必須是唯一的,Key的名稱中我們可以使用點或下劃線,但不能有空格或其他特殊字符。另一部分是command,是一個可執行的命令或腳本。
在User parameter中定義key時,我們也可以設定參數,這些參數可以傳遞給命令或腳本。語法是:
UserParameter=key[*],command
[*]表示可以傳遞多個參數,對應[*]中參數的位置,在command中可以使用$1,$2,$3 …$9來引用參數,$0代表command本身。如果在使用的命令行中引用$2這種參數,那就需要變成$$2,例如:awk '{print $$2}',在這種情況下$$2實際上引用的是$2參數。另外,像$2這些參數你即使用雙引號(”)或單引號(‘)括起來,它也會正常解析相應位置的參數。
通過Zabbix agent支持User parameter中的命令,最多返回512KB大小的數據。如果達到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] 會把用戶名和密碼傳遞到命令行中參數引用的位置。
UserParameter=wc[*],grep -c"$2" $1
wc[/etc/services,zabbix],計算在services文件中包含zabbix的行數,在這里$2用雙引號括起來后,在命令行中還是會正確引用相應位置的參數。
通常的做法是:
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中的主機上創建一個新的監控項。類型可以是Zabbix agent或者Zabbix agent(active)。如下圖14-1所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
圖 14-1
6、? 打開Monitoring --> Latest data 頁面,稍等片刻后你就能看到httpd process number這個監控項的返回值了。
?
Zabbix也提供了工具用來發送數據到server,這個工具就是zabbix_sender。使用zabbix_sender之前,需要在Zabbix server前端頁面中添加類型為Zabbixtrapper的監控項。如下圖14-2所示。
圖 14-2
Zabbix_sender用法可以通過 -h 閱讀幫助文件,也可以瀏覽Zabbix網站的頁面https://www.zabbix.com/documentation/3.0/manpages/zabbix_sender。下面介紹一些主要的參數和用法。
參數說明:
-c, --config config-file:Zabbix sender從agent配置文件中讀取有關server的信息,如果不使用這個參數,默認Zabbixsender是不讀取配置文件的。config-file必須指定配置文件的絕對路徑。目前僅支持Hostname、ServerActive和SourceIP,ServerActive配置有多個服務器時將使用第一個服務器的配置。
-z, --zabbix-server server:Zabbix server的主機名或IP地址。如果是使用proxy進行監控,這里應該是proxy的主機名或IP地址。如果和--config一起使用,當前該參數的設置將覆蓋配置文件中ServerActive的第一個服務器配置的IP或主機名。
-p, --port port:Zabbix server trapper運行的端口,默認是10051。如果和--config一起使用,當前該參數的設置將覆蓋配置文件中ServerActive的第一個服務器配置的端口。
-I, --source-address IP-address:指定源IP地址。如果和--config一起使用,當前該參數的設置將覆蓋配置文件中SourceIP的設置。
-s, --host host:指定接收監控項數據的主機名稱,在這里不能使用主機IP或DNS主機名。如果和--config一起使用,當前該參數的設置將覆蓋配置文件中Hostname的設置。
-k, --key key:指定發送數據的監控項的key。
-o, --value value:指定監控項的值。
-i, --input-file input-file:從文件中加載發送的數據。指定input-file為 – 時將從標準輸入讀取數據。輸入文件的內容每行的格式為<hostname> <key> <value>,每個參數直接用空格分隔。其中hostname為Zabbix server前端頁面中添加的主機名稱,key為監控項item key,value為監控項的值。如果hostname指定為– 時,hostname將使用agent配置文件中的Hostname或—host參數。例如:
- iostat.avgrq-sz[sda] 39.48? # 使用--host或agent配置文件中Hostname
Server1 db.connections 60?# 主機server1,監控項的key為db.connections,值為60
在Zabbix server前端頁面中必須設置正確的item的值類型,Zabbix sender每次連接能夠發送最多250個值。
下面舉個監控磁盤IO的例子。在本例中通過iostat(sysstat的版本為10.1.5)收集磁盤數據,在模板中定義自動發現規則和item、graph、trigger原型,當模板鏈接到主機后,自動創建item、graph和trigger。在模板中創建一個item,定期收集監控數據。
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、? 創建模板Template IO Trap。如下圖14-3所示。
圖 14-3
4、? 在模板中添加一個名稱為IO的application。
5、? 創建一個名稱為Status的監控項,如下圖14-4所示。
?
圖 14-4
6、? 創建一個觸發器,如下圖14-5所示。
圖 14-5
7、? 創建自動發現規則,定期調用腳本發現磁盤。在腳本中自動生成JOSN格式的數據,例如:
{"data":
[
{"{#DISKNAME}":"sda"},
{"{#DISKNAME}":"sdb"}
]
}
如下圖14-6所示。
圖 14-6
?
8、? 創建item原型。在第5步中創建的監控項會定期調用腳本,腳本中根據iostat命令的返回結果自動生成的Zabbixsender需要的輸入文件。創建item原型時使用輸入文件中的key創建類型為Zabbix trapper的監控項。輸入文件的內容格式如下:
-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參數創建item原型,如下圖14-7所示。
圖 14-7
創建的item原型列表如下圖14-8所示。
圖 14-8
9、? 創建graph原型,如下圖14-9所示。
圖 14-9
graph原型列表如下圖14-10所示。
圖 14-10
10、??將模板Template IOTrap鏈接到主機,然后到Latest data中查看監控數據,如下圖14-11所示。
圖 14-11
Zabbix sender的執行在例子中我們通過一個監控項的查詢來調用腳本,實際上你也可以通過cron來運行腳本。通過定義監控項的方式管理比較方便,Update interval (in sec)等設置的改變都可以在前端頁面中完成,不需要對監控主機做任何操作。
出自?http://ustogether.blog.51cto.com/8236854/1929788,如需轉載請與作者聯系。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。