序言
監(jiān)控
在做監(jiān)控之初,我的出發(fā)點(diǎn)很簡單涨醋,就是為性能測試做基礎(chǔ)設(shè)施的準(zhǔn)備瓜饥,因?yàn)椴捎?code>Jmeter這樣的工具來做,它的報(bào)表功能實(shí)在有限东帅,很難說準(zhǔn)確定位到性能瓶頸。進(jìn)而從這個(gè)出發(fā)點(diǎn)來開始思考球拦,首先考慮了Jmeter+InfluxDB+Grafana
這樣的組合靠闭,讓性能測試有足夠的數(shù)據(jù)來進(jìn)行支撐,因?yàn)椴捎肑meter做持續(xù)壓測的話坎炼,產(chǎn)生報(bào)告是一個(gè)問題愧膀。由此再進(jìn)行深入,我已經(jīng)能夠拿到壓測的數(shù)據(jù)了谣光,我是不是可以拿相應(yīng)的服務(wù)器中的物理數(shù)據(jù)和相對(duì)應(yīng)的軟件數(shù)據(jù)來進(jìn)行具體狀態(tài)分析呢檩淋?再次引入Prometheus
這樣的監(jiān)控工具來做,配合不同的exporter
可以收集到大部分需要的數(shù)據(jù)萄金,同時(shí)通過Grafana
進(jìn)行集中展示蟀悦。這樣一個(gè)相對(duì)而言整體的大盤監(jiān)控,我個(gè)人認(rèn)為是比較滿意的了氧敢。
日志
但是這樣也只能發(fā)現(xiàn)到大方向的問題日戈,例如知道什么服務(wù)比較慢,有性能瓶頸孙乖,至于為什么會(huì)慢浙炼,可能需要通過查詢相應(yīng)時(shí)間點(diǎn)的日志來具體分析才能夠知道份氧,但是平時(shí)我們也有查看日志的需求,之前的做法是自己上服務(wù)器拿去對(duì)應(yīng)的日志數(shù)據(jù)凉翻,再進(jìn)行檢索晦毙。這樣的流程實(shí)在太繁瑣了旱函,所以打算部署ELK
這樣的日志統(tǒng)一調(diào)度平臺(tái),來進(jìn)行統(tǒng)一管理厅缺,采用Elasticsearch
這樣的關(guān)鍵字分布式搜索,能夠快速定位到我們想要的日志酌住,并且搭配Kibana
這樣的可視化平臺(tái)店归,能夠從多個(gè)維度來對(duì)日志進(jìn)行細(xì)化跟蹤。對(duì)于相關(guān)問題的解決有著事半功倍的作用酪我。
APM
監(jiān)控有了消痛,日志也有了,但是這些都是單個(gè)層面進(jìn)行監(jiān)控部署的都哭,隨著分布式和微服務(wù)的開展秩伞,這樣的監(jiān)控層面往往會(huì)顯得不足,這個(gè)時(shí)候需要考慮引入APM
這樣的鏈路監(jiān)控系統(tǒng)來進(jìn)行服務(wù)跟蹤欺矫,和傳統(tǒng)的監(jiān)控不一樣纱新,APM
這樣的監(jiān)控主要是來解決分布式鏈路追蹤,對(duì)每個(gè)服務(wù)進(jìn)行跟蹤穆趴,并且持續(xù)觀測整個(gè)系統(tǒng)鏈路的情況脸爱,可以更具調(diào)用鏈,主動(dòng)暴露問題未妹。經(jīng)過選型簿废,最后決定采用Skywalking
這樣國人開發(fā)的APM
工具。
監(jiān)控
監(jiān)控的本質(zhì)是來對(duì)服務(wù)的穩(wěn)定性做預(yù)防络它,例如傳統(tǒng)的監(jiān)控Zabbix工具已經(jīng)可以做到很全面了族檬,都是隨著云時(shí)代的到來和分布式的大行其道,和Docker容器的快速發(fā)展化戳,傳統(tǒng)的監(jiān)控可能面對(duì)力度不足的層面单料,
針對(duì)容器的監(jiān)控,一般采用Prometheus
并且配合著cAdvisor
來對(duì)容器進(jìn)行監(jiān)控点楼,當(dāng)然也可以結(jié)合K8s
來做容器的集群管理扫尖。同時(shí)可以利用不同的Prometheus的Exporter
來監(jiān)控到相關(guān)服務(wù)的數(shù)據(jù),最后集中展示在Grafana
平臺(tái)掠廓。
除此之外藏斩,還可以配合不同的采集器來完成同時(shí)指標(biāo)的采集,選取存儲(chǔ)在不同類型的數(shù)據(jù)庫中却盘,在Grafana
里面進(jìn)行集中展示和報(bào)警監(jiān)控狰域。
當(dāng)然想完成這樣一個(gè)相當(dāng)全面監(jiān)控大盤媳拴,并非一日之功,需要不斷的量化和優(yōu)化相關(guān)指標(biāo)兆览,選取關(guān)鍵的點(diǎn)來進(jìn)行監(jiān)控屈溉,合理整合為一個(gè)監(jiān)控質(zhì)量面板。里面包含服務(wù)器中運(yùn)行的物理指標(biāo)和軟件運(yùn)行的性能指標(biāo)抬探。有著合理的布局配置子巾。需要多方配合才能夠得以完成。
日志
現(xiàn)在廣泛采納并且投入使用的就是Elastic Stack(ELK)
日志分析小压,得益于開源社區(qū)的奉獻(xiàn)线梗,網(wǎng)上有非常多的文檔來介紹怎么樣進(jìn)行部署,這里不講基礎(chǔ)層面的怠益,更多的是關(guān)心怎么樣才能夠用好這樣的日志分析仪搔,部署日志分析這樣一套系統(tǒng),其實(shí)占用的成本是挺大的蜻牢,所以更多的是讓日志分析能夠最大利用烤咧,減少不必要的浪費(fèi)。做日志統(tǒng)一調(diào)度的最大目的就是抢呆,方便快速的查詢?nèi)罩径ㄎ粏栴}煮嫌,并且根據(jù)日志來監(jiān)控多個(gè)維度的問題,存在的問題也很明顯抱虐,這樣的日志分析需要占用服務(wù)器資源昌阿,業(yè)務(wù)日志是時(shí)時(shí)打印的。量大的話恳邀,一天可能就是幾十G懦冰,所以要進(jìn)行合理的收集和過濾,關(guān)鍵日志一定要搜集到轩娶。
APM
APM
應(yīng)用性能管理(Application Performance Management)主要指對(duì)企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)用進(jìn)行監(jiān)測儿奶、優(yōu)化框往,提高企業(yè)應(yīng)用的可靠性和質(zhì)量鳄抒,保證用戶得到良好的服務(wù),降低IT總成本椰弊。
從實(shí)際的應(yīng)用場景上许溅,APM可以在以下方面為我們提供幫助:
最終用戶體驗(yàn)評(píng)估和優(yōu)化,提升用戶體驗(yàn)秉版,提高應(yīng)用DAU和留存
鏈路監(jiān)控贤重,線路優(yōu)化
機(jī)房選型,第三方服務(wù)(CDN清焕、云服務(wù)并蝗、推送等)選型
競品性能對(duì)標(biāo)
劫持分析和優(yōu)化
實(shí)時(shí)告警和通知
業(yè)務(wù)流程代碼級(jí)的監(jiān)控和優(yōu)化
業(yè)務(wù)壓測和性能剖析
快速發(fā)現(xiàn)和定位性能問題祭犯,減少業(yè)務(wù)故障恢復(fù)時(shí)間
- 數(shù)字化體驗(yàn)監(jiān)控(DEM)
數(shù)字化體驗(yàn)監(jiān)控是一種可用性和性能監(jiān)控體系,支持與企業(yè)應(yīng)用軟件或服務(wù)進(jìn)行交互時(shí)滚停,對(duì)數(shù)字化代理沃粗、人員或機(jī)器與的運(yùn)維體驗(yàn)和行為進(jìn)行優(yōu)化。為了進(jìn)行這次評(píng)估键畴,它包括實(shí)際用戶監(jiān)控(RUM)和合成交易監(jiān)控(STM)最盅,面向基于Web的最終用戶和基于移動(dòng)的最終用戶(EUEM)。
最終用戶體驗(yàn)監(jiān)測始終是APM最重要的維度沒有之一起惕,這也是APM與傳統(tǒng)運(yùn)維監(jiān)控的最主要差別涡贱。
傳統(tǒng)運(yùn)維監(jiān)控一般都是自下而上的監(jiān)控,關(guān)注點(diǎn)在系統(tǒng)和服務(wù)層面惹想,通過對(duì)基礎(chǔ)架構(gòu)问词、系統(tǒng)、服務(wù)勺馆、應(yīng)用的監(jiān)控來保證服務(wù)的高可用和應(yīng)用的體驗(yàn)效果戏售。而APM是自上而下的監(jiān)控,關(guān)注點(diǎn)在最終用戶的體驗(yàn)層面草穆,通過對(duì)用戶體驗(yàn)灌灾、網(wǎng)絡(luò)、應(yīng)用以及服務(wù)的監(jiān)控來保證應(yīng)用的高可用和體驗(yàn)效果悲柱。
- 應(yīng)用程序發(fā)現(xiàn)锋喜、跟蹤和診斷(ADTD)
應(yīng)用程序發(fā)現(xiàn)、跟蹤和診斷是一套流程豌鸡,旨在了解應(yīng)用服務(wù)器之間的關(guān)系嘿般,跨這些節(jié)點(diǎn)描述事務(wù),并且能夠深入檢查方法及其他主機(jī)資源涯冠。它把三個(gè)之前不同的方面(應(yīng)用程序拓?fù)浣Y(jié)構(gòu)的發(fā)現(xiàn)及可視化炉奴、用戶定義的事務(wù)剖析和應(yīng)用程序組件的深入探究)統(tǒng)一起來。所有三個(gè)方面主要專注于解決問題蛇更,相互關(guān)聯(lián)瞻赶。
應(yīng)用拓?fù)溥壿嫲l(fā)現(xiàn)和可視化
能自動(dòng)識(shí)別應(yīng)用在執(zhí)行的過程中涉及的軟硬件架構(gòu)和組件,并且可以描繪出應(yīng)用交付鏈中相互通訊的各種組件的訪問路徑派任,通過調(diào)用鏈的實(shí)現(xiàn)砸逊,形成拓?fù)鋱D并進(jìn)行可視化,直觀地展示應(yīng)用的拓?fù)溥壿嫛?/p>
用戶定義的事務(wù)剖析
從用戶請(qǐng)求的角度來對(duì)事務(wù)中的用戶定義的事件進(jìn)行追蹤掌逛∈σ荩可以根據(jù)要求對(duì)特定的用戶訪問特定的事務(wù)請(qǐng)求進(jìn)行完整的追蹤,包括在整個(gè)請(qǐng)求過程中涉及到的所以服務(wù)和組件豆混。
應(yīng)用組件深度鉆取
對(duì)發(fā)現(xiàn)的服務(wù)和組件的資源消耗和事件提供足夠細(xì)粒度的監(jiān)控篓像。例如對(duì)應(yīng)用訪問的數(shù)據(jù)庫服務(wù)动知,MQ服務(wù)等提供深度的監(jiān)控,當(dāng)發(fā)現(xiàn)有數(shù)據(jù)庫服務(wù)查詢性能問題的時(shí)候员辩,可以提供包括完整的SQL語句拍柒,執(zhí)行計(jì)劃,數(shù)據(jù)庫狀態(tài)等在內(nèi)的詳細(xì)監(jiān)控?cái)?shù)據(jù)屈暗。
- 面向應(yīng)用程序的IT運(yùn)維AI(AIOps)
面向應(yīng)用程序的AIOps能夠自動(dòng)發(fā)現(xiàn)性能和事件模式拆讯,支持發(fā)現(xiàn)Java和.NET應(yīng)用服務(wù)器支持的HTTP/S事務(wù)出現(xiàn)的性能異常的根本原因。這是通過機(jī)器學(xué)習(xí)养叛、統(tǒng)計(jì)推理及/或其他方法來實(shí)現(xiàn)的种呐。 2016 年,面向應(yīng)用程序的AIOps被稱為“應(yīng)用分析”弃甥,后來被稱為“算法IT運(yùn)維”爽室,最后在2017年年中改為“AIOps”。
其實(shí)就是運(yùn)維數(shù)據(jù)分析淆攻,要求使用以下技術(shù)的組合來進(jìn)行運(yùn)維數(shù)據(jù)分析:復(fù)雜事件處理阔墩,統(tǒng)計(jì)模式發(fā)現(xiàn)與識(shí)別,非結(jié)構(gòu)化數(shù)據(jù)索引瓶珊、查詢和推斷啸箫,拓?fù)溥壿嫹治觯嗑S數(shù)據(jù)庫檢索和分析伞芹。這里的數(shù)據(jù)分析技術(shù)都是為了對(duì)APM采集到的大量的各維度性能數(shù)據(jù)進(jìn)行實(shí)時(shí)的運(yùn)算和處理忘苛,從而對(duì)應(yīng)用的運(yùn)維和優(yōu)化起到輔助決策和驅(qū)動(dòng)。例如通過實(shí)時(shí)的智能基線和異常監(jiān)測來驅(qū)動(dòng)警報(bào)系統(tǒng)唱较。
思考
在統(tǒng)一監(jiān)控體系中扎唾,APM
套件將承擔(dān)著最重要的角色,同時(shí)也需要將傳統(tǒng)的基礎(chǔ)設(shè)施監(jiān)控Grafana
南缓,動(dòng)環(huán)監(jiān)控胸遇,網(wǎng)絡(luò)性能監(jiān)控,日志監(jiān)控ELK
等等整合起來汉形,當(dāng)然理想條件是可以根據(jù)AI來完成智能監(jiān)控報(bào)警和處理纸镊,通過大數(shù)據(jù),機(jī)器學(xué)習(xí)获雕,云薄腻,容器等技術(shù)的融合收捣,來提供更智能的性能管理届案,例如應(yīng)用基線的智能學(xué)習(xí)和計(jì)算,無需用戶設(shè)置閾值罢艾,并且在探測到性能問題和異常的時(shí)候可以根據(jù)用戶設(shè)定的策略自動(dòng)調(diào)整系統(tǒng)的負(fù)載調(diào)度和資源的伸縮楣颠,而不只是僅僅通知用戶尽纽。
后續(xù)發(fā)現(xiàn)有前輩和我觀點(diǎn)差不多,寫的更加清晰明了童漩。有興趣可以看看這篇文章弄贿。
這么多監(jiān)控組件,總有一款適合你