1. 監(jiān)控系統(tǒng)的功能概述
監(jiān)控,從中文的字義來(lái)看镶柱,有兩個(gè)內(nèi)容旷档,一是監(jiān)測(cè),二是控制歇拆,重點(diǎn)在第一個(gè)字眼“監(jiān)”上鞋屈,即監(jiān)測(cè)、預(yù)防的意思故觅。監(jiān) 控 谐区, 對(duì) 應(yīng) 的 英 文 單 詞 是 Monitoring 。 按 照 維 基 百 科 對(duì) 于Monitoring 的 分 類(lèi) ( 鏈接地址是https://en.wikipedia.org/wiki/Monitoring)逻卖,在計(jì)算機(jī)領(lǐng)域宋列,可以將其分為5種監(jiān)控類(lèi)型。
- 應(yīng)用性能監(jiān)控(Application Performance Monitoring)评也。
- 業(yè)務(wù)交易監(jiān)控(Business Transaction Monitoring)炼杖。
- 網(wǎng)絡(luò)性能監(jiān)控(Network Monitoring)。
- 操作系統(tǒng)監(jiān)控(System Monitoring)盗迟。
-
網(wǎng)絡(luò)站點(diǎn)監(jiān)控(Website Monitoring)坤邪。
在任何一個(gè)IT業(yè)務(wù)環(huán)境中,都會(huì)存在各種各樣的硬件設(shè)備罚缕、軟件應(yīng)用等艇纺。按照邏輯層次劃分,我們可以將其劃分為如圖所示的模型邮弹。
多種應(yīng)用構(gòu)成了復(fù)雜的IT業(yè)務(wù)系統(tǒng)黔衡,如何保證這些資源正常運(yùn)轉(zhuǎn),是各公司內(nèi)IT部門(mén)的重要職責(zé)腌乡。要讓這些應(yīng)用能夠穩(wěn)定地運(yùn)行盟劫,則需要專(zhuān)業(yè)的IT人員進(jìn)行規(guī)劃、設(shè)計(jì)与纽、架構(gòu)侣签、維護(hù)和調(diào)優(yōu)。在這個(gè)過(guò)程中急迂,為了及時(shí)掌控基礎(chǔ)環(huán)境和業(yè)務(wù)應(yīng)用系統(tǒng)的可用性影所,需要獲取各個(gè)組件的運(yùn)行狀態(tài),如CPU的利用率僚碎、系統(tǒng)的負(fù)載猴娩、服務(wù)的運(yùn)行、端口的連通、帶寬流量胀溺、網(wǎng)站訪問(wèn)狀態(tài)碼等信息裂七,而這一切都離不開(kāi)監(jiān)控系統(tǒng)的支撐。
2. 監(jiān)控系統(tǒng)的實(shí)現(xiàn)原理
2.1 模塊組成
一個(gè)監(jiān)控系統(tǒng)的組成大體可以分為兩部分:數(shù)據(jù)采集部分(客戶端)和數(shù)據(jù)存儲(chǔ)分析告警展示部分(服務(wù)器端)仓坞,如圖所示背零。這兩部分構(gòu)成了監(jiān)控系統(tǒng)的基本模型。
對(duì)于采集到的監(jiān)控?cái)?shù)據(jù)无埃,可以將其存儲(chǔ)到數(shù)據(jù)庫(kù)或者文本或者其他方式徙瓶,具體采用哪一種,應(yīng)根據(jù)實(shí)際需求來(lái)決定嫉称。
怎么規(guī)劃監(jiān)控系統(tǒng)的架構(gòu)設(shè)計(jì)呢侦镇?下面將詳細(xì)分析。
對(duì)于一般的監(jiān)控環(huán)境织阅,被監(jiān)控的節(jié)點(diǎn)不多壳繁,產(chǎn)生的數(shù)據(jù)較少,采用C/S(Client/Server荔棉,客戶端/服務(wù)器端)架構(gòu)就足夠了闹炉,如圖1-4 所示,這種架構(gòu)適合于規(guī)模較小润樱、處于同一地域的環(huán)境渣触。
對(duì)于大規(guī)模的監(jiān)控環(huán)境,被監(jiān)控的節(jié)點(diǎn)多壹若,且監(jiān)控類(lèi)型多嗅钻,監(jiān)控產(chǎn)生的數(shù)據(jù)和網(wǎng)絡(luò)連接開(kāi)銷(xiāo)會(huì)非常巨大,而且由于跨地域等多種因素店展,需要分布式的解決方案养篓,常見(jiàn)的方式為C/P/S(Client/Proxy/Server,客戶端/代理端/服務(wù)器端)架構(gòu)(如圖所示)壁查,采用中間代理將大大提高監(jiān)控服務(wù)器端的處理速度觉至,從而能支撐構(gòu)建大型分布式監(jiān)控的環(huán)境。
2.2 系統(tǒng)組成
2.3 采集協(xié)議
按照支持的協(xié)議方式睡腿,監(jiān)控系統(tǒng)數(shù)據(jù)采集可以分為兩種:專(zhuān)用客戶端采集和公用協(xié)議采集(SNMP、IPMI峻贮、SSH席怪、Telnet等),如圖所示纤控。
2.4 采集模式
監(jiān)控系統(tǒng)數(shù)據(jù)采集的工作模式可以分為被動(dòng)模式(從服務(wù)器端到客戶端采集數(shù)據(jù)挂捻,對(duì)應(yīng)的英文單詞是pull)和主動(dòng)模式(客戶端主動(dòng)上報(bào)數(shù)據(jù)到服務(wù)器端,對(duì)應(yīng)的英文單詞是push)兩種船万,如圖所示刻撒。通常骨田,大多數(shù)監(jiān)控系統(tǒng)都應(yīng)該能同時(shí)支持這兩種工作模式,但不同的監(jiān)控系統(tǒng)由于采集技術(shù)不同声怔,僅有部分能夠同時(shí)支持這兩種工作模式态贤。
一般來(lái)說(shuō),被動(dòng)模式對(duì)監(jiān)控控制端服務(wù)器的開(kāi)銷(xiāo)較大醋火,適合小規(guī)模的監(jiān)控環(huán)境悠汽;主動(dòng)模式對(duì)監(jiān)控控制端服務(wù)器的開(kāi)銷(xiāo)較小,適合大規(guī)模的監(jiān)控環(huán)境芥驳。
2.5 監(jiān)控指標(biāo)
監(jiān)控系統(tǒng)通常都支持一些常見(jiàn)的監(jiān)控采集指標(biāo)柿冲,如操作系統(tǒng)監(jiān)控、應(yīng)用程序監(jiān)控等兆旬。部分常見(jiàn)的監(jiān)控指標(biāo)如表所示假抄。
2.6 數(shù)據(jù)存儲(chǔ)
在監(jiān)控客戶端采集數(shù)據(jù)之后,會(huì)將數(shù)據(jù)上傳給監(jiān)控服務(wù)器端丽猬,監(jiān)控服務(wù)器端程序?qū)⒔邮盏降臄?shù)據(jù)進(jìn)行存儲(chǔ)慨亲。通常監(jiān)控系統(tǒng)會(huì)選用以下幾種數(shù)據(jù)存儲(chǔ)方式。
(1)本地存儲(chǔ)宝鼓。使用本地磁盤(pán)刑棵,基于文件的方式存儲(chǔ)。
(2) 使用時(shí)序數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ) 愚铡, 如古老的環(huán)狀數(shù)據(jù)庫(kù)(Round Robin Database, RRD)等蛉签。近年來(lái),隨著時(shí)序數(shù)據(jù)技術(shù)的不斷發(fā)展沥寥,出現(xiàn)了比較成熟的時(shí)序數(shù)據(jù)庫(kù)碍舍,如OpenTSDB(底層存儲(chǔ)基于HBase)、Graphite邑雅、InfluxDB片橡、Prometheus等,與直接使用文件的存儲(chǔ)方式相比淮野,這些時(shí)序數(shù)據(jù)庫(kù)更加高效捧书。
(3) 使用數(shù)據(jù)庫(kù)管理系統(tǒng) ( Database Management System,DBMS)進(jìn)行數(shù)據(jù)存儲(chǔ),如常見(jiàn)的MySQL骤星、Oracle经瓷、SQL Server等。使用這種數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)監(jiān)控?cái)?shù)據(jù)洞难,當(dāng)數(shù)據(jù)量達(dá)到一定規(guī)模時(shí)舆吮,其讀/寫(xiě)效率
均會(huì)顯著下降,數(shù)據(jù)庫(kù)的壓力比較大,通常優(yōu)化方案思路有3種色冀,一是減少數(shù)據(jù)的存儲(chǔ)量潭袱;二是優(yōu)化數(shù)據(jù)庫(kù)本身,調(diào)整配置參數(shù)锋恬,優(yōu)化運(yùn)行環(huán)境屯换;三是使用分布式數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)集群技術(shù)方案。
(4)使用NoSQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)伶氢。NoSQL相對(duì)于DBMS這種傳統(tǒng)的數(shù)據(jù)庫(kù)有著一些天然的優(yōu)勢(shì)趟径,單機(jī)的QPS通常較高。但NoSQL本身并不是為監(jiān)控系統(tǒng)設(shè)計(jì)的癣防,在數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)方面存在一些缺陷蜗巧,故直接
采用NoSQL作為監(jiān)控?cái)?shù)據(jù)存儲(chǔ)的監(jiān)控系統(tǒng)產(chǎn)品較少。
(5)使用列存儲(chǔ)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)蕾盯。列存儲(chǔ)數(shù)據(jù)庫(kù)由于其設(shè)計(jì)之初專(zhuān)為大數(shù)據(jù)而有所考慮幕屹,故無(wú)須擔(dān)心其存儲(chǔ)容量,底層均有良好的解決方案级遭。但由于其部署望拖、運(yùn)維均較為復(fù)雜,故一般監(jiān)控系統(tǒng)也不會(huì)常采用這種技術(shù)作為數(shù)據(jù)庫(kù)存儲(chǔ)挫鸽。這方面的數(shù)據(jù)庫(kù)代表為HBase说敏。
(6)使用全文搜索引擎數(shù)據(jù)庫(kù)進(jìn)行監(jiān)控?cái)?shù)據(jù)存儲(chǔ)。這方面的代表是Elasticsearch丢郊,其作為監(jiān)控?cái)?shù)據(jù)庫(kù)存儲(chǔ)監(jiān)控?cái)?shù)據(jù)具有天然的優(yōu)勢(shì)盔沫,支持集群、分布式部署枫匾、容災(zāi)架诞,并且集群能夠提供較高的性能。目前采用全文搜索引擎數(shù)據(jù)庫(kù)進(jìn)行監(jiān)控?cái)?shù)據(jù)存儲(chǔ)干茉,典型的代表是ELK套件谴忧,在Zabbix 4.0以上版本可以選用Elasticsearch作為數(shù)據(jù)庫(kù)存儲(chǔ)。
2.7 系統(tǒng)功能
2.8 可擴(kuò)展性
可擴(kuò)展性是指監(jiān)控系統(tǒng)本身具備良好的擴(kuò)展能力角虫,包括監(jiān)控方式的擴(kuò)展沾谓、監(jiān)控能力的擴(kuò)展、監(jiān)控?cái)?shù)據(jù)存儲(chǔ)的擴(kuò)展上遥、分布式的支持等搏屑。要求監(jiān)控系統(tǒng)能夠隨著不同環(huán)境而做出改變和調(diào)整,大多數(shù)監(jiān)控系統(tǒng)都具備一定的擴(kuò)展能力粉楚。
對(duì)于告警,要求支持多種方式,如短信模软、郵件伟骨、即時(shí)通信和其他接口,且具備可定制化能力燃异,可以對(duì)第三方告警介質(zhì)提供可編程接口携狭。這一點(diǎn)在很多場(chǎng)合都非常重要,例如回俐,將告警結(jié)果發(fā)送到專(zhuān)用的告警分析系統(tǒng)逛腿。
監(jiān)控系統(tǒng)需要根據(jù)實(shí)際應(yīng)用的需求,實(shí)時(shí)/非實(shí)時(shí)地采集和展示數(shù)據(jù)仅颇。另外单默,還包括歷史趨勢(shì)數(shù)據(jù)的展示和分析,以及容量報(bào)表忘瓦、可用性報(bào)告的生成搁廓。
3. 監(jiān)控系統(tǒng)的開(kāi)源產(chǎn)品
在監(jiān)控軟件中,開(kāi)源的解決方案有流量監(jiān)控(MRTG耕皮、Cacti境蜕、SmokePing 等 ) 、 性 能 告 警 ( Nagios 凌停、 Zabbix 粱年、 Zenoss Core 、Ganglia 罚拟、 Netdata 等 ) 台诗、 基 于 時(shí) 序 數(shù) 據(jù) 庫(kù) 存 儲(chǔ) 數(shù) 據(jù) 的 監(jiān) 控(Graphite、OpenTSDB舟舒、InfluxDB拉庶、Prometheus、OpenFalcon等)秃励、基于全文搜索引擎數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的監(jiān)控(如ELK套件)可供選擇氏仗。
3.1 Cacti
Cacti(中文含義為“仙人掌”)是一套基于PHP、MySQL夺鲜、SNMP和RRDtool開(kāi)發(fā)的網(wǎng)絡(luò)流量監(jiān)測(cè)圖形分析工具皆尔,如圖所示。其數(shù)據(jù)采集僅支持SNMP方式币励,通過(guò)snmpget命令來(lái)獲取監(jiān)控?cái)?shù)據(jù)慷蠕,使用RRDtool命令工具存儲(chǔ)歷史數(shù)據(jù)和繪圖,并提供數(shù)據(jù)和用戶管理功能食呻,可以根據(jù)用戶權(quán)限查看不同的樹(shù)狀結(jié)構(gòu)流炕、主機(jī)設(shè)備以及指定的監(jiān)控?cái)?shù)據(jù)圖澎现,支持與LDAP結(jié)合進(jìn)行用戶認(rèn)證,同時(shí)也能自定義模板每辟。對(duì)于網(wǎng)絡(luò)設(shè)備的監(jiān)控剑辫,其展示效果非常不錯(cuò),在10年前渠欺,它是廣受網(wǎng)絡(luò)管理員喜歡的監(jiān)控產(chǎn)品妹蔽。
3.2 Nagios
Nagios是一個(gè)插件式的監(jiān)控系統(tǒng),可以監(jiān)控服務(wù)的運(yùn)行狀態(tài)和網(wǎng)絡(luò)信息等挠将,并能監(jiān)視所指定的本地或遠(yuǎn)程主機(jī)參數(shù)以及服務(wù)胳岂,同時(shí)提供異常告警通知功能等,如圖所示舔稀。
Nagios對(duì)開(kāi)源監(jiān)控系統(tǒng)的影響非常深遠(yuǎn)乳丰,曾經(jīng)風(fēng)靡一時(shí),占據(jù)開(kāi)源監(jiān)控市場(chǎng)的大部分份額镶蹋,并基于Nagios產(chǎn)生了很多新的監(jiān)控產(chǎn)品成艘。
3.3 Prometheus
Prometheus是一套開(kāi)源的系統(tǒng)監(jiān)控報(bào)警框架,其架構(gòu)示意圖如圖所示贺归。Prometheus最初的設(shè)計(jì)理念受Google的Borgmon監(jiān)控系統(tǒng)所啟發(fā)淆两,由工作在SoundCloud的Google前員工于2012年創(chuàng)建,作為社區(qū)開(kāi)源項(xiàng)目進(jìn)行開(kāi)發(fā)拂酣,2015年正式發(fā)布秋冰。2016年,Prometheus正式加入Cloud Native Computing Foundation(CNCF)組織婶熬,2018年其成為繼Kubernetes 從 CNCF 畢 業(yè) 的 第 二 個(gè) 項(xiàng) 目 剑勾, 其 受 歡 迎 程 度 僅 次 于
Kubernetes。
3.4 OpenFalcon
OpenFalcon是一個(gè)企業(yè)級(jí)赵颅、高可用虽另、可擴(kuò)展的開(kāi)源監(jiān)控解決方案。它在GitHub上獲得了數(shù)千個(gè)星(star)饺谬、數(shù)百次復(fù)刻(fork)捂刺、上百個(gè)代碼提交(pull-request),社區(qū)用戶超過(guò)6000人募寨,超過(guò)200家
公司都在不同程度地使用OpenFalcon族展。
OpenFalcon官方網(wǎng)站地址:https://book.open-falcon.org/。
OpenFalcon由多個(gè)組件構(gòu)成拔鹰,重要的組件有數(shù)據(jù)采集仪缸、數(shù)據(jù)傳輸、數(shù)據(jù)存儲(chǔ)列肢、告警分析恰画、圖形展示等宾茂,數(shù)據(jù)采集使用專(zhuān)用客戶端,傳輸協(xié)議為私有的锣尉,數(shù)據(jù)存儲(chǔ)支持OpenTSDB和RRD兩種方式刻炒,其架構(gòu)示意圖如圖所示决采。
3.5 ELK家族
ELK是Elasticsearch自沧、Logstash、Kibana的簡(jiǎn)稱(chēng)树瞭,這三者是核心套件拇厢,但并非全部。
ELK官方網(wǎng)站地址:https://www.elastic.co/晒喷。
3.6 Zabbix
Zabbix是企業(yè)級(jí)分布式監(jiān)控系統(tǒng)孝偎,是一個(gè)開(kāi)箱即用的成熟解決方案,具備完備的功能凉敲。綜合其他監(jiān)控產(chǎn)品來(lái)說(shuō)衣盾,它是一個(gè)大而全、功能豐富且定制非常靈活的產(chǎn)品爷抓,具備其他監(jiān)控產(chǎn)品的功能势决,同時(shí)提供了其他監(jiān)控產(chǎn)品所不具備的功能,擴(kuò)展非常靈活蓝撇,是企業(yè)級(jí)監(jiān)控系統(tǒng)比較合理的選擇之一果复。
從功能上說(shuō),Zabbix支持多種采集方式和采集客戶端渤昌,有專(zhuān)用的Agent(代理)虽抄,也支持SNMP、IPMI独柑、JMX迈窟、Telnet、SSH等多種協(xié)議忌栅,它將采集到的數(shù)據(jù)存放到數(shù)據(jù)庫(kù)中 车酣, 可 以 支 持 MySQL 、 Oracle 狂秘、PostgreSQL骇径、SQLite、Elasticsearch等數(shù)據(jù)庫(kù)者春,然后對(duì)其進(jìn)行分析整理破衔,達(dá)到條件觸發(fā)告警,并支持對(duì)告警數(shù)據(jù)的分析統(tǒng)計(jì)钱烟。Zabbix具有良好的管理界面晰筛,如圖所示嫡丙。