應用性能監控方法一覽

對於基於雲的服務,其正常運行時間是最爲重要的運維指標之一。服務的中斷不僅會影響用戶體驗,而且對品牌帶來負面影響。哪怕99.9%或99.99%的可用性也很難取悅用戶,他們總是期望100%的可用性。爲了達到這個近乎苛刻的完美要求,我們不僅需要遵循良好的設計模式保持服務的可擴展性,同時還要保證硬件、應用服務器以及數據庫服務器的健康運行。

Zephyr的CTO Shailesh Mangal曾經撰文總結了各種監控類型以及所需的工具。(注:Zephyr爲開發和QA團隊提供解決方案,幫助交付高質量的軟件;提供企業級測試管理產品能夠與各種工具集成,實現測試的實時管理。)在Shailesh Mangal的文章中,他總結了核心基礎設施監控、應用級別監控、微服務監控以及多租戶日誌監控的工具以及各自的指標,爲應用監控提供了比較全面的指導。

Core Infrastructure Monitoring:CIM
核心基礎設施監控

在雲基礎設施中,出現硬件故障是難以避免的。核心基礎設施監控會探測硬件瓶頸相關的早期跡象並捕獲硬件故障信號,在出現更大的問題之前對其進行應對。基礎設施監控的範圍包括機器的健康狀況、CPU使用、內存消耗以及網絡帶寬,基於這些監控信息,能夠判斷基礎設施的當前狀態,從而進行必要的擴展。

有衆多的工具都能幫助我們獲取硬件的健康狀態。在大多數情況下,託管提供商(如Amazon AWS、Heroku)的工具基本上就能滿足這種監控的需要。

CIM的指標包括:

CPU的平均使用率 
CPU峯值的持續時間
內存的平均使用情況
帶寬的輸入輸出情況

Application Level Monitoring:ALM
應用級別監控

應用級別的監控涉及到監控各種服務器的狀態,如數據庫服務器、應用服務器、分析服務器以及Hadoop集羣,而要監控的參數則是與應用或工具相關的。

應用監控方面有不少偉大的工具,如Datadog和New Relic。

應用監控的指標包括:

JVM進程的內存
內部線程的數量
磁盤IO
索引的讀取/寫入操作

Micro Service Monitoring:MSM
微服務監控

微服務是現代雲架構的組成部分,是實現水平擴展的關鍵。不管你運行的是傳統的單塊系統還是設計良好且組織精密的微服務,這些系統都會有不同的API端點,遵循不同的協議,滿足不同的SLA需求。微服務監控就是要監控每個服務的吞吐量和性能,進而確保在任何時間都能滿足SLA的需求。這種類型的監控一般都需要對應用進行instrument操作,讓instrumentation是可配置的,通過收集器(collector)收集應用的狀態,並階段性地將這些狀態發送到永久存儲、分析器和預警系統中。此類監控往往會產生大量的數據,因此有可能會影響到性能,因此需要仔細設計。

微服務監控的工具方面,存儲引擎可以選擇GraphiteDB或InfluxDB,可視化工具可以選擇Kibana或Grafana。

微服務監控的指標包括:

請求所需的最大時間
請求所需的平均時間
每分鐘請求的平均速度
每天峯值的請求速度

Multitenant Log Monitoring:MLM
多租戶日誌監控

對於多租戶部署的系統來講,很大的一個挑戰就是監控日誌並推斷系統的內部情況,或者當出現問題時識別出根本的原因。無數的客戶端會產生大量的日誌,因此對於日誌隔離來說,有唯一的標識(如tenantId)是第一步。除此之外,日誌還需要根據請求分組,如果請求要跨多個服務時,這一點尤爲重要,每個服務都產生一些日誌信息將會有助於識別問題。

多租戶日誌監控中有非常經典的工具,也就是ELK(Elasticsearch、Logstash、Kibana)技術棧。

多租戶日誌監控的指標包括:

每個租戶的日誌
每個請求的日誌
每天總的錯誤數量

總而言之,好的監控要涉及到系統各個方面,從硬件、應用再到服務。如果需要構建多租戶應用的話,使用配置恰當的ELK技術棧也有助於快速診斷問題。

此外,隨着雲服務和移動應用的發展,在國內外APM(Application Performance Management)相關的服務得到了空前的關注。

關於作者
張衛濱:
山東出生,天津求學,大連謀生,程序員一枚。熟悉Java和前端開發技術,感興趣的技術不少,真正精通的不多。業餘時間喜歡讀書看報,嚮往有一天去更多的地方旅行,見識人們的不同生活方式。微博@張衛濱1895

InfoQ陪伴技術人,

用優質的技術文章作長情的告白。

技術提升世界的活交給你們了,

高效開發運維在這裏給你們提供後勤補給。

0?wx_fmt=jpeg

長按二維碼識別關注,領取優質文章補給~