2016-12-06 61 views
0

我正在製作一個在nginx負載均衡器後面有多個rails服務器的生產應用程序。我們用monit監控sidekiq進程,並且它工作得很好 - 當sidekiq進程死亡時,monit會立即啓動它。你如何監測sidekiq進程?

但是最近遇到這種情況,其中一個進程正在運行,monit可見,但由於某些原因,sidekiq不可見。這導致了許多失敗的工作,並花了我們一些時間來注意到我們錯過了sidekiq Web UI中的一個進程,因爲monit告訴我們一切正常,所有進程都在運行。簡單的重啓解決了問題。

這讓我想到我的問題:你如何監視你的sidekiq進程?我知道當工作失敗時,我可以使用滾動條等方式通知我,但我想知道是否有方法監視進程計數,並且最好在發生死機時發送郵件。有什麼建議麼?

東西會ping sidekiq/stats並驗證響應。

回答

0

我們遇到了這個問題,我們的sidekiq進程在一夜之間停止了工作,我們不知道。我們花了大約30分鐘的時間通過遵循這些instructions來整合http://deadmanssnitch.com

這不是最漂亮或最便宜的選擇,但它完成了工作(與Pagerduty很好地集成在一起),並且在過去幾個月中節省了兩次。

我們對服務的抱怨是最短的寬限間隔,我們可以設置爲15分鐘,這對我們來說太長了。因此,我們正在評估類似的服務,如健康檢查等

0

我的做法是這樣的:

  1. 創建一個後臺作業,做的東西
  2. 呼叫工作定期
  3. 檢查的是正在完成!

so;使用cron腳本(或類似的東西whenever)每5分鐘,我跑:

CheckinJob.perform_later 

這是到現在爲止sideqik(或delayed_job的,或任何活動作業您正在使用),以實際運行工作。

該工作只需要做一些你可以檢查的東西。

我曾經獲得工作來更新我的狀態表(實質上是一個鍵/值記錄列表)中的記錄。然後我有一個/status頁面,如果記錄在最近6分鐘內沒有更新,它將返回一個:500狀態碼。

(顯然您的時間可能有所不同)

然後我用一個監控服務狀態進行監控頁面!(類似於StatusCake

現在我有一個更簡單的方法;我剛剛得到的後臺作業與一個cron監控服務爲您在像

它期望你的任務是在每X分鐘檢查的監控服務。如果你的任務沒有登記 - 那麼監測服務會讓你知道。

對於所有的服務來說,集成是非常簡單的。對於它的工作將是:

IsItWorkingInfo::Checkin.ping(key:"CHECKIN_IDENTIFIER") 

充分披露:我寫了IsItWorking!