用python寫一個預警機器人(支援微信

  • 2020 年 1 月 16 日
  • 筆記

背景

線上的系統在運行中,發生故障時怎麼及時的通過手機通知到相關人員?當然這是個很簡單的需求,現有的方法有很多,例如:

如果我們用的雲產品,那麼一般都會有配套對應的監控預警功能,根據需要配置一下即可,支援簡訊,郵箱通知。

如果我們已經搭建了一套運維監控系統,比如zabbix之類的,那麼我們學會zabbix,然後配置也即可,支援簡訊,郵箱通知。

但如果我們希望有一個比較簡單輕便,能靈活訂製和快速實施的方法,又能同時支援微信和釘釘通知呢?以下就介紹這樣一個基於python的簡單方法,暫且起個名字叫robotprobe。

上路

在開始之前,先定義兩種對象,robotprobe將由這兩種對象組成。

Probe:探針,用於檢查檢測某項功能,某個指標是否正常,並包含預警相關規則配置。

Robot:機器人,發生異常情況時,要發送通知的對象,這裡特指微信機器人和釘釘機器人。

Probe

UrlProbe

SqlProbe

其他

其他類型的Probe則可以根據實際需要自由擴展實現。

Robot

WechatRobot

DingTalkRobot

微信VS釘釘

微信機器人基於wxpy實現,wxpy功能很豐富,基本微信上收發消息相關的功能都可以用它來實現,這篇文章有個挺好的使用示例,我們這裡只用到發送消息的功能,微信雖然功能,但有個缺點就是用wxpy發消息(其實是網頁版微信),帳號有可能被封,另外新註冊的微訊號也是不能用的。

釘釘機器人基於DingtalkChatbot實現,優點就是官方默認提供機器人的功能,雖然發消息有限制,但一可以控制發消息的頻率,二也可加多個機器人去分流,缺點就是只能發消息,不收消息,進而根據收到的消息做訂製回復。

Demo示例

依賴

certifi==2019.3.9

chardet==3.0.4

DingtalkChatbot==1.3.0

future==0.17.1

idna==2.8

itchat==1.2.32

PyMySQL==0.9.3

pypng==0.0.19

PyQRCode==1.2.1

requests==2.21.0

requests-toolbelt==0.9.1

schedule==0.6.0

urllib3==1.24.1

wxpy==0.3.9.8