2016-06-21 27 views
-1

我一直在研究一個單獨的盒子應用程序,該應用程序大量使用代碼關鍵指標進行檢測。現在我們正在轉向雲計算,並且我有如下問題可以在應用程序分發時監控指標。分佈式度量

  • 是否有指標記者可以將指標數據寫入Cassandra?
  • 如果數據庫中每臺服務器都有記錄,何時以及如何進行聚合?
  • 我可以定義指標數據保存到數據庫的時間間隔嗎?
  • 是否有任何內置的框架可以實現這一目標?

非常感謝,感謝您的幫助。

回答

0

我首先回答你的問題,但我認爲你誤解了如何使用度量。

  1. 你可以很容易地谷歌。我不知道任何(我也不明白你會用卡桑德拉做什麼?)。你通常會使用像石墨那樣的東西。無論如何,記者的實施非常簡單直接。

  2. 這個問題沒有太大意義。爲什麼你會聚合超過2個不同的服務器 - 它們是獨立的。您的每個受監視實例都應該是獨立的。聚合發生在接收端(例如石墨)

  3. 您可以 - 請參閱1.編寫記者並進行相應配置。

  4. 不是我所知道的。

我們的指標一般:

我以爲你是錯誤的想法。您可以監控X服務器,這根本不是問題,但您不應該在客戶端(或數據庫端)進行彙總。那甚至會如何工作?重新啓動零客戶端,實質上這意味着您需要跟蹤每臺服務器的狀態,以便您的聚合確實有效。你如何管理中斷?

的方式,你應該監視服務器與指標:

io.my.server {}主機名.my.metric

現在創建一個命名空間中有X個不同的名稱空間,但它們都有一個共同的前綴。這意味着,你已經分組了他們。

  1. 將它們發送到您的首選監控解決方案。

有堆在那裏。我不明白你爲什麼希望這成爲卡桑德拉 - 你從中獲得什麼樣的優勢?例如http://graphite.wikidot.com/是一個圖解解決方案。您的應用程序可以自動提交數據(石墨帶有一個可以使用的java記者)。有關它的外觀,請參閱http://graphite.wikidot.com/screen-shots

重點是石墨(以及所有或大多數提供者)知道如何處理您的名稱空間。例如。也看看Zabix,它可以做同樣的事情。

  • 聚合
  • 現在聚集發生在接收側。您的提供者知道如何做到這一點,並且您可以定義規則。

    例如,你可以通配符提醒,如:

    io.my.server.{hostname}.my.metric.count > X 
    

    石墨(我相信)甚至支持運營,e.g:

    sum(io.my.server.{hostname}.my.metric.request) - which would sum up ALL your hosts's requests 
    

    這就是聚集發生。在這一點上,你的服務器再次是獨立的(它們應該),並且不依賴於彼此或任何監控數據庫等。它們只是報告他們自己的指標(這是他們應該做的)和你 - 作爲這些指標 - 負責在接收端製作正確的警報/聚合/編制者。

    在服務器端彙總這將涉及:

    • 發現所有其他服務器
    • 監視其狀態
    • 接收/發送指標來回
    • 同步他們報什麼等

    這聽起來像維護的噩夢:)我希望給你一些內部/想法。

    (免責聲明:無論是一個指標開發淖爾石墨開發 - 這是我多麼過去這樣做/我仍然使用的方法)

    編輯:

    考慮到您的意見,這裏是你想達到什麼我的兩個最喜歡的解決方案:

    1. DB

    您可以使用DB和存儲日期如用於開始消息和結束消息。 這不是一個公制的東西,所以可能不是首選。根據你的問題,你可以寫你自己的記者,但是對於upserts/updates等,它會變得複雜。我認爲選項2更容易,而且更有潛力。

  • 日誌
  • 這是我想你需要什麼。您的服務器獨立登錄開始/停止/暫停等 - 無論您想要報告。然後,您設置logstash並收集這些日誌。 Logstash讓你隨着時間的推移跟蹤這些事件,並在其上創建指標,請參閱:

    https://www.elastic.co/guide/en/logstash/current/plugins-filters-metrics.html

    或者:

    https://github.com/logstash-plugins/logstash-filter-elapsed

    第一個使用實際的指標。第二個是不同的插件,只是測量啓動/停止事件之間的時間。

    這是最具潛力的選項,因爲它不依賴任何格式/任何數據存儲或其他任何數據存儲。如果您使用整個ELK堆棧,甚至可以將Kibana用於繪製盒子。

    說你想測量你的消息。您只需查找日誌,就不會涉及應用程序更改。該解決方案甚至不涉及您的應用程序(例如,手動存儲您的報告數據會佔用應用程序中的線程和處理,因此如果您需要實時兼容,這會使整體性能下降),因此它是完全獨立的解。稍後,當想測量其他指標時,您可以輕鬆地添加到logstash配置並開始執行其他指標。

    我希望這可以幫助

    +0

    感謝您的回覆。我正在研究應用程序級別的工具,而不是系統級別的指標。比方說,我想知道系統處理單個傳入消息需要多長時間,並且如果有一個服務器羣集,我將無法找出哪個服務器處理了哪條消息以及處理了多長時間。作爲一個整體,每個客戶我都應該能夠說系統每秒鐘處理了很多消息。對不起,如果我最初的問題沒有傳達相同的。謝謝你的幫助。 – Neoster

    +0

    @Neoster我用更多的信息更新了我的答案 – pandaadb