一篇吃透監控系統:主流工具選型及落地場景參考
這篇文章,我將對監控體系的基礎知識、原理和架構做一次系統性整理,同時還會對幾款最常用的開源監控產品做下介紹,以便大家選型時參考。內容包括3部分:
-
必知必會的監控基礎知識
-
主流監控系統介紹
-
監控系統的選型建議
一、必知必會的監控基礎知識
我們可以理解監控系統就像我們古代打戰的哨兵一樣,哨兵的角色非常重要,敵人來了,哨兵會第一時間發出預警(吹笛、打鼓、放煙),讓守城的戰士能夠最快的時間處理,應對。
那對於我們應用系統而言,監控系統就像我們第三隻眼,如果有應用系統出現問題,我們可以通過監控系統看是哪裡出現問題,是redis掛了,還是說伺服器記憶體滿了,有監控系統我們可以很輕鬆、快速的定位問題。
甚至我們可以設定預警,對一些將要出現的問題進行提前預防處理,及時避免問題的發生。
1、監控系統的作用
1)幫助定位故障
在發生故障時,我們可以通過檢視監控系統的各項指標資料,輔助故障分析和定位。
2)預警減少故障率
對於即將可能產生的故障能夠及時發出預警資訊,做好提前預防處理。
3)輔助容量規劃
為伺服器、中介軟體以及應用叢集的容量規劃提供資料支撐。
4)輔助效能調優
JVM垃圾回收次數、介面響應時間、慢SQL等等都可以監控優化。
2、常見的監控物件和指標都有哪些?
1)伺服器監控
CPU使用率、記憶體使用率、磁碟使用率、磁碟讀寫的吞吐量、網路出入流量等等。
2)MySQL監控
TPS、QPS、資料庫連線數、慢SQL、InnoDB緩衝池命中率等等。
3)Redis監控
記憶體使用率、快取命中率、key值總數、Redis響應請求時間、客戶端連線數、永續性指標等等。
4)MQ監控
連線數、佇列數、生產速率、消費速率、訊息堆積量等等。
5)應用監控
-
HTTP介面:URL存活、請求量、耗時、異常量。
-
JVM :GC次數、GC耗時、各個記憶體區域的大小、當前執行緒數、死鎖執行緒數。
-
執行緒池:活躍執行緒數、任務佇列大小、任務執行耗時、拒絕任務數。
3、監控系統的基本流程
1)資料採集
採集的方式有很多種,包括日誌埋點進行採集,JMX標準介面輸出監控指標,被監控物件提供REST API進行資料採集(如Hadoop、ES),系統命令列,統一的SDK進行侵入式的埋點和上報等。
2)資料傳輸
將採集的資料以TCP、UDP或者HTTP協議的形式上報給監控系統,有主動Push模式,也有被動Pull模式。
3)資料儲存
有使用MySQL、Oracle等關係資料庫儲存的,也有使用時序資料庫RRDTool、OpentTSDB、InfluxDB儲存的,還有使用HBase儲存的。
4)資料展示
資料指標的圖形化展示。
5)監控告警
靈活的告警設定,以及支援郵件、簡訊、IM等多種通知通道。
二、市面上的一些常見監控系統比較
下面再來認識下主流的開源監控系統,由於篇幅有限,我挑選了3款使用最廣泛的監控系統:Zabbix、Open-Falcon、Prometheus,會對它們的架構進行介紹,同時總結下各自的優劣勢。
1、Zabbix介紹
Zabbix 1998年誕生,核心元件採用C語言開發,Web端採用PHP開發。它屬於老牌監控系統中的優秀代表,監控功能很全面,使用也很廣泛,差不多有70%左右的網際網路公司都曾使用過 Zabbix 作為監控解決方案。
先來了解下Zabbix的架構設計:
-
Zabbix Server
核心元件,C語言編寫,負責接收Agent、Proxy傳送的監控資料。同時,它還負責資料的彙總儲存以及告警觸發等。
-
Zabbix Proxy
可選元件,對於被監控機器較多的情況下,可使用Proxy進行分散式監控,它能代理Server收集部分監控資料,以減輕Server的壓力。
-
Zabbix Agentd
部署在被監控主機上,用於採集本機的資料併發送給Proxy或者Server。資料收集方式同時支援主動Push和被動Pull 兩種模式。
-
Database
用於儲存配置資訊以及採集到的資料,支援MySQL、Oracle等關係型資料庫。同時,最新版本的Zabbix已經開始支援時序資料庫,不過成熟度還不高。
-
Web Server
Zabbix的GUI元件,PHP編寫,提供監控資料的展現和告警配置。
1)Zabbix的優勢
-
產品成熟
由於誕生時間長且使用廣泛,擁有豐富的文件資料以及各種開源的資料採集外掛,能覆蓋絕大部分監控場景。
-
採集方式豐富
支援Agent、SNMP、JMX、SSH等多種採集方式,以及主動和被動的資料傳輸方式。
2)Zabbix的劣勢
需要在被監控主機上安裝Agent,所有的資料都存在資料庫裡,產生的資料很大,瓶頸主要在資料庫。
2、Open-Falcon(小米出品,國內流行)
Open-falcon 是小米2015年開源的企業級監控工具,採用Go和Python語言開發,這是一款靈活、高效能且易擴充套件的新一代監控方案,目前小米、美團、滴滴等超過200家公司在使用它。
小米初期也使用的Zabbix進行監控,但是機器量和業務量上來後,Zabbix就有些力不從心了。因此,後來自主研發了Open-Falcon,在架構設計上吸取了Zabbix的經驗,同時很好地解決了Zabbix的諸多痛點。
架構看去比Zabbix複雜多了,其實它也是基於Server---Agent的模式,只不過Server又給他劃分了好幾個元件,這個耦合性和擴充套件性都得到了明顯提高。
-
Falcon-agent
資料採集器和收集器,Go開發,部署在被監控的機器上。就相當於Agent,用於採集機器負載監控指標資料如:CPU、記憶體、磁碟、IO、網路、埠等等大概有200多個這些都可以自定是否收集。
-
Transfer
資料分發元件,接收客戶端傳送的資料,分別傳送給資料儲存元件Graph和告警判定元件Judge,Graph和Judge均採用一致性hash做資料分片,以提高橫向擴充套件能力。同時Transfer還支援將資料分發到OpenTSDB,用於歷史歸檔。
-
Graph
資料儲存元件,底層使用RRDTool(時序資料庫)做單個指標的儲存,並通過快取、分批寫入磁碟等方式進行了優化。據說一個graph例項能夠處理8W+每秒的寫入速率。
-
Judge和Alarm
告警元件,Judge對Transfer元件上報的資料進行實時計算,判斷是否要產生告警事件,Alarm元件對告警事件進行收斂處理後,將告警訊息推送給各個訊息通道。
-
API
面向終端使用者,收到查詢請求後會去Graph中查詢指標資料,彙總結果後統一返回給使用者,遮蔽了儲存叢集的分片細節。
1)Open-Falcon優勢
-
自動採集能力
Falcon-agent 能自動採集伺服器的200多個基礎指標(比如CPU、記憶體等),無需在server上做任何配置,這一點可以秒殺Zabbix.
-
強大的儲存能力
底層採用RRDTool,並且通過一致性hash進行資料分片,構建了一個分散式的時序資料儲存系統,可擴充套件性強。
-
靈活的資料模型
借鑑OpenTSDB,資料模型中引入了tag,這樣能支援多維度的聚合統計以及告警規則設定,大大提高了使用效率。
-
外掛統一管理
Open-Falcon的外掛機制實現了對使用者自定義指令碼的統一化管理,可通過HeartBeat Server分發給agent,減輕了使用者自主維護指令碼的成本。
-
個性化監控支援
基於Proxy-gateway,很容易通過自主埋點實現應用層的監控(比如監控介面的訪問量和耗時)和其他個性化監控需求,整合方便。
2)Open-Falcon缺點
-
監控型別較少
不支援常用應用伺服器如tomcat、apache、jetty等的監控。
-
整體發展一般,社群活躍度低
沒有專門的運維支援,程式碼更新較少,沒有一個較大的社群來維護,後續想要有什麼新的能力基本只能指望自己擴充套件。
3、Prometheus(號稱下一代監控系統)
我們知道 zabbix 在監控界佔有不可撼動的地位,功能強大。但是對容器監控顯得力不從心。為解決監控容器的問題,引入了 Prometheus 技術。
Prometheus 是一套開源的系統監控報警框架。是由前google員工2015年正式釋出的開源監控系統,採用Go語言開發。它不僅有一個很酷的名字,同時它有Google與k8s的強力支援,開源社群異常火爆。
先來了解下Prometheus的架構設計:
-
Exporter
主要用來採集資料,並通過 HTTP 服務的形式暴露給 Prometheus Server,Prometheus Server 通過訪問該 Exporter 提供的介面,即可獲取到需要採集的監控資料。常見的Exporter有很多,例如node_exporter、mysqld_exporter、redis_exporter 等
-
Prometheus Server
核心元件,負責實現對監控資料的獲取,儲存以及查詢。Prometheus Server 也是一個時序資料庫,它將監控資料儲存在本地磁碟中,並對外提供自定義的 PromQL 語言實現對資料的查詢和分析。
-
Push gateway
由於 Prometheus 資料採集採用 pull 方式進行設定的, 內建必須保證 prometheus server 和對應的 exporter 必須通訊,當網路情況無法直接滿足時,可以使用 pushgateway 來進行中轉,可以通過 pushgateway 將內部網路資料主動 push 到 gateway 裡面去,而 prometheus 採用 pull方式拉取 pushgateway 中資料。
-
Alert Manager
當支援基於 PromQL 建立告警規則,如果滿足定義的規則,則會產生一條告警資訊,進入 AlertManager 進行處理。可以整合郵件,微信或者通過 webhook 自定義報警。
-
Web UI
Prometheus內建了一個簡單的web控制檯,可以查詢配置資訊和指標等,而實際應用中我們通常會將Prometheus作為Grafana的資料來源,建立儀表盤以及檢視指標。
1)Prometheus優點
-
社群活躍度高
github start超過40k,且一直在維護。
-
基於時序資料庫,儲存效率高
Prometheus核心部分只有一個單獨的二進位制檔案,不存在任何的第三方依賴(資料庫,快取等等)。唯一需要的就是 本地磁碟,因此不會有潛在級聯故障的風險。
-
很好地支援容器監控
能自動發現容器,同時k8s和etcd等專案都提供了對Prometheus的原生支援,是目前容器監控最流行的方案。
-
基於Pull模型的架構
Prometheus基於Pull模型的架構方式,可以在任何地方(本地電腦,開發環境,測試環境)搭建我們的監控系統。
2)Prometheus缺點
-
Prometheus 是基於 Metric 的監控,不適用於日誌(Logs)、事件(Event)、呼叫鏈(Tracing)。
-
由於Prometheus採用的是Pull模型拉取資料,意味著所有被監控的endpoint必須是可達的,需要合理規劃網路的安全配置。
-
指標眾多,需進行適當裁剪。
三、選型建議
通過上面的介紹,大家對主流的監控系統應該有了一定的認識。面對選型問題,我的建議是:
1)先明確清楚你的監控需求:要監控的物件有哪些?機器數量和監控指標有多少?需要具備什麼樣的告警功能?
2)監控是一項長期建設的事情,一開始就想做一個 All In One 的監控解決方案,我覺得沒有必要。從成本角度考慮,在初期直接使用開源的監控方案即可,先解決有無問題。
3)從系統成熟度上看,Zabbix屬於老牌的監控系統,資料多,功能全面且穩定,如果機器數量在幾百臺以內,不用太擔心效能問題,另外,採用資料庫分割槽、SSD硬碟、Proxy架構、Push採集模式都可以提高監控效能。
4)Zabbix在伺服器監控方面佔絕對優勢,可以滿足90%以上的監控場景,但是應用層的監控似乎並不擅長,比如要監控執行緒池的狀態、某個內部介面的執行時間等,這種通常都要做侵入式埋點。相反,新一代的監控系統Open-Falcon和Prometheus在這一點做得很好。
5)從整體表現上來看,新一代監控系統也有明顯的優勢,比如:靈活的資料模型、更成熟的時序資料庫、強大的告警功能,如果之前對zabbix這種傳統監控沒有技術積累,建議使用Open-Falcon或者Prometheus.
6)Open-Falcon的核心優勢在於資料分片功能,能支撐更多的機器和監控項;Prometheus則是容器監控方面的標配,有Google和k8s加持。
7)Zabbix、Open-Falcon和Prometheus都支援和Grafana做快速整合,想要美觀且強大的視覺化體驗,可以和Grafana進行組合。
8)用合適的監控系統解決相應的問題即可,可以多套監控同時使用,這種在企業初期很常見。
9)到中後期,隨著機器資料增加和個性化需求增多(比如希望統一監控平臺、打通公司的CMDB和組織架構關係),往往需要二次開發或者通過監控系統提供的API做整合,從這點來看,Open-Falcon或者Prometheus更合適。
10)如果非要自研,可以多研究下主流監控系統的架構方案,借鑑它們的優勢。
作者丨後端元宇宙
來源丨公眾號:後端元宇宙(ID:binron3)
dbaplus社群歡迎廣大技術人員投稿,投稿郵箱: [email protected]
- 從0.742秒到0.006秒,MySQL百萬資料深分頁優化實戰
- 近40年銀行核心系統變遷歷程及新建設模式
- 無人值守率達55%,億級金融系統智慧運維的深度實踐
- 準召率超80%,網易遊戲AIOps異常檢測及故障定位優化實踐
- 5大主流方案對比:MySQL千億級資料線上平滑擴容實戰
- Redis 生產架構選型對比,一文整治選擇困難症
- 別再問了,資料庫與快取一致性問題今天全整齊活了!
- 攻破主流數倉缺陷,位元組跳動基於Doris的湖倉分析探索實踐
- 應用監控系統演進:從選型到落地,鏈路追蹤一氣呵成
- 整整修了6個小時,一次難料的分頁慢查詢事故……
- 知道這些坑,你還敢亂把單體架構拆成分散式嗎?
- 真正在大廠幹了幾年,我學會了反內卷……
- 阿里大牛:如何畫出別人一看就懂的架構圖?
- 大型銀行核心系統“迭代式”敏捷遷移之路
- 面對千萬級資料查詢,CK、ES、RediSearch誰才是王炸?
- 一次線上高併發事故,我頓悟了非同步的精髓……
- 萬字摸透Redis、MySQL和ZooKeeper分散式鎖,還不會的出來!
- 看完就知道,你之前的微服務是怎麼玩垮的了……
- 大意了!一早這樣搭實時數倉能少走很多彎路……
- SQL優化這5個極簡法則,直接讓查詢原地起飛!