Superlance - Supervisor 程式監控訊息通知外掛


Supervisor + Notification
Superlance 是一個依附在 Supervisor 上的訊息通知外掛程式, 主要功能是偵測到程式異常毀損時可以發送電子郵件或SMS簡訊通知。會知道這個外掛是因為 team 裡的夥伴在使用它時有些小問題發生, 在幫忙排除因素、解決問題後, 決定簡短寫一篇文章來紀錄一下這個方便的小外掛。Superlance 尤其對於那些已經導入使用 Supervisor 的專案, 維護人員只需要額外多花五分鐘就可以快速替系統設定並處理好錯誤通知, 似乎也算是個不錯的解決方案。另外您也可以考慮試著將 Superlance 整合 NagiosCacti 來讓 cluster 的監控流程更加完善與方便。


如何開始:

  1. 首先要安裝 Supervisor
  2. 接下來安裝 Superlance (其實只是設定 PATH 和複製 Python 的 egg 檔而已)
    easy_install superlance
  3. 在 supervisord.conf 裡設定 eventlistener
    [eventlistener:crashmail]
    command=crashmail -p program1 -p group1:program2 -m [email protected]
    events=PROCESS_STATE_EXITED
    
    或是設定成全部使用 Supervisor 管理的程式都需要通知
    [eventlistener:crashmail]
    command=crashmail -a -m [email protected]
    events=PROCESS_STATE_EXITED
    
  4. 接著開啟 Supervisor 的管理介面就可以看到畫面中多了 crashmail 這個程式 (下圖是擷取 web 管理介面)
    新增 Superlance 的 crashmail 成功畫面
  5. 安裝完成!

如何測試:


安裝完之後要如何測試這個功能是否正常運作呢? 由於程式毀損或是異常關閉, 會進入一個非預期例外 (unexpected exception) 的狀態, 於是我們可以嘗試強迫讓被監控的程式進入到這個狀態來達到我們測試的目的。所以我們可以利用下面的指令來強迫關閉任何一個 Supervisor 正在管理的程式來看看 crashmail 有沒有正常寄信:
pkill -9 crashmail
如果您的 Sendmail 有設定正確 (沒錯, crashmail 只是單純的呼叫 /usr/sbin/sendmail -t -i 這個指令), 接著您就會在您的信箱裡看到 crashmail 寄來的通知訊息了:
Superlance 程式異常錯誤通知訊息
恭喜您, 這樣就一切大功告成了, 是不是很容易而且快速啊!


常見問題:

  1. 為什麼我強制關閉程式沒有寄信?

    可以注意看看您使用的 pkill 或 kill 有沒有加上 -9 (或是其他數字) 的參數, 如果沒有加上這個參數, 預設是是送出 TERM 這個 signal 給程式, 這就會造成程式進入預期例外 (expected exception)。所以 crashmail 就不會寄信了。

  2. 我改成 events=PROCESS_STATE_STARTING 想要在程式啟動時寄通知為什麼不行?

    因為這個 plugin 叫做 crashmail, 所以自然而然是給程式在崩壞時寄通知的。如果好奇去看也會發現作者在原始碼裡是寫著只有在 PROCESS_STATE_EXITED 的狀態下才會繼續執行其他動作, 所以如果您需要更多不一樣的 eventlistener, 現在就開始動手吧。

延伸閱讀:

留言