使用Elastic Stack做应用的360度全观察性监控
文章目錄
- 示例架構(gòu)
- 事件分析和探索
- APM 探索
- Infra探索
- Discovery探索
- Service探索
- 總結(jié)
Elastic堅(jiān)信,如果我們要監(jiān)控企業(yè)的IT基礎(chǔ)設(shè)施或者說(shuō)完成整個(gè)軟件的端到端的全鏈路監(jiān)控,那么就不應(yīng)該漏過(guò)任何一個(gè)側(cè)面的數(shù)據(jù)。這需要通過(guò)360度的全觀察性來(lái)完成。Elastic Stack,作為一個(gè)大數(shù)據(jù)平臺(tái)的技術(shù)棧,在運(yùn)維監(jiān)控這個(gè)垂直領(lǐng)域,已經(jīng)提供了一套完整的技術(shù)解決方案,從日志分析,到指標(biāo)監(jiān)控,再到軟件性能監(jiān)控和可用性監(jiān)控,都有產(chǎn)品級(jí)的開(kāi)箱即用的方案。
在這篇文章里面,我們通過(guò)一個(gè)例子,展示如何通過(guò)使用Elastic的全觀察性解決方案去快速定位應(yīng)用運(yùn)行過(guò)程中的問(wèn)題。
示例架構(gòu)
我們假設(shè)有一個(gè)寵物醫(yī)院的應(yīng)用,其架構(gòu)如下:
從上圖可以看到,這是一個(gè)常見(jiàn)的前后端分離的微服務(wù)架構(gòu):
- 用戶流量通過(guò)K8S的負(fù)載均衡進(jìn)行導(dǎo)入
- 前端部署多個(gè)基于REACT的Nodejs服務(wù)器 + NGINX反向代理
- 前端通過(guò)K8S的負(fù)載均衡對(duì)后端服務(wù)器進(jìn)行訪問(wèn)
- 后端服務(wù)包含兩組服務(wù)的多個(gè)服務(wù)器,分別是:
- 基于java spring的 web service + NGINX反向代理,用于事務(wù)型操作
- 基于python flask的 web service + NGINX反向代理,用于檢索型操作
- 數(shù)據(jù)層有兩組服務(wù)器,分別是MySQL和Elasticsearch,用于提供事務(wù)數(shù)據(jù)和可檢索數(shù)據(jù)
在這個(gè)架構(gòu)中的每一次,我們都使用:
- filebeat,用于日志的采集
- packetbeat,用于網(wǎng)絡(luò)數(shù)據(jù)的采集
- Metricbeat,用于系統(tǒng)、中間件指標(biāo)的采集
- Auditbeat,用于安全、審計(jì)事件的采集
事件分析和探索
我們可以通過(guò)構(gòu)建機(jī)器學(xué)習(xí)的任務(wù),持續(xù)的對(duì)系統(tǒng)里面的各種指標(biāo)進(jìn)行監(jiān)控,并且配合Alert功能,實(shí)時(shí)的對(duì)異常事件進(jìn)行上報(bào)。配置了郵件告警之后,當(dāng)監(jiān)測(cè)到異常,我們會(huì)收到如下告警:
可以將調(diào)查鏈接附在郵件里面。通過(guò)鏈接,我們可以訪問(wèn)Kibana的機(jī)器學(xué)習(xí)異常監(jiān)測(cè)界面。
因?yàn)槭菍?shí)時(shí)告警,我們可以直接觀測(cè)8:00 PM的異常
機(jī)器學(xué)習(xí)任務(wù)包含了多種信息,包括:
- 服務(wù)的總體異常情況(Overall)
- 各子服務(wù)層的異常情況(spring后端和node前端)
- 異常的嚴(yán)重程度(Severity)
- 探測(cè)器監(jiān)控的指標(biāo)類型(這里是服務(wù)的時(shí)延方差指標(biāo))
- 影響因子(/api/owner)
- 指標(biāo)的實(shí)際值、標(biāo)準(zhǔn)值和偏差描述
從這里,我們可以基本分析到,整體響應(yīng)從前端到后端的監(jiān)控都有異常,即問(wèn)題定位應(yīng)該是在spring的后端服務(wù)上。
通過(guò)點(diǎn)擊右邊的Action窗口,我們可以從其他方面探索整個(gè)App在這個(gè)時(shí)間段內(nèi)的實(shí)際運(yùn)行情況:
可探索的數(shù)據(jù)包括:
- APM運(yùn)行時(shí)數(shù)據(jù) (APM Analysis)
- APM的統(tǒng)計(jì)數(shù)據(jù)儀表板 (Service Analysis)
- 基礎(chǔ)設(shè)施監(jiān)控?cái)?shù)據(jù) (Infra Analysis)
- 服務(wù)可用性數(shù)據(jù) (Uptime Analysis)
注意,在探索的過(guò)程中,被探索的其他數(shù)據(jù),仍然是鉚定在出現(xiàn)問(wèn)題的時(shí)間窗口的。這個(gè)功能很利于我們做數(shù)據(jù)的切片觀察
APM 探索
通過(guò)APM Analysis,進(jìn)入APM的探索頁(yè)面,我們可以看到,在7:58 pm 開(kāi)始,接口調(diào)用的響應(yīng)時(shí)間出現(xiàn)了一個(gè)明顯的毛刺。我們可以直接在界面上下鉆該毛刺。
可以看到,在這個(gè)毛刺產(chǎn)生階段,不只是/api/owner這個(gè)API有問(wèn)題,而且其他的api比如,api/visits同樣出現(xiàn)了問(wèn)題。
可以繼續(xù)對(duì)API接口進(jìn)行探索:
通過(guò)APM的數(shù)據(jù),我們可以看到api/visits在7:58 pm ~ 8:01 pm這個(gè)時(shí)間段內(nèi)的調(diào)用時(shí)間情況。在毛刺之前,api/visits的響應(yīng)時(shí)間在100ms左右,在毛刺階段,響應(yīng)時(shí)間變?yōu)?000ms。
基本上,所有的的時(shí)間都是花在sping對(duì)后端數(shù)據(jù)庫(kù)的訪問(wèn)上。在異常之前,DB的訪問(wèn)延時(shí)在xxx微秒(百級(jí))左右,在毛刺階段,變?yōu)閤xxx微秒(千級(jí))
這時(shí),我們基本可以判斷,問(wèn)題可能出在數(shù)據(jù)庫(kù)上!
Infra探索
要判斷數(shù)據(jù)庫(kù)上的問(wèn)題,就全方位的IT基礎(chǔ)設(shè)施的監(jiān)控,從主機(jī)到數(shù)據(jù)庫(kù),中間件。
通過(guò)Infra Analysis對(duì)IT基礎(chǔ)設(shè)施進(jìn)行探索:
可以看到,我們對(duì)整個(gè)IT基礎(chǔ)設(shè)施有一個(gè)全景圖。顏色越深的節(jié)點(diǎn),代表該資源在特定時(shí)間段內(nèi)資源使用率越高。我們可以看到,這個(gè)時(shí)間點(diǎn)內(nèi),我們的MySQL服務(wù)器的使用情況明顯比其他服務(wù)偏高。
可以通過(guò)點(diǎn)擊右鍵,進(jìn)入對(duì)應(yīng)節(jié)點(diǎn)的日志。很容易,我們可以發(fā)現(xiàn)MySQL服務(wù)在這個(gè)時(shí)間點(diǎn)做了一次多表的聯(lián)合掃描。耗時(shí)120s
Discovery探索
我們可以在Discovery頁(yè)面再做深度的探索,可以看到,這個(gè)多表聯(lián)合掃描和服務(wù)的異常是重疊的。
由此,我們找到根本原因
Service探索
我們也可以在Service Analysis頁(yè)面分析服務(wù)層面的影響。比如,查看該事件段有多少用戶登錄了系統(tǒng),系統(tǒng)響應(yīng)時(shí)延的百分位等指標(biāo),因?yàn)樗械臄?shù)據(jù)是關(guān)聯(lián)分析的,我們可以在可視化圖標(biāo)上集成所有的信息,下圖中,System performance子圖,就使用machine learning的數(shù)據(jù),在對(duì)應(yīng)時(shí)間點(diǎn)打上了alert flag
總結(jié)
大多數(shù)時(shí)候,我們的可觀察性是被撕裂的,任何從單一維度,比如日志,指標(biāo),APM方面獨(dú)立去看,可以看到異常,但是卻無(wú)法找到根本原因。數(shù)據(jù)需要被放在一起,提供360度的全觀察性進(jìn)行,才能最大化的對(duì)數(shù)據(jù)進(jìn)行探索。不光是運(yùn)維問(wèn)題,商業(yè)洞察,安全分析同樣如此,希望這篇文章對(duì)你有所啟發(fā),能夠構(gòu)建一個(gè)真正的大數(shù)據(jù)平臺(tái)對(duì)數(shù)據(jù)進(jìn)行探索,因?yàn)榇髷?shù)據(jù)不僅是數(shù)據(jù)量大,數(shù)據(jù)類型多,更重要的是數(shù)據(jù)并非孤立,需要放在一起才能產(chǎn)生價(jià)值。
總結(jié)
以上是生活随笔為你收集整理的使用Elastic Stack做应用的360度全观察性监控的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用Python做一个安全攻防工具:端口嗅
- 下一篇: 电信联通不回应宽带不达标事件