天天看點

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

zabbix版本:4.0

系統版本:CentOS 6.8

一、添加Media Types

zabbix通常的預設告警媒介有 Email,Jabber, SMS三種 

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

這裡我們添加自定義腳本來告警,點選右上角的“Create media type“,進入如下圖

Name:顯示的媒介名稱,這裡我們使用Telegram告警

Script name:告警腳本的名稱。注意該腳本需要放在配置檔案zabbix_server.conf所指定AlertScriptsPath目錄下。

Script parameters:傳遞給alert.sh腳本的參數,可以有多個。由官方文檔可知,預設支援的三個告警參數{ALERT.SENDTO}, {ALERT.SUBJECT} 和{ALERT.MESSAGE}。這三個宏變量的代表什麼,後面我會提到。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

二、添加Users

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

這裡我們使用預設的Admin賬号,你也可以根據需要建立其他使用者來關聯警報媒介。

這裡點選 Admin使用者名之後,再選擇Media,點選Add。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

彈出如下界面

Tpye : 下拉菜單選擇剛才建立的Telegram

Send to :這裡填的名字,就對應上面的{ALERT.SENDTO}宏變量。

其他預設。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

三、添加Actions

要想發送警報消息到媒介,還得添加actions,這裡我們針對某一個特定的觸發器來添加警報消息,下拉菜單選擇 Trigers,點選”Create action“。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

然後在 Action标簽下,

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

Name:設定一個友善記憶的名稱

New condition:第一個下拉菜單選擇Trigger,第二個預設 equals,第三項進一步選擇,找到我要做測試的觸發器”check port 5000 failed“。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

然後再Operations标簽下面,點選NEW添加新的Operations。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:
zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

Send to Users: 點選add,添加Admin使用者。

Send only to : 選擇 Telegram。

Default Message: 可以去掉勾,進一步修改,這裡我們使用預設内容。

Conditions:點選NEW,添加預設的就好。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

最後點選Opertaion details 下面 那個add。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

添加成功後,就多了一條Operations。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

後面的第2和第3個操作,分别代表觸發事件恢複時的動作和更新時的動作,也就是在恢複和更新時,也要發送消息的。我們平時一般就配置了第一個事件觸發的動作就可以了。這裡為了測試,我都配置了。

注意這裡的Default Subject 和 Default message,分别對應前面的兩個{ALERT.SUBJECT} 和{ALERT.MESSAGE}宏變量。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

添加action後如上圖,

此時我們回去檢視警報媒介時,Telegram 的Used in actions裡多個我們添加的Test Port Check。

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

web端的配置已經完成。

四、注冊telegram機器人

前提條件

已經注冊 Telegram 賬号;

賬号最好綁定一個國外手機号(非必要條件),比如 Google Voice,這樣與其他使用者發送消息不受限制;

注冊一個機器人(Bot)

注冊過程很簡單,在 telegram 中添加一個“機器人之父”的賬号,便是 @BotFather 這個賬号:

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:
  1. 打開與 @BotFather 的對話框
  2. 發送/start
  3. 發送/newbot
  4. 發送 Bot 的名字(昵稱)
  5. 指定 Bot 的使用者名(ID)
  6. 得到 Bot 的 token,用于辨別這個 Bot (後面要用到的Token)
  7. 完成

詳細見附錄:機器人建立示例.

建立一個 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端口。

進入故障詳情檢視如下

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

teletram搜到的消息為,分别是故障發生和恢複時,

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

如果我們把上面警告媒介裡宏變量更改為{ALERT.SENDTO},則收到的消息為

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

如果我們把上面警告媒介裡宏變量更改為{ALERT.SUBJECT},則故障恢複時的消息如下

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

到此,我們的所有配置就算成功了。

七、附錄:

機器人建立示例:

1.搜尋到機器人@BotFather之後

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

2.你回複 /start

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

3.回複 /newbot

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

4.回複你需要的一個bot名字,如 MyTeleBot

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

5.再次确認 ,MyTeleBot

zabbix 通過 telegram-bot 發送告警資訊一、添加Media Types二、添加Users三、添加Actions四、注冊telegram機器人五、原理六、模拟測試七、附錄:

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-機器人發送消息/