閱讀232 返回首頁    go 阿裏雲 go 技術社區[雲棲]


運維架構服務監控Open-Falcon

一、 介紹

監控係統是整個運維環節,乃至整個產品生命周期中最重要的一環,事前及時預警發現故障,事後提供翔實的數據用於追查定位問題。監控係統作為一個成熟的運維產品,業界有很多開源的實現可供選擇。當公司剛剛起步,業務規模較小,運維團隊也剛剛建立的初期,選擇一款開源的監控係統,是一個省時省力,效率最高的方案。之後,隨著業務規模的持續快速增長,監控的對象也越來越多,越來越複雜,監控係統的使用對象也從最初少數的幾個SRE,擴大為更多的DEVS,SRE。這時候,監控係統的容量和用戶的“使用效率”成了最為突出的問題。

監控係統業界有很多傑出的開源監控係統。我們在早期,一直在用zabbix,不過隨著業務的快速發展,以及互聯網公司特有的一些需求,現有的開源的監控係統在性能、擴展性、和用戶的使用效率方麵,已經無法支撐了。

因此,我們在過去的一年裏,從互聯網公司的一些需求出發,從各位SRE、SA、DEVS的使用經驗和反饋出發,結合業界的一些大的互聯網公司做監控,用監控的一些思考出發,設計開發了小米的監控係統:open-falcon。

二、 特點

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

2、水平擴展能力:支持每個周期上億次的數據采集、告警判定、曆史數據存儲和查詢

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

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

5、高效率的graph組件:單機支撐200萬metric的上報、歸檔、存儲(周期為1分鍾)

6、高效的曆史數據query組件:采用rrdtool的數據歸檔策略,秒級返回上百個metric一年的曆史數據

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

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

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

三、 架構

每台服務器,都有安裝falcon-agent,falcon-agent是一個golang開發的daemon程序,用於自發現的采集單機的各種數據和指標,這些指標包括不限於以下幾個方麵,共計200多項指標。
CPU相關
磁盤相關
IO
Load
內存相關
網絡相關
端口存活、進程存活
ntp offset(插件)
某個進程資源消耗(插件)
netstat、ss 等相關統計項采集
機器內核配置參數
隻要安裝了falcon-agent的機器,就會自動開始采集各項指標,主動上報,不需要用戶在server做任何配置(這和zabbix有很大的不同),這樣做的好處,就是用戶維護方便,覆蓋率高。當然這樣做也會server端造成較大的壓力,不過open-falcon的服務端組件單機性能足夠高,同時都可以水平擴展,所以自動多采集足夠多的數據,反而是一件好事情,對於SRE和DEV來講,事後追查問題,不再是難題。

另外,falcon-agent提供了一個proxy-gateway,用戶可以方便的通過http接口,push數據到本機的gateway,gateway會幫忙高效率的轉發到server端。

四、 數據模型

Data Model是否強大,是否靈活,對於監控係統用戶的“使用效率”至關重要。比如以zabbix為例,上報的數據為hostname(或者ip)、metric,那麼用戶添加告警策略、管理告警策略的時候,就隻能以這兩個維度進行。舉一個最常見的場景:
hostA的磁盤空間,小於5%,就告警。一般的服務器上,都會有兩個主要的分區,根分區和home分區,在zabbix裏麵,就得加兩條規則;如果是hadoop的機器,一般還會有十幾塊的數據盤,還得再加10多條規則,這樣就會痛苦,不幸福,不利於自動化(當然zabbix可以通過配置一些自動發現策略來搞定這個,不過比較麻煩)。

五、 數據收集

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。

基礎監控是指隻要是個機器(或容器)就能加的監控,比如cpu mem net io disk等,這些監控采集的方式固定,不需要配置,也不需要用戶提供額外參數指定,隻要agent跑起來就可以直接采集上報上去; 非基礎監控則相反,比如端口監控,你不給我端口號就不行,不然我上報所有65535個端口的監聽狀態你也用不了,這類監控需要用戶配置後才會開始采集上報的監控(包括類似於端口監控的配置觸發類監控,以及類似於mysql的插件腳本類監控),一般就不算基礎監控的範疇了。

六、 報警

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

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

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

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

七、 API

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

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

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

八、 麵板

九、 存儲

對於監控係統來講,曆史數據的存儲和高效率查詢,永遠是個很難的問題!
數據量大:目前我們的監控係統,每個周期,大概有2000萬次數據上報(上報周期為1分鍾和5分鍾兩種,各占50%),一天24小時裏,從來不會有業務低峰,不管是白天和黑夜,每個周期,總會有那麼多的數據要更新。

寫操作多:一般的業務係統,通常都是讀多寫少,可以方便的使用各種緩存技術,再者各類數據庫,對於查詢操作的處理效率遠遠高於寫操作。而監控係統恰恰相反,寫操作遠遠高於讀。每個周期幾千萬次的更新操作,對於常用數據庫(MySQL、postgresql、mongodb)都是無法完成的。

高效率的查:我們說監控係統讀操作少,是說相對寫入來講。監控係統本身對於讀的要求很高,用戶經常會有查詢上百個meitric,在過去一天、一周、一月、一年的數據。如何在1秒內返回給用戶並繪圖,這是一個不小的挑戰。

open-falcon在這塊,投入了較大的精力。我們把數據按照用途分成兩類,一類是用來繪圖的,一類是用戶做數據挖掘的。

對於繪圖的數據來講,查詢要快是關鍵,同時不能丟失信息量。對於用戶要查詢100個metric,在過去一年裏的數據時,數據量本身就在那裏了,很難1秒之類能返回,另外就算返回了,前端也無法渲染這麼多的數據,還得采樣,造成很多無謂的消耗和浪費。我們參考rrdtool的理念,在數據每次存入的時候,會自動進行采樣、歸檔。我們的歸檔策略如下,曆史數據保存5年。同時為了不丟失信息量,數據歸檔的時候,會按照平均值采樣、最大值采樣、最小值采樣存三份。

參考內容:從無到有搭建中小型互聯網公司後台服務架構與運維架構

最後更新:2017-10-11 11:03:50

  上一篇:go  管理型安全服務的重點領域及發展趨勢
  下一篇:go  運營級WLAN網絡架構及關鍵技術探討