open-falcon的學習

  • 強大靈活的數據採集:自動發現,支持falcon-agent、snmp、支持用戶主動push、用戶自定義插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags)

  • 水平擴展能力:支持每個週期上億次的數據採集、告警判定、歷史數據存儲和查詢

  • 高效率的告警策略管理:高效的portal、支持策略模板、模板繼承和覆蓋、多種告警方式、支持callback調用

  • 人性化的告警設置:最大告警次數、告警級別、告警恢復通知、告警暫停、不同時段不同閾值、支持維護週期

  • 高效率的graph組件:單機支撐200萬metric的上報、歸檔、存儲(週期爲1分鐘)

  • 高效的歷史數據query組件:採用rrdtool的數據歸檔策略,秒級返回上百個metric一年的歷史數據

  • dashboard:多維度的數據展示,用戶自定義Screen

  • 高可用:整個系統無核心單點,易運維,易部署,可水平擴展

  • 開發語言: 整個系統的後端,全部golang編寫,portal和dashboard使用python編寫。

spacer.gifwKioL1ZmT4uTS57mAACxDOY6E-s451.png

每臺服務器,都有安裝falcon-agent,falcon-agent是一個golang開發的daemon程序,用於自發現的採集單機的各種數據和指標,這些指標包括不限於以下幾個方面,共計200多項指標。

  • CPU相關

  • 磁盤相關

  • IO

  • Load

  • 內存相關

  • 網絡相關

  • 端口存活、進程存活

  • ntp offset(插件)

  • 某個進程資源消耗(插件)

  • netstat、ss 等相關統計項採集

  • 機器內核配置參數

Data Model是否強大,是否靈活,對於監控系統用戶的“使用效率”至關重要。比如以zabbix爲例,上報的數據爲hostname(或者ip)、metric,那麼用戶添加告警策略、管理告警策略的時候,就只能以這兩個維度進行。舉一個最常見的場景:

hostA的磁盤空間,小於5%,就告警。一般的服務器上,都會有兩個主要的分區,根分區和home分區,在zabbix裏面,就得加兩條規則;如果是hadoop的機器,一般還會有十幾塊的數據盤,還得再加10多條規則,這樣就會痛苦,不幸福,不利於自動化(當然zabbix可以通過配置一些自動發現策略來搞定這個,不過比較麻煩)。

open-falcon,採用和opentsdb相同的數據格式:metric、endpoint加多組key value tags,舉兩個例子:

wKioL1ZmUXHTtVEAAADi52mePXo016.png通過這樣的數據結構,我們就可以從多個維度來配置告警,配置dashboard等等。 備註:endpoint是一個特殊的tag。

transfer,接收客戶端發送的數據,做一些數據規整,檢查之後,轉發到多個後端系統去處理。在轉發到每個後端業務系統的時候,transfer會根據一致性hash算法,進行數據分片,來達到後端業務系統的水平擴展。

transfer 提供jsonRpc接口和telnet接口兩種方式,transfer自身是無狀態的,掛掉一臺或者多臺不會有任何影響,同時transfer性能很高,每分鐘可以轉發超過500萬條數據。

transfer目前支持的業務後端,有三種,judge、graph、opentsdb。judge是我們開發的高性能告警判定組件,graph是我們開發的高性能數據存儲、歸檔、查詢組件,opentsdb是開源的時間序列數據存儲服務。可以通過transfer的配置文件來開啓。

transfer的數據來源,一般有三種:

  1. falcon-agent採集的基礎監控數據

  2. falcon-agent執行用戶自定義的插件返回的數據

  3. client library:線上的業務系統,都嵌入使用了統一的perfcounter.jar,對於業務系統中每個RPC接口的qps、latency都會主動採集並上報

說明:上面這三種數據,都會先發送給本機的proxy-gateway,再由gateway轉發給transfer。

Alerting

報警判定,是由judge組件來完成。用戶在web portal來配置相關的報警策略,存儲在MySQL中。heartbeat server 會定期加載MySQL中的內容。judge也會定期和heartbeat server保持溝通,來獲取相關的報警策略。

heartbeat sever不僅僅是單純的加載MySQL中的內容,根據模板繼承、模板項覆蓋、報警動作覆蓋、模板和hostGroup綁定,計算出最終關聯到每個endpoint的告警策略,提供給judge組件來使用。

transfer轉發到judge的每條數據,都會觸發相關策略的判定,來決定是否滿足報警條件,如果滿足條件,則會發送給alarm,alarm再以郵件、短信、米聊等形式通知相關用戶,也可以執行用戶預先配置好的callback地址。

用戶可以很靈活的來配置告警判定策略,比如連續n次都滿足條件、連續n次的最大值滿足條件、不同的時間段不同的閾值、如果處於維護週期內則忽略 等等。

+


另外也支持突升突降類的判定和告警。

Query

到這裏,數據已經成功的存儲在了graph裏。如何快速的讀出來呢,讀過去1小時的,過去1天的,過去一月的,過去一年的,都需要在1秒之內返回。

這些都是靠graph和query組件來實現的,transfer會將數據往graph組件轉發一份,graph收到數據以後,會以rrdtool的數據歸檔方式來存儲,同時提供查詢RPC接口。

query面向終端用戶,收到查詢請求後,會去多個graph裏面,查詢不同metric的數據,彙總後統一返回給用戶。

Dashboard

dashboard是面向用戶的查詢界面。在這裏,用戶可以看到push到graph中的所有數據,並查看其趨勢圖

Fe

這是Go版本的UIC,也是一個統一的web入口,因爲監控組件衆多,記憶ip、port去訪問還是比較麻煩。fe像是一個監控的hao123

Portal

Portal是用來配置報警策略的

HBS(Heartbeat Server)

心跳服務器,公司所有agent都會連到HBS,每分鐘發一次心跳請求。

Judge

Judge用於告警判斷,agent將數據push給Transfer,Transfer不但會轉發給Graph組件來繪圖,還會轉發給Judge用於判斷是否觸發告警。

Links

Links是爲報警合併功能寫的組件。如果你不想使用報警合併功能,這個組件是無需安裝的。

Alarm

alarm模塊是處理報警event的,judge產生的報警event寫入redis,alarm從redis讀取處理

Task

task是監控系統一個必要的輔助模塊。定時任務,實現瞭如下幾個功能:

  • index更新。包括圖表索引的全量更新 和 垃圾索引清理。

  • falcon服務組件的自身狀態數據採集。定時任務了採集了transfer、graph、task這三個服務的內部狀態數據。

  • falcon自檢控任務。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章