zabbix版本:4.0
系統版本:CentOS 6.8
一、添加Media Types
zabbix通常的預設告警媒介有 Email,Jabber, SMS三種
這裡我們添加自定義腳本來告警,點選右上角的“Create media type“,進入如下圖
Name:顯示的媒介名稱,這裡我們使用Telegram告警
Script name:告警腳本的名稱。注意該腳本需要放在配置檔案zabbix_server.conf所指定AlertScriptsPath目錄下。
Script parameters:傳遞給alert.sh腳本的參數,可以有多個。由官方文檔可知,預設支援的三個告警參數{ALERT.SENDTO}, {ALERT.SUBJECT} 和{ALERT.MESSAGE}。這三個宏變量的代表什麼,後面我會提到。
二、添加Users
這裡我們使用預設的Admin賬号,你也可以根據需要建立其他使用者來關聯警報媒介。
這裡點選 Admin使用者名之後,再選擇Media,點選Add。
彈出如下界面
Tpye : 下拉菜單選擇剛才建立的Telegram
Send to :這裡填的名字,就對應上面的{ALERT.SENDTO}宏變量。
其他預設。
三、添加Actions
要想發送警報消息到媒介,還得添加actions,這裡我們針對某一個特定的觸發器來添加警報消息,下拉菜單選擇 Trigers,點選”Create action“。
然後在 Action标簽下,
Name:設定一個友善記憶的名稱
New condition:第一個下拉菜單選擇Trigger,第二個預設 equals,第三項進一步選擇,找到我要做測試的觸發器”check port 5000 failed“。
然後再Operations标簽下面,點選NEW添加新的Operations。
Send to Users: 點選add,添加Admin使用者。
Send only to : 選擇 Telegram。
Default Message: 可以去掉勾,進一步修改,這裡我們使用預設内容。
Conditions:點選NEW,添加預設的就好。
最後點選Opertaion details 下面 那個add。
添加成功後,就多了一條Operations。
後面的第2和第3個操作,分别代表觸發事件恢複時的動作和更新時的動作,也就是在恢複和更新時,也要發送消息的。我們平時一般就配置了第一個事件觸發的動作就可以了。這裡為了測試,我都配置了。
注意這裡的Default Subject 和 Default message,分别對應前面的兩個{ALERT.SUBJECT} 和{ALERT.MESSAGE}宏變量。
添加action後如上圖,
此時我們回去檢視警報媒介時,Telegram 的Used in actions裡多個我們添加的Test Port Check。
web端的配置已經完成。
四、注冊telegram機器人
前提條件
已經注冊 Telegram 賬号;
賬号最好綁定一個國外手機号(非必要條件),比如 Google Voice,這樣與其他使用者發送消息不受限制;
注冊一個機器人(Bot)
注冊過程很簡單,在 telegram 中添加一個“機器人之父”的賬号,便是 @BotFather 這個賬号:
- 打開與 @BotFather 的對話框
- 發送/start
- 發送/newbot
- 發送 Bot 的名字(昵稱)
- 指定 Bot 的使用者名(ID)
- 得到 Bot 的 token,用于辨別這個 Bot (後面要用到的Token)
- 完成
詳細見附錄:機器人建立示例.
建立一個 Telegram 群組/頻道
一般将機器人用于在群組/頻道内自動推送消息或者回答問題,需要在 Telegram 軟體内建立一個群組或者頻道,移動端/PC/WEB端均可操作,設定群組/頻道的唯一ID,例如 @ABC。
ChatID是群組的ID,官網說使用 @ABC字元串也行,但是我實際使用不行,還得去獲得整數型的ID。
通過api https://api.telegram.org/bot“你的token”/getUpdates 可以傳回 群組的id。
現在我們來看看alert.sh腳本
Token:就是前面注冊時得到的。
CahtID:就是群組ID。
[[email protected] alertscripts]# cat alert.sh
#!/bin/bash
#方式一:直接調用telegram-bot api 接口發送消息
MSG=$1
Token='871811345:AAHj-iZ39yDaxYriVJ1a4xq6k3jdfdfdfdfd'
ChatID='-325439254'
curl -X GET "https://api.telegram.org/bot$Token/sendMessage" -d "chat_id=$ChatID&text=$MSG" 2>1& >> /dev/null
五、原理
zabbix server在警報發生時,由于第一部分,我們在告警媒介裡面隻添加了{ALERT.MESSAGE},是以zabbix server 隻傳遞告警的主體消息給alert.sh腳本,腳本在将消息發送給telegram-bot(telegram機器人),telegram-bot在發送消息到telegram的群裡(一般telegram機器人隻能發送給群)。
六、模拟測試
我們這裡測試的觸發器是監控伺服器上的5000端口,是以我們人為開啟和關閉5000端口。
進入故障詳情檢視如下
teletram搜到的消息為,分别是故障發生和恢複時,
如果我們把上面警告媒介裡宏變量更改為{ALERT.SENDTO},則收到的消息為
如果我們把上面警告媒介裡宏變量更改為{ALERT.SUBJECT},則故障恢複時的消息如下
到此,我們的所有配置就算成功了。
七、附錄:
機器人建立示例:
1.搜尋到機器人@BotFather之後
2.你回複 /start
3.回複 /newbot
4.回複你需要的一個bot名字,如 MyTeleBot
5.再次确認 ,MyTeleBot
6.接下來建立一個群,在群裡添加成員 @MyTeleBot ,之後的消息就會由MyTeleBot發送在這個群裡。
參考文檔:
Zabbix Documentation 4.0 之 自定義警報提示
https://www.zabbix.com/documentation/4.0/zh/manual/config/notifications/media/script
使用 Telegram 機器人發送消息
http://slowread.net/blog/使用-telegram-機器人發送消息/