本文來自微信公眾號(hào)“開源云中文社區(qū)”。
可觀察性已成為現(xiàn)代軟件開發(fā)中的一個(gè)關(guān)鍵概念,使團(tuán)隊(duì)能夠深入了解復(fù)雜系統(tǒng)的性能、健康狀況和行為?;陬A(yù)定義度量和靜態(tài)閾值的傳統(tǒng)監(jiān)控方法在應(yīng)對現(xiàn)代應(yīng)用程序的動(dòng)態(tài)和分布式特性方面存在局限性。因此,一種稱為動(dòng)態(tài)可觀測性的新范式獲得了關(guān)注,通過結(jié)合度量、日志和跟蹤,提供了動(dòng)態(tài)系統(tǒng)的實(shí)時(shí)可見性。
憑借適應(yīng)不斷變化的環(huán)境和捕獲上下文信息的能力,動(dòng)態(tài)可觀察性使開發(fā)團(tuán)隊(duì)能夠主動(dòng)識(shí)別和解決問題,減少平均解決時(shí)間(MTTR),提高整體系統(tǒng)可靠性以及開發(fā)人員的生產(chǎn)力。
如今,動(dòng)態(tài)可觀察性推動(dòng)了開發(fā)實(shí)踐的發(fā)展,將運(yùn)行時(shí)調(diào)試集成到開發(fā)生命周期中,鼓勵(lì)團(tuán)隊(duì)采用主動(dòng)的方法進(jìn)行系統(tǒng)監(jiān)控和故障排除。通過動(dòng)態(tài)可觀測性提供的洞察,開發(fā)團(tuán)隊(duì)可以在整個(gè)開發(fā)過程中優(yōu)化系統(tǒng)性能、檢測異常并做出數(shù)據(jù)驅(qū)動(dòng)的決策。
動(dòng)態(tài)可觀察性的興起代表了軟件開發(fā)領(lǐng)域的變革性轉(zhuǎn)變。通過擁抱動(dòng)態(tài)可觀察性,組織可以在日益復(fù)雜和動(dòng)態(tài)的數(shù)字生態(tài)系統(tǒng)中培養(yǎng)持續(xù)改進(jìn)的文化,提高系統(tǒng)可靠性,并提供高質(zhì)量的軟件產(chǎn)品。
可觀察性:好的、壞的和壓倒性的
可觀察性是通過觀察系統(tǒng)的輸出來理解系統(tǒng)行為的能力。這包括日志、跟蹤和度量。主要目標(biāo)是能夠通過對系統(tǒng)的運(yùn)行狀況和狀態(tài)有一個(gè)清晰的概述來診斷和調(diào)試問題。簡單地說,它是查看系統(tǒng)內(nèi)部、了解其工作方式并積極調(diào)試系統(tǒng)的能力。
雖然在過去,應(yīng)用程序性能監(jiān)控(APM)工具和日志記錄工具與內(nèi)置集成開發(fā)環(huán)境(IDE)調(diào)試工具的組合足以識(shí)別應(yīng)用程序中的問題,但今天的現(xiàn)實(shí)更為復(fù)雜。向微服務(wù)和云原生、無服務(wù)器應(yīng)用程序、漸進(jìn)式交付工作流和其他高級架構(gòu)的過渡給開發(fā)者和運(yùn)維帶來了新的挑戰(zhàn)。
從Lightrun的經(jīng)驗(yàn)來看,以上是開發(fā)人員在生產(chǎn)環(huán)境中常見的故障排除挑戰(zhàn)的代表性子集。
由于各種原因,訪問部署在Kubernetes集群中的應(yīng)用程序或服務(wù)的遠(yuǎn)程實(shí)例或從開發(fā)人員機(jī)器調(diào)試無服務(wù)器Lambda功能是一項(xiàng)挑戰(zhàn)。首先,從開發(fā)人員機(jī)器到生產(chǎn)部署的訪問本身要么被禁止,要么過于復(fù)雜,以至于會(huì)削弱開發(fā)人員的能力并減緩調(diào)試過程。即使已經(jīng)解決了這樣的障礙,能夠在不停止應(yīng)用程序、更改其狀態(tài)并重新部署以獲得這些額外日志的情況下從生產(chǎn)環(huán)境中獲取運(yùn)行時(shí)遙測是一個(gè)極其漫長且容易出錯(cuò)的過程。
這些只是導(dǎo)致動(dòng)態(tài)可觀察性上升并轉(zhuǎn)變?yōu)檐浖_發(fā)生命周期工具堆棧一部分的少數(shù)例子。從需求的角度來看,為開發(fā)人員提供更多的工具和能力來對自己的應(yīng)用程序進(jìn)行故障排除,無論它們在哪里運(yùn)行以及它們有多復(fù)雜,這是一種新的常態(tài)。
動(dòng)態(tài)可觀察性案例:關(guān)鍵業(yè)務(wù)價(jià)值
正如我們前面所定義的,當(dāng)開發(fā)人員需要使用傳統(tǒng)的調(diào)試工具和APM解決方案從IDE中排除遠(yuǎn)程和復(fù)雜的工作負(fù)載時(shí),他們會(huì)功虧一簣。動(dòng)態(tài)可觀測性就是為了解決這些挑戰(zhàn)。
基本上,與靜態(tài)日志記錄相反,具有動(dòng)態(tài)可觀察性的開發(fā)人員可以直接從他們的IDE中享受跨應(yīng)用程序部署和環(huán)境的端到端觀察性。這意味著降低了MTTR,提高了開發(fā)人員的生產(chǎn)力,并優(yōu)化了總體成本,因?yàn)殚_發(fā)人員在需要的地方和時(shí)間調(diào)試和使用日志和遙測數(shù)據(jù),而不是監(jiān)控一切。
動(dòng)態(tài)可觀察性已成為現(xiàn)代軟件開發(fā)中的一種關(guān)鍵方法,使團(tuán)隊(duì)能夠深入了解系統(tǒng)行為并做出明智的決策。它超越了傳統(tǒng)的測試和監(jiān)控方法,提供了對系統(tǒng)模式、優(yōu)勢和劣勢的全面理解。
采用動(dòng)態(tài)可觀察性的原理和好處可以總結(jié)為以下幾點(diǎn):
——增強(qiáng)對系統(tǒng)的理解
動(dòng)態(tài)可觀察性使開發(fā)人員能夠觀察系統(tǒng)狀態(tài)和行為,為他們提供詳細(xì)的洞察。通過監(jiān)控實(shí)時(shí)指標(biāo)、日志和跟蹤,開發(fā)人員可以全面了解其系統(tǒng),識(shí)別潛在問題并做出數(shù)據(jù)驅(qū)動(dòng)的決策。
——完善測試驅(qū)動(dòng)開發(fā)
雖然測試驅(qū)動(dòng)開發(fā)(TDD)側(cè)重于編寫測試以確保代碼的正確性,但動(dòng)態(tài)可觀察性更進(jìn)一步地觀察和分析整個(gè)系統(tǒng)的行為。它認(rèn)識(shí)到,單獨(dú)的測試可能無法捕捉所有可能的場景,并鼓勵(lì)開發(fā)人員采用可觀察性來全面理解系統(tǒng)。
——加強(qiáng)行為驅(qū)動(dòng)開發(fā)
雖然行為驅(qū)動(dòng)開發(fā)(BDD)側(cè)重于利益相關(guān)者之間的協(xié)作,以定義行為預(yù)期,但動(dòng)態(tài)可觀察性通過在運(yùn)行時(shí)跨環(huán)境(生產(chǎn)、階段、CI/CD、QA)積極觀察和檢測系統(tǒng)行為,揭示可能隱藏的模式和潛在風(fēng)險(xiǎn),使其更進(jìn)一步。
——完善監(jiān)控
動(dòng)態(tài)可觀察性和開發(fā)者原生可觀測性不能取代監(jiān)控;監(jiān)控確保了系統(tǒng)的穩(wěn)定性和性能,而動(dòng)態(tài)可觀察性提供了更深入的理解。通過將監(jiān)控和動(dòng)態(tài)可觀察性相結(jié)合,開發(fā)團(tuán)隊(duì)可以創(chuàng)建一個(gè)可靠且精簡的系統(tǒng),從而減少漏洞和風(fēng)險(xiǎn)。
一句話:動(dòng)態(tài)可觀測性是新常態(tài)
動(dòng)態(tài)可觀察性代表了軟件開發(fā)的范式轉(zhuǎn)變,使開發(fā)人員能夠詳細(xì)了解系統(tǒng)行為并做出明智的決策。它使用超越傳統(tǒng)測試的工具和實(shí)踐,使團(tuán)隊(duì)能夠創(chuàng)建健壯可靠的系統(tǒng)。它與DevOps、TDD和BDD等現(xiàn)有方法論協(xié)調(diào)工作,以系統(tǒng)行為為重點(diǎn)增強(qiáng)了它們的原則。通過采用動(dòng)態(tài)可觀察性,組織可以增強(qiáng)其開發(fā)過程,并構(gòu)建更具彈性和效率的軟件系統(tǒng)。
在動(dòng)態(tài)可觀測性解決方案中要尋找什么?
實(shí)時(shí)調(diào)試:開發(fā)人員必須能夠?qū)崟r(shí)向代碼中添加日志記錄語句和度量,而無需重新部署或重新啟動(dòng)應(yīng)用程序。
按需快照:動(dòng)態(tài)快照為開發(fā)人員提供虛擬斷點(diǎn),而無需停止應(yīng)用程序的執(zhí)行。能夠添加條件、計(jì)算表達(dá)式和檢查任何代碼是此類別中的關(guān)鍵功能。
自定義指標(biāo):從IDE開始,開發(fā)人員應(yīng)該能夠創(chuàng)建自定義指標(biāo),以在可變級別上跟蹤系統(tǒng)行為的特定方面,如響應(yīng)時(shí)間、方法持續(xù)時(shí)間或錯(cuò)誤率。所有任務(wù)都應(yīng)該在不需要重新部署任何代碼的情況下完成。
與現(xiàn)有的開發(fā)人員和企業(yè)工具集成,包括Prometheus、Grafana、VSCode、公共云provider等云原生工具。
成本優(yōu)化:能夠分析與可觀察性相關(guān)的低效率并進(jìn)行優(yōu)化以降低成本,例如用動(dòng)態(tài)日志替換靜態(tài)日志,這是此類工具的一項(xiàng)重要能力。
動(dòng)態(tài)可觀察性使開發(fā)人員能夠深入了解其實(shí)時(shí)應(yīng)用程序,顯著提高開發(fā)人員的生產(chǎn)力,降低運(yùn)營和基礎(chǔ)設(shè)施成本,并簡化調(diào)試和修復(fù)問題的過程。因此,開發(fā)人員可以將復(fù)雜的故障排除交給動(dòng)態(tài)可觀測性解決方案,從而花更多的時(shí)間進(jìn)行創(chuàng)造性的編碼。