環境centos6.8
zabbix版本3.2.4
需求:
要遠程監控一台服務器A,但只能通過遠程服務器連接本地服務器B,但B不能主動連A(因為A沒有固定公網ip)
使用了zabbix_agent的active模式,但這種模式不能使用ping方式確定agent是否存活,使用觸發規則nodata測試
A服務器網絡不穩定,很容易誤觸發規則(若有大神評論區教教我,是不是我哪里設置錯了)
最后
究其原因,主要是使用觸發器失敗,改用了這種方法,當做心跳線使用
zabbix官方文檔:https://www.zabbix.com/documentation/3.2/manual/config/triggers/expression
實施例8
最近3分鍾內沒有心跳
使用函數nodata():
{zabbix.zabbix.com:tick.nodata(3m)}=1
'tick'必須有“Zabbix trapper”類型。為了使此觸發器工作,必須定義項目'tick'。主機應使用zabbix_sender定期發送此參數的數據。如果在180秒內沒有收到數據,則觸發值成為問題。
一、zabbix-sender介紹
zabbix_sender是一個命令行工具,可以用來發送Zabbix服務器處理性能數據。該工具通常用於長時間運行的用戶腳本,用於定期發送可用性和性能數據。
zabbix獲取key值有超時時間,如果自定義的key腳本一般需要執行很長時間,這根本沒法去做監控,那怎么辦呢?
使用zabbix監控類型zabbix trapper,需要配合zabbix_sender給它傳遞數據。關於trapper的用法,我們來弄個實例。
執行超長時間腳本,如:腳本去幾十台服務器拉去數據,每個日志都上G,然后日志整合在一起,統計出返回值。這種腳本比如超時,所以我們必須改成讓客戶端提交數據的方式。
這里是zabbix-sender設計的初衷,被我這樣用也是無奈!!
二、zabbix_sender命令詳解
[root@localhost]# ./zabbix_sender usage: zabbix_sender [-Vhv] {[-zpsI] -ko | [-zpI] -T -i <file> -r} [-c <file>] 參數說明: -c --config <file> 配置文件絕對路徑 -z --zabbix-server <server> zabbix server的IP地址 -p --port <server port> zabbix server端口.默認10051 -s --host <hostname> 主機名,zabbix里面配置的主機名(不是服務器的hostname),不能使用ip地址 -I --source-address <IP address> 源IP -k --key <key> 監控項的key -o --value <key value> key值 -i --input-file <input file> 從文件里面讀取hostname、key、value 一行為一條數據,使用空格作為分隔符,如果主機名帶空格,那么請使用雙引號包起來 -T --with-timestamps 一行一條數據,空格作為分隔符: <hostname> <key> <timestamp> <value>,配合 --input-file option,timestamp為unix時間戳 -r --real-time 將數據實時提交給服務器 -v --verbose 詳細模式, -vv 更詳細
三、zabbix_sender應用實例
zabbix獲取數據有超時時間,如果一些數據需要執行比較長的時間才能獲取的話,那么zabbix會出現異常,考慮到這種情況,zabbix增加了Trapper功能,客戶端自己提交數據給zabbix,這個通道便是trapper.
使用trapper的步驟如下:
- 在zabbix中配置trapper監控項
- 傳遞數據到zabbix中
1、進入zabbix web界面選擇一台主機(或模板)--items--Create item 定義一個key用來接受客戶端的sender,如下圖:
(1)我采用的是模板添加,方便以后統一添加
(2)也可以采用hosts添加items
這里的幾幅圖看不清楚,博客園貌似圖片有限制加上小圖
###############################
之前百度了許多關於sender的內容,但都是2.2或2.4版本,比較老,3.2.4還是有些不一樣的
到這里創建items成功
(這里的key是自定義的,在使用sender時需要用到,大概是秘鑰配對的感覺,不知道對不對)
2、回到客戶端使用以下命令sender數據
zabbix_sender -s "126" -z 192.168.1.104 -p 10050 -k "trap" -o 1
這里
- -s后面跟的參數是agent端的hostname
- -z后面跟的參數是server端的ip
- -p后面跟的參數是server端的端口(不寫默認為10051)
- -k就是剛剛建items時自定義的key值-o是你想發送的數據(要是選擇的txt接收模式,也可以為字符)
[root@localhost.localdomain 五 4月 28 14:52:32 ~]# zabbix_sender -s "126" -z 192.168.1.104 -k "trap" -o 1 info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000050" sent: 1; skipped: 0; total: 1
這里會提示是否正確發送,若failed是1,表示有一個失敗,即發送消息失敗,這里s跟k參數最好都加上引號,之前就是這個原因一直失敗
3、再回到zabbix web端選擇前面的主機--點擊Latest data 如下圖:
這時看見在這里是沒有數據的,這里就跟2.4版本不一樣了
我只用數字1表示有信號
這里就告一段落了
4、添加觸發器
這里的觸發規則,具體的我也不會,我只是套用了模板,使用trap這個key鍵,語句是nodata,然后再設置對應的參數,這里具體的要看官方文檔了
到這里就設置好了server端
5、客戶端添加腳本
再到agent端
zabbix_sender -s "126" -z 192.168.1.104 -k "trap" -o 1
添加執行權限
chmod +x zabbix_sender.sh
添加定時計划
* * * * * /usr/local/src/zabbix_sender.sh
然后就能運行了
這樣就算一個完整的報警了,雖然很爛