- 有的時候zabbix提供的監控項目,不能滿足我們生產環境下的監控需求,此時我們就要按照zabbix的規范自定義監控項目,達到監控的目的
- zabbix_get:模擬zabbix_server和agent獲取數據
- 相關概念
- item: Items是從agnet主機里面獲取的所有數據。通常情況下我叫itme為監控項,item由key+參數組成
- Key:我們可以理解為key是item的唯一標識,在agent端有很多監控項,zabbix-server根據key區分不同的監控項
- trigger:觸發器是建立在item數據上的,具有閾值觸發事件的功能
基本格式: :.()}
server:agent名稱,加入主機時配置的
key:就是上面說的key
function:對閾值進行操作的函數,以下函數
operate:表達式
constant:常量
例如:{docker02:proc.mysql.last()}<>1
- 不用擔心trigger表達式不好寫,在定義好item后,在zabbix點點就自動生成了
zabbix_get -s 192.168.56.131 -p 10050 -k "proc.item[/usr/sbin/mysqld,mysql]" 【option】 # -s:指定agent地址 # -p:agent端口 # -k:指定item的key # [/usr/sbin/mysqld,mysql]:向腳本傳遞了兩個參數,用逗號分隔
* 下面以監控mysql進程為例,做了自定義監控
1. zabbix_server與zabbix_agent
- zabbix_server通過發送key給zabbix_agent,然后agent端口根據key,把所要監控的item的最新數據返回給server端
2. 自定義監控項
- 自定義腳本格式
key[*],[command|sh] # <key[參數]>,<命令或者腳本> # [*]:固定格式,表示server端是否傳過來參數,在命令或者腳本中用$1,23...引用,shell腳本中的引用$$1,2,3..引用, # 如果server端不傳參數,[*]可以不寫
2.1 修改agent端配置文件,自定義key
sudo vim /etc/zabbix/zabbix_agentd.conf
- 做以下修改
UnsafeUserParameters=1 # 默認為0,表示不允許自定義key # 監控mysql進程是否存在,[*]因為不需要server端傳遞參數,所以沒寫 UserParameter=proc.mysql,ps -ef|grep /usr/sbin/mysqld|grep -v grep|wc -l
2.2 web頁面配置,加入自定義監控項
- 【配置】->【主機】,點擊所要監控的主機
- 點擊【監控項】
- 點擊右上角【創建監控項】
- 創建監控項
- 這里的key值對應我們在agent端自定義的key
- 重啟agent服務
sudo service zabbix-agent restart
- 查看item返回的數據:【檢測中】->【最新數據】
從圖中可以看到,mysql監控項返回的數值是1,說明mysql的進程數為1,代表mysql運行正常,如果想要可以郵件報警,可以給這個自定義的item添加觸發器,參考“監控進程和端口號”一章
3. 執行腳本練習
- 執行自定義腳本監控,agent通過server端發來的參數,執行腳本返回一個結果給server
- 修改zabbix_agent配置文件,添加自定義key
sudo vim /etc/zabbix/zabbix_agentd.conf
- 做以下修改
UserParameter=proc.item[*],/home/tuna/shelles/zabbix/user_defined.sh $1 $2 # server端要向agent端發送兩個參數
- 寫腳本
vim user_defined.sh #!/bin/bash PROC=$1 # 接收用於匹配進程的字段 USER=$2 # 接收進程的開啟者 ps -ef|grep "$PROC"|grep -v grep|awk '{if($1=="'$USER'"){print $2}}'|wc -l
- 測試一下
zabbix_get -s 192.168.56.131 -p 10050 -k "proc.item[/usr/sbin/mysqld,mysql]"
# [/usr/sbin/mysqld,mysql]:模擬server端向agent端發送了兩個參數,分別是/usr/sbin/mysqld用於匹配進程,mysql:進程的所有者
- 接着就一樣的配置監控項就可以了