2013-06-04 22 views
4

我有一個Nagios配置,它在幾百個節點上執行一些測試;其中之一是check_http的變體。它沒有配置爲--enable-embedded-perl(ePN),但我們很快就會改變。即使啓用了ePN,我也很關心這種Perl HTTP + SSL檢查每次執行只處理一個目標的模型。用自定義(選擇/輪詢驅動)守護程序替換Nagios HTTP?

我想編寫一個簡單的選擇()(或輪詢()/epoll的())驅動守護它創建併發多重目標的連接,讀取結果,並吐出導致形式可用於Nagios,就好像它是被動檢查的結果一樣。

有沒有關於如何做到這一點的指導?用於向Nagios提供批量檢查更新的界面或API是什麼?

我正在考慮的一個破解是讓我的守護程序更新Redis存儲(每個目標有一個密鑰,並且過期時間很短),並將check_http替換爲本地Redis實例的一個非常小的輕量級GET關鍵字(GET會得到Nagios的實際結果或「(無)」響應,將被視爲HTTP連接已超時。

但是,我對我的想法也有些懷疑因爲我認爲現在有人已經有這樣的事情了。

(順便說一下:我已經準備好轉向IcingaZabbixZenossOpenNMS ......幾乎所有可以縮放的東西)。

回答

2

至於是否讓Nagios處理調度和檢查,我會把它留給你,因爲它取決於你的Nagios版本(新版本可以同時運行這些檢查),以及爲什麼你需要一個單獨的守護進程。版本3的Nagios的版本控制IIRC使用併發檢查,並因此擴展到比您報告的更大的節點數量。

但是,我可以回答Redis路由概念,因爲我使用Postfix隊列統計信息和TTFB跟蹤網站來完成此任務。

使用Python和curl和multiprocessing模塊設置檢查非常簡單,就像將其轉儲到Redis中一樣。我認爲不超過這個時間間隔將是一個堅定的想法,以防止數據庫的增長。我建議這個值不要超過(或者可能小於)檢查間隔,以免抓取陳舊的檢查結果。如果當前運行的支票尚未完成,並且運行Redis-to-Nagios支票,則拉動先前的支票,則可能錯過未通過的支票。

對於Redis-To-Nagios檢查一個簡單的redis-cli + bash腳本或Python檢查來爲給定主機提取數據,返回OK或以其他方式取決於您的數據是相當簡單並且運行速度足夠快。

我建議在Nagios檢查服務器上運行Redis實例,以確保最小延遲並避免網絡問題導致您的檢查出現虛假警報。我還會推薦你的Redis實例和檢查守護進程的Nagios檢查。使check_http替換檢查取決於運行的Redis和http_check守護進程。因此,您擁有依賴鏈如下:

Redis -> http_checkd -> http_check_replacement 

這將通過識別問題來防止http_check_replacement上的錯誤警報。例如,如果你的redis_checkd死亡,你會得到警報,而不是200 +「失敗的http_check_replacement」。

另外,由於您在Redis中的數據是根據定義爲瞬態的,因此我將禁用磁盤持久性。數據不斷旋轉時無需寫入磁盤。

在附註上,如果使用libcurl,我建議您從libcurl中獲取統計信息,瞭解打開連接需要多長時間以及服務器響應多長時間(Time To First Byte - TTFB) Nagios能夠存儲檢查統計數據的優勢。您很可能會有一段時間讓這些數據非常方便進行故障排除和性能分析。

我有一個CLI工具,我用C編寫了這個工具,並將其上傳到本地的Redis實例中。它速度很快 - 幾乎不會超過獲取URL的時間。我期待本週開源,我可以很容易地爲它添加Nagios風格的輸出。事實上,我想我會在接下來的一兩週內這樣做。