在本文中,我報(bào)告了我在大型應(yīng)用程序上工作的經(jīng)驗(yàn),以及當(dāng)我開始制作旨在解決業(yè)務(wù)關(guān)鍵問題的軟件時(shí),監(jiān)控是如何進(jìn)入我的旅程的。
解決客戶的關(guān)鍵問題可以產(chǎn)生巨大的商機(jī),但在這些情況下,您需要為真正的高客戶期望做好準(zhǔn)備。
為了服務(wù)這些客戶并抓住這些商機(jī),我很快意識(shí)到需要自動(dòng)化大部分占用我大量時(shí)間的日常活動(dòng),從而對生產(chǎn)力產(chǎn)生負(fù)面影響。
我們每個(gè)月都有新客戶;申請?jiān)絹碓綇?fù)雜,官僚作風(fēng)也越來越多,以前一個(gè)月一次的突發(fā)事件,現(xiàn)在每天都讓我們加班到很晚。
我不知道我的應(yīng)用程序已損壞,因?yàn)榭蛻糁苯酉蛭覉?bào)告了錯(cuò)誤。這些客戶不報(bào)告錯(cuò)誤或錯(cuò)誤;他們停止使用應(yīng)用程序?qū)ふ伊硪粋€(gè)組織更好的團(tuán)隊(duì)。
在擔(dān)任了十多年的軟件工程師之后,我花了很多時(shí)間來選擇最好的工具來提高我的工作效率。
監(jiān)控領(lǐng)域出現(xiàn)了很多混亂,可能是因?yàn)榭梢砸远喾N不同方式使用大量數(shù)據(jù)。起初,這種方法對開發(fā)人員來說是一個(gè)挑戰(zhàn),他們很難理解什么是解決緊急情況的最佳組合。在這篇文章中,我寫了我試圖區(qū)分的經(jīng)驗(yàn):
- 何時(shí)或在何種情況下監(jiān)控可以有效。
- 為什么您應(yīng)該監(jiān)控系統(tǒng)的某些部分而其他部分不。
- 每個(gè)特定監(jiān)控問題的正確工具是什么。
什么是應(yīng)用程序監(jiān)控工具?
應(yīng)用監(jiān)控工具一般由兩部分組成:
- 中介
- 分析平臺(tái)
代理是開發(fā)人員安裝在其服務(wù)器或應(yīng)用程序中的軟件包(基于代理的設(shè)計(jì)方式)。其目標(biāo)是收集有關(guān)應(yīng)用程序行為和性能的相關(guān)信息。
此信息被發(fā)送到遠(yuǎn)程平臺(tái),該平臺(tái)分析該數(shù)據(jù)并生成可視圖表,以幫助開發(fā)人員輕松了解其應(yīng)用程序中發(fā)生的情況。如果出現(xiàn)問題,它能夠向開發(fā)人員發(fā)送警報(bào)。
他們不是什么
這顯然是一個(gè)簡單的描述,可以涵蓋大量的工具。
事實(shí)上,很多工具看起來像應(yīng)用程序監(jiān)控工具,但它們與應(yīng)用程序監(jiān)控?zé)o關(guān)。這些相似之處讓我很難找到合適的工具來解決我的生產(chǎn)力問題。
這是我在旅途中學(xué)到的。
日志管理工具
日志管理工具通常是我們傾向于使用的第一種工具,因?yàn)樽詮膽?yīng)用程序開發(fā)之旅開始以來,查看應(yīng)用程序日志是每天最重要的活動(dòng)之一,以了解我們應(yīng)用程序中最重要的流程中發(fā)生的事情.
但是當(dāng)應(yīng)用程序開始擴(kuò)展時(shí)(它在多臺(tái)服務(wù)器上運(yùn)行,需要復(fù)雜的架構(gòu)等),我意識(shí)到很難從日志中提取有關(guān)應(yīng)用程序性能的相關(guān)信息并隨著時(shí)間的推移監(jiān)控新版本的影響。
就像汽車發(fā)明時(shí)一樣,人們最初是在尋找更快的馬,因?yàn)樗麄兞?xí)慣了使用馬。然后他們意識(shí)到需要一種不同的工具才能將其提升到一個(gè)新的水平。
正常運(yùn)行時(shí)間監(jiān)視器
正常運(yùn)行時(shí)間監(jiān)控工具可以描述為更復(fù)雜的“ping”。
主要目的很簡單:他們從多個(gè)區(qū)域 ping 您的應(yīng)用程序端點(diǎn),以了解位于不同地理位置的用戶可以訪問它的好壞程度。
此信息有助于了解云基礎(chǔ)架構(gòu)如何將您的應(yīng)用程序帶給最終用戶(負(fù)載均衡器、CDN、網(wǎng)絡(luò)等);它不提供有關(guān)您的應(yīng)用程序內(nèi)部發(fā)生的事情的任何信息。
就我而言,我的應(yīng)用程序?yàn)槭澜绺鞯氐挠脩籼峁┓?wù),因此外部 ping 統(tǒng)計(jì)信息通過決定我們應(yīng)該將服務(wù)器放置在哪些區(qū)域來幫助我們了解哪些區(qū)域的延遲最高。
他們監(jiān)控外部環(huán)境;你永遠(yuǎn)不會(huì)知道你的數(shù)據(jù)庫是否變慢了。
服務(wù)器與應(yīng)用程序監(jiān)控
這是最難理解的區(qū)別,我還沒有找到任何有趣的文章來幫助我澄清職責(zé)分離,而不是試圖向我推銷各種工具的廣告。
應(yīng)用程序在服務(wù)器上運(yùn)行,因此它們顯然是兩個(gè)嚴(yán)格相關(guān)的系統(tǒng)組件。這就是為什么一開始它可能會(huì)令人困惑。
但是服務(wù)器和應(yīng)用程序監(jiān)控完成了兩個(gè)完全不同的需求。
服務(wù)器監(jiān)控側(cè)重于基礎(chǔ)設(shè)施,而且基本上任何像樣的云提供商都免費(fèi)提供。
google GCP、AWS和DigitalOcean默認(rèn)為您提供最重要的指標(biāo),如 CPU 使用率、存儲(chǔ)、帶寬等,完全免費(fèi),除了運(yùn)行 VM 本身之外沒有額外費(fèi)用。
了解您的虛擬機(jī)必須擴(kuò)大(或縮小)的時(shí)間是一項(xiàng)重要的必要條件,但說 CPU 處于 100% 可能意味著一切,但什么也不是:
- 如果您的應(yīng)用程序消耗太多資源,您需要重構(gòu)應(yīng)用程序的哪一部分?
- 您如何確定為什么您的應(yīng)用程序的某個(gè)部分速度變慢,從而給您的用戶帶來負(fù)面體驗(yàn)?
- 您如何知道您的應(yīng)用程序是否正在觸發(fā)異常,為什么?
如文章開頭所述,服務(wù)器監(jiān)控通過在服務(wù)器級(jí)別安裝代理來工作,因此在您的應(yīng)用程序“外部”。但是幾乎不可能從外部查看您的應(yīng)用程序并知道代碼內(nèi)部發(fā)生了什么。
應(yīng)用程序監(jiān)控最終將您的注意力集中在“應(yīng)用程序”上。
這類工具為您提供了一個(gè)軟件庫,而不是安裝在操作系統(tǒng)中的軟件包。開發(fā)人員在他們的應(yīng)用程序中安裝集成庫,就像任何其他依賴項(xiàng)一樣,而無需觸及服務(wù)器的配置。它會(huì)自動(dòng)收集有關(guān)您的代碼性能、錯(cuò)誤和趨勢的相關(guān)信息,以便在出現(xiàn)問題時(shí)提醒您,例如哨兵。
應(yīng)用程序監(jiān)控工具解決了什么問題?
應(yīng)用程序監(jiān)控工具提供指標(biāo)和警報(bào)來識(shí)別應(yīng)用程序中的錯(cuò)誤和瓶頸,而無需等待客戶報(bào)告問題。
精心設(shè)計(jì)的應(yīng)用程序監(jiān)控解決方案為開發(fā)人員提供了將應(yīng)用程序性能與業(yè)務(wù)成果聯(lián)系起來所需的信息,并在性能問題影響最終用戶之前識(shí)別并修復(fù)它們,從而實(shí)現(xiàn)更好的技術(shù)支持和最佳的服務(wù)連續(xù)性。
它就像一個(gè)哨兵,讓您可以直觀地探索代碼的運(yùn)行方式,完全自主地完成 90% 的分析工作。
這就是 Inspector 的設(shè)計(jì)目的以及它在監(jiān)控市場中的定位。
為什么應(yīng)用程序監(jiān)控很重要?
這很重要,因?yàn)闈M意的客戶是付費(fèi)客戶。
相對而言,擁有應(yīng)用程序是容易的部分;任何人都可以做到。
真正的工作始于與客戶建立融洽的關(guān)系并使他們成為第一。
如果您將客戶放在首位,他們將仍然是您應(yīng)用程序的忠實(shí)粉絲。另一方面,對您的企業(yè)來說最糟糕的事情之一是容易出錯(cuò)、有缺陷的軟件。
沒有什么比等待網(wǎng)站加載或完全關(guān)閉網(wǎng)站更快地驅(qū)走潛在的付費(fèi)客戶了。所以盡一切可能讓他們開心,收入就會(huì)隨之而來。
您可以在應(yīng)用程序中監(jiān)控什么?
您應(yīng)該能夠輕松了解應(yīng)用程序完成 HTTP 請求或完成后臺(tái)進(jìn)程(如作業(yè)、cron 任務(wù)等)需要多長時(shí)間,以了解系統(tǒng)中消耗最多的進(jìn)程是什么。
每個(gè)執(zhí)行周期通常稱為“事務(wù)”。因此,在事務(wù)期間,應(yīng)用程序可以執(zhí)行許多不同的任務(wù),例如 SQL 查詢、讀/寫文件、調(diào)用外部系統(tǒng)、算法等。
我們將此任務(wù)列表稱為“時(shí)間線”,您可以如下圖所示直觀地探索它:
所有這些信息都由監(jiān)控工具自動(dòng)收集,無需開發(fā)人員進(jìn)行任何棘手的配置。
我真的相信清晰和簡單的信息是做出更好決策的最重要的事情。
了解為什么、何時(shí)以及如何使用監(jiān)控工具是我開發(fā)者旅程中最令人困惑的部分之一,我希望這段經(jīng)歷可以幫助您更清楚地了解您的需求以及您需要解決的正確工具是什么您的問題并提高您的生產(chǎn)力。