一千萬個為什麽

搜索

監控/警報系統,可以支持非常任意的數據源和邏輯



我正在尋找可以支持非常任意數據源和邏輯的監控/警報工具/系統。

(以下是一個更容易證明我的需求的例子)

我有一個數據庫,可以在其中查找我的客戶(它們是各個公司)的查詢執行時間。由於每個公司的數據,客戶之間的查詢時間預計會有很大差異。我希望在客戶的查詢時間超過過去的某個中間值的%時,以及我將周一的數據與以前的星期一數據進行比較(我很難用於演示目的)時要提醒。

我想避免為每個公司客戶定義一個單獨的警報。

我想避免為我想監視的每種查詢定義單獨的警報。

我想避免讓每個數據源預先將數據推送到一個中心位置。

我想監視一些與數據庫無關的其他事情,並希望為我的警報應用一些完全不同的邏輯 - 例如一些REST API調用某個其他系統,或一些ELK或時間序列數據,或一些硬件監控數據。

我正在考慮定制解決方案,但想知道是否已有解決方案可滿足我的一些或更多需求。我已經看到/使用過一些監控解決方案,例如Nagios,盡管不是這方面的專家。將欣賞任何指針或建議。

轉載註明原文: 監控/警報系統,可以支持非常任意的數據源和邏輯

一共有 4 個回答:

考慮使用諸如 nagios的zabbix 。盡管避免自定義查詢和警報可能會很好,但這是不可能的。在您的配置中使用您的特定工具套件的人幾率很小,並且在該特定配置中對該套件進行預先監視的可能性甚至更小。簡而言之,無法避免這種自定義監控。雖然監控,警報和報告管理和配置可能很乏味,但要做到這一點並不容易,因此可能需要更多時間,精力和資源才能正確執行。

在我廣泛使用的4個監控系統中,我必須推薦nagios - 它似乎最適合配置管理系統,並且最符合DevOps理念。

使用諸如彈性警報或類似系統的系統作為警報/監控/報告的中間件有時可能是有用的,但是您將不得不逐個判斷每個情況/監控器,但您會發現這些工具(和大多數監控系統)都有一些SDK,API或工具能夠幫助您進行監控定制。只需選擇最簡單的配置系統,投資回報率和支持成本最低,並確保堅持使用它,並按照您的監控遷移項目完成。如有可能,請務必考慮專門的資源/人員來完成此任務。

在我的列表中添加我的磚塊,我正在不斷更新監控系統以添加新實例和清理舊實例,這是一個痛苦。

因此,我已轉向使用簡單合同的 prometeus ,出口商負責收集工作(可能是<�在AWS上或使用 cloudwatch_exporter =“noreferrer”> netdata 查詢它(中央一個或每個單獨的,但後者失去了自動發現的優勢)(doc為netdata部分 here ),還有一個prometeus團隊的節點出口商。

prometheus的主要優勢在於使用數學函數,並通過標簽從警報定義中分組度量標準名稱。這允許以各種方式定義警報,對於我的基礎架構監控,我使用標準偏差或標準差異來避免CPU使用情況的固定警報級別,它告訴我stddev是否上升了20%。

因此,為了您的情況,您可以導出數據庫或將指標推送到prometeus,並假設客戶名稱為 client 的指標名稱 client_queries ,您可以沿著行這(當然未經測試,只是為了說明):

ALERT ClientQueryDriftUp
  IF avg(client_queries[5m]) > avg(client_queries[5m] offset 1w) * 1.2
  ANNOTATIONS {
    summary = "{{ $labels.client }} query has gone up over 20% of last week",
    description = "{{ $labels.client}} query average is high ! (current average value: {{ $value }}s)",
  }

或者,如果您只是在平均值超過1秒(假設值以毫秒為單位)之間的差異情況下需要警報,則可以使用此IF條件:

abs(avg(client_queries[5m]) - avg(client_queries[5m] offset 1w)) > 1000

當然,這個答案只是關於它如何解決你的問題的一個概述,而且還不夠詳盡。

我建議 elastalert 作為elasticsearch的警報系統,它具有驚人的功能,您可以執行任何查詢彈性搜索並根據響應定義警報,並支持多種警報方式,例如發送電子郵件或閑置或電報,甚至執行特定命令。

對於elasticsearch中的監視器數據,因為您已經在使用ELK,您可以使用Kibana進行監視,不僅用於進行彈性搜索查詢並創建非常有價值的儀表板

對於硬件和服務,我認為Nagios在那裏做得非常好,但為了更簡單的解決方案,您可以使用 Monit < a>它的使用和配置非常簡單,並且可以執行大量的作業和服務管理,但與使​​用ELK一樣,您可以配置 metricbeat 來監控服務器(CPU,RAM,磁盤使用情況等)

對我而言,我認為最好的做法是使用ELK來進行所需的所有集成,這將使您能夠更專註於集中監視和警報系統

為此,我們使用Datadog的異常檢測:

https://www.datadoghq.com/blog/introducing-anomaly-detection -datadog/

我們推送自定義指標,在您的情況下,這些指標就像查詢執行時間由客戶端名稱標記的一樣,您可以創建單個多顯示器,根據此指標上的異常行為進行提醒。