Categories
程式開發

揭開監控的神秘面紗


本文作者以文章摘要介紹的方式,向大家分享了一些監控領域質量不錯的文章。這些文章涵蓋了監控的日誌記錄、數據追踪以及指標監控方面,非常值得大家學習。

在過去的幾年中,可觀察性概念在DevOps和監控領域異常火熱。你可能對數據可觀察性操作比較熟悉,比如日誌記錄、事件跟踪和指標監控展示等。但是,你知道應該如何做好這三件事嗎?

下面是一些與監控相關的在線資源的列表,可指導你與日誌記錄、事件跟踪和指標監控相關的工作。如果你有在擁有這些資源的團隊工作過的經歷,那麼一定會迸發出一些關於如何應對監控挑戰的想法。

日誌記錄,事件追踪及指標監控簡介

日誌記錄,事件追踪以及指標監控

如果你想快速了解白盒監控/可觀察性的三個核心方面,那麼Phil Winder博士的文章可能會幫到你。他對每個方面進行了詳細闡述,同時就其優缺點表達了自己的看法。檢測和監控也被很多人稱之為“指標監控”。

雲原生時代下的監控

想要全面地了解當前可觀測性和監控在業界發展的情況,需要好好閱讀一下辛迪·斯里達蘭(Cindy Sridharan)的內容。本文介紹了可觀察性的概念,定義了現代可觀察性的三個核心概念——日誌記錄,請求跟踪和指標收集——並描述了它們的使用場景。 Sridharan在自己的一篇博文中進行了”日誌和指標“的討論,這也是一篇質量很高的文章,文章短小精悍,信息量很大,推薦大家閱讀。她還針對該主題編寫了免費的電子書,書名為《分佈式系統可觀測性》

揭開監控的神秘面紗 1

黑盒監控vs. 白盒監控

指標監控已死?

在參加Monitorama會議之後,保羅·迪克斯就現代指標監控的相關性(他稱之為“常規時間序列”)分享了一些實用的意見和建議。這篇文章從多個角度,分別介紹了監控的三個核心方面。結論是,雖然事件追踪對於微服務更有用,但在更常見的單體架構中,指標、事件和日誌才是最重要的。

日誌記錄

程序員日誌管理應用指南

如果你是一個新手開發人員,那麼FreeCodeCamp是一個不錯的增長自己技能的學習平台。任何執行操作和調試代碼的程序員都應該知道日誌處理的工作原理,這篇文章對於尚不了解如何輸出日誌的人來說,是一個不錯的起點。作者斯特凡諾斯·瓦爾達洛斯(Stefanos Vardalos)從日誌記錄的診斷和審計兩方面進行了闡述,同時還分享了分別適用於前端和後端開發的日誌記錄工具,如果你對日誌記錄不是那麼了解,可以前去學習一下。

日誌管理終極指南

該資源不僅僅是一篇文章,而是一個完整的教程網站。它是由日誌管理供應商Loggly創建的,但是內容與供應商無關,而且全權由社區維護。網站內容分為九個部分:.NET、Apache、Java、Linux、Node.js、PHP、Python、Systemd和Windows。每個部分都提供了關於如何進行日誌分析和解析、如何定位和處理常見問題以及如何在分佈式系統中集中或聚合日誌的基礎知識,並附有相應的使用指南。

不間斷的日誌記錄-可操作性的基礎

馬修·斯凱爾頓在這次演講視頻中分享了自己關於現代日誌管理的獨特見解。他提到,日誌記錄管理的關鍵是使用正確的事務標識符,以便可以跨組件,服務和隊列進行跟踪調用。他還有另一篇不錯的文章,題目為《為什麼以及如何進行日誌測試》,推薦大家閱讀一下。

關於日誌,很多觀點有一定的時代局限性

Honeycomb.io博客是查找日誌管理內容的理想地。它發布的很多博文都在討論日誌記錄相關的話題,儘管Honeycomb.io是產品供應商,但許多發布的文章與供應商無關。

Honeycomb.io的聯合創始人慈善專業撰寫了一篇文章,題為《Lies My Parents Told Me》(父母講給我的那些謊言,喻指老舊錯誤的觀點),其中探討了11種關於日誌記錄的錯誤示範。

Honeycomb.io社區關於日誌的其他不錯的文章還有《你可以考慮使用結構化日誌記錄工具》”,文章中用30行代碼對可測試結構化日誌進行了解釋和展示;《使用NLog實現簡單結構化日誌記錄》這篇文章介紹了使用.NET實現的一個日誌記錄庫NLog的用法示例;以及《從過去的單機服務到現在的分佈式微服務》,該文章介紹了Snyk如何構建日誌記錄系統,以使團隊中的所有開發人員在遠程工作時可以高效的定位和解決問題。

日誌記錄及其實時流處理

本文引用自傑伊·克雷普斯(Jay Kreps)撰寫的《日誌之我見:事件數據,流處理和數據集成的一部分。這本書收到眾多資深開發者以及博客作者本·納德爾好評。本文也是Kreps早期的一篇詳細介紹日誌處理的文章《軟件工程師都應該知道的關於實時數據處理的統一抽象》的一部分。這些文章都從日誌的處理和存儲在日誌管理中的面臨的挑戰這一角度進行了討論,並提供了關於流數據處理概念的深入知識。

“事實證明,流是日誌數據傳遞的體現,而日誌是流處理的核心。”
傑伊·克雷普斯(Jay Kreps)

引入網絡錯誤記錄

道格拉斯·克萊格(Douglas Creager)在這篇文章中對基本網絡監控理論進行了簡要介紹。他介紹了一種經典的技術策略,其中涉及到服務器和客戶端請求日誌的收集,以幫助你了解網絡黑盒中發生的事情。

日誌與監控

彼得·布爾貢對於哪些日誌需要記錄以及應該監測什麼指標提出了一些簡明而又準確的建議。該文章可以幫助你掌控業務潛在的風險的同時,正確看待日誌記錄和監控指標採集之間的關係。比如你可以了解到,什麼樣的指標監控是有意義的,什麼時候開始檢測你的代碼,日誌中應該記錄什麼樣的內容,日誌級別應該怎麼定義,以及應該將日誌存儲在什麼位置。

Python日誌模塊使用指南

對於應用程序級日誌記錄,在開始尋找外部庫之前,你應該首先查看下所用的編程語言及框架的相關文檔,了解它們具有哪些內置日誌記錄功能。在日誌記錄方面,某些語言比其他語言更易於使用。我不止一次聽到開發人員稱Java日誌記錄功能“一團糟”。因此,我分享了這篇基於Python日誌記錄的介紹,因為Python被廣泛認為是一種優秀的面向初學者的編程語言。在本教程中,馬里奧·科切羅(Mario Corchero)剖析了Python日誌記錄模塊,並向你展示瞭如何使用、配置以及擴展它。

構建中央日誌採集服務

就職於BrowserStack的工程師阿基爾·拉布杜巴里基(Akhil Labudubariki)分享了他所在的公司是如何在內部構建中央日誌記錄服務的案例。該日誌記錄服務會追踪關鍵產品的運行指標以及幾個關鍵服務的健康指標,包括API響應延遲、網絡性能等。

構建集中式日誌採集程序

維克什·蒂瓦里(Vikesh Tiwari)維護了一個有趣的開源軟件,它可用於構建集中式日誌採集應用程序。他在文章中詳細介紹了我們通常需要考慮的日誌收集,傳輸,存儲,分析和警報功能。 (截止今日我發布該文章,他尚未更新這一系列的第二部分😂。)

揭開監控的神秘面紗 2

集中式日誌採集應用的數據流示意圖

《經濟學人》的日誌採集及其監控系統

《經濟學人》之前已經從單體架構過渡到微服務架構,但當時日誌採集以及監控系統暫時無法與微服務架構匹配。在這篇文章中,該雜誌公司的首席工程師凱瑟琳·喬納斯(Kathryn Jonas)分享了她的團隊構建標準化結構日誌採集監控系統過程中的精彩故事。

OWASP日誌採集安全防禦檢查表

OWASP即Open Web Application Security Project,開放式Web應用安全項目的簡稱。

安全操作上下文的日誌採集是一個非常大的主題,需要涉及到其他一些文章。在構建這樣的日誌採集系統架構時,請確保你的團隊中包括安全專家或信息安全擁護者。日誌採集對於檢測攻擊和系統入侵至關重要。結合OWASP日誌記錄安全防禦清單以及其他安全操作資料,可以幫助你更好的學習安全相關的日誌採集工作。

日誌記錄造成安全事件;我們從GitHub和Twitter的經歷中學到了什麼?

最近,Twitter和GitHub在其應用程序或服務日誌中意外地記錄了用戶的敏感信息(包括密碼)。你如何確保你的日誌記錄也不會造成安全隱患?可以閱讀Scott Helme的文章,它介紹了Report UI填補系統安全漏洞的方法。

“日誌記錄功能非常好用,它可以記錄很多關鍵信息,但選擇記錄哪些信息,需要謹慎考慮。”
斯科特·赫爾姆

微服務設計:日誌採集與監控

來自Azure的這篇文章提出了幾點關於微服務體系架構日誌採集和監控相關的實用建議。它整理和提供了你在構建日誌記錄基礎結構時可能會詢問到的重要問題列表,並且包括了服務之間分佈式追踪和監控的建議。最後還提供了一些技術實現方案的策略概述。

容器時代下的分佈式日誌架構

本文概述了在分佈式系統和容器化微服務架構中日誌記錄的新要求。除了闡述了容器時代下新的挑戰和要求,還介紹了日誌聚合模式以及日誌記錄架構的彈性擴縮容模式。

揭開監控的神秘面紗 3

源日誌聚合與目標日誌聚合

使用Docker logs高效地調試應用

Ryan Davidson的這篇文章簡明扼要地列出了一些Docker日誌處理技巧,這些技巧向你展示瞭如何有效地從Docker容器中獲取日誌數據。它們教你如何顯示所有日誌、如何定位和跟踪特定容器、如何使用tail和grep處理和搜索日誌,以及如何使用組合命令將日誌寫入文件。

在Kubernetes中設置日誌選項

Arve Knudsen分享了他在AWS部署的Kubernetes中創建日誌管理系統的方法。該日誌管理系統使用彈性搜索作為搜索引擎,使用基巴納作為圖形界面,並使用流利的進行日誌收集。本文包含了很多代碼示例。更多相關的介紹,可以查看Kubernetes的使用文檔

Yubl的Serverless遷移之路

Yan Cui的所在的Yubl(一款做社交軟件的公司),在AWS Lambda上運行了Serverless應用程序。這篇文章介紹了該公司使用ELK日誌收集、ID關聯追踪以及使用CloudWatch指標監控的成功案例,非常有指導意義,推薦大家閱讀。

事件追踪

Linux中用戶及內核空間中的動態跟踪

數據追踪是監控的另一個主要組成部分,並在微服務架構中變得越來越重要。前面講到的日誌記錄部分涵蓋了部分數據跟踪的內容,通常建議使用有關聯的ID來追踪微服務架構中不同部分相關聯的事務。

除了該策略以外,你可能還希望對操作系統級別的追踪有一定的深入了解。Pratyush阿南德的這篇關於Linux動態跟踪的文章面向普通用戶展開了介紹,文章開始先介紹了一些定義統一大家共識,最後給出了一個設置探測點的簡單示例作為結束。

選擇一個Linux跟踪工具

Linux跟踪方面,布倫丹·格雷格(Brendan Gregg)是Netflix的性能架構師,也是DTrace工具包的創建者,如果感興趣,趕緊訂閱他的博客。不管你是一般的運營工程師還是性能/內核工程師,這篇文章可以幫助你選擇適合你應用場景的追踪工具(這樣的工具實在是太多啦!)。有關如何使用Linux跟踪器的精彩介紹,請觀看Gregg關於Linux性能追踪的15分鐘演示。對了,一定要記得查看Gregg的其他教程,他們同樣非常受歡迎。

Linux追踪工具

朱莉婭·埃文斯(Julia Evans)經常分享Linux性能追踪以及其他相關主題的文章,這些文章是非常好的學習資源,對於初學者非常友好,因為她站在一個初學Linux性能追踪人員的角度進行講解。這篇文章首先快速概述了幾種常用工具,提供了非常漂亮的圖示圖表,十分便於我們進行理解,讓我們更容易上手Linux追踪工具的軟件生態。

Windows系統下的軟件跟踪工具

如果你所在的公司或者組織使用Windows服務器,那麼需要一套完全不同的系統追踪教程。這篇文章是微軟硬件研發中心網站的一個文檔,它包含了12個鏈接,每一鏈接的指向資源介紹了Windows系統下的追踪細節。

如何在分佈式系統實現事務追踪

這篇文章概述了現代應用程序性能管理(APM)系統的功能點,這些功能可以讓你在整個分佈式系統上跟踪事務。文章解釋瞭如何重建事務,如何在網絡上對其進行跟踪,以及如何使用日誌數據來獲得系統的完整視圖。史瓦茲男爵分享過一篇不錯的文章,可以作為該文章的後續《如果無法實現端到端追踪怎麼辦? 》

OpenTracing:新興的開放式分佈式追踪行業標準

與上一篇推廣APM工具的文章相反,這篇文章介紹了OpenTracing的標準,該標準與供應商無關,包括一系列API以及用於分佈式跟踪的使用指南。作者內迪姆·薩比奇(Nedim Sabic)解釋了為什麼選擇OpencTracing:

“一般而言,APM供應商擁有自己專有的跟踪代理工具和SDK,它們可以自動地(黑盒檢測)或者讓用戶修改被監控的應用程序源代碼(白盒檢測)來監控應用程序。很明顯,這存在一些問題,比如用戶容易被供應商捆綁限制,以及後續隨著系統維護、技術迭代更新,對供應商的依賴會越來越高,後續的成本也會越來越大,難以掌控。”

Šabić寫的這篇文章介紹了OpenTracing的技術細節,還寫了另外三篇文章來介紹和比較齊普金積家,這是兩個實現OpenTracing標準的開源工具。

前端性能分析工具之Chrome開發者工具

提起前端追踪,我們必須要使用瀏覽器工具。 Google在介紹如何使用Chrome開發者工具來追踪網頁性能的問題上擁有非常出色的文檔。卡特里娜(Katrina Basques)提供了可視化的分析及實戰,並向你展示瞭如何讀取和理解網站性能圖。

日誌記錄!= 日誌追踪

儘管這是一篇較老的文章,但中間部分提供了一些有關日誌記錄與追踪的有用建議。它說明了在系統體系架構中應該根據需求的目標來分別對待每一個需求,做到具體問題要具體分析。

指標監控

指標,監控以及告警簡介

在這篇文章中,賈斯汀·艾林伍德定義了指標,監控和告警的概念,同時還闡明了他們的作用。他還討論了不同類型的監控指標,以及影響你選擇的監控指標的因素。文章以一系列監控術語的詞彙解釋結尾。

如何監控SRE黃金數據

使用Brendan Gregg的USE方法、Tom Wilkie的RED方法以及Google SRE書中介紹的方法,史蒂夫·穆塞羅(Steve Mushero)總結了我們應監控的“黃金信號”列表。首先,作者介紹了應該監控的五個黃金信號,然後解釋了我們應該如何監控它們,文章末尾,作者列出瞭如何從負載均衡器Web服務器應用程序服務器,數據庫服務器(包括MySQL / RDS極光)以及Linux服務器中獲取監控數據的相關鏈接。

雲服務行業的10個最關鍵監控指標

這篇文章比較廣泛地探討了雲應用程序的關鍵監控指標,包括諸如安全性和存儲容量等相關監控指標。文中對每個監控指標給出一個具體的定義,並解釋其重要性的成因,而且以圖形說明。這10個指標是可用性、可靠性(故障之間的平均時間和平均修復時間)、響應時間、吞吐量、安全性、容量、可伸縮性、延遲、服務/技術平台以及單位客戶的成本。

應用監控指南

Medium Capital One Tech社區彼得·克里斯汀·弗雷德里希撰寫了自己團隊最關注的監控指標:每分鐘請求次數、錯誤率、響應時間和網絡利用率。在介紹了這四個監控參數以及對它們的整體評價之後,他繼續發表了另外兩篇有關監控告警展示以及故障響應及事故追踪的文章。

“工程師半夜被叫醒處理CPU或內存Nagios警報的日子已經一去不復返了。收集所有信息,對四個參數進行監控告警,並將所有信息關聯起來,可以採用這種方式,因為如果真的在我們的某個應用程序主機上存在問題,這個問題會引起我們的四個關鍵指標之一出現劇烈變化。”
彼得·克里斯汀·弗雷德里希

為高性能係統構建低負載指標收集工具

收集指標不可避免具有一定的性能開銷。 Wallaroo(一個開源數據處理框架)的開發人員在嘗試減少收集工具的性能開銷時遇到了一些挑戰。這篇文章介紹了Wallaroo團隊在什麼情況下收集什麼類型的指標以及如何展示它們時所作的一些決策。

指標時序圖展示

在可觀察性方面,以易於理解的形式顯示指標非常重要。約翰·馬特森分享了由三部分內容組成的有關時序圖指標展示文章,這些文章應該能夠幫助你對可視化監控指標的展示做出更好的決策。這三篇文章分別介紹了時序圖摘要圖以及反模式製圖(錯誤示範)

GitLab是如何監控的

想要深入了解一些成功的互聯網公司是如何進行監控的,我們可以以GitLab為例,查看其官網的內部監控文檔。由於GitLab秉承開源精神,因此它們的所有內部知識庫幾乎都可以免費獲取到。本文檔可以為你提供關於監控工具選用以及流程監控的方法,但這畢竟是文檔,你必須好好瀏覽,看看是否可以藉鑑一些其他有用的監控思路。

Prometheus指標監控

Prometheus是一套流行的開源監控工具和標準,經常用於在雲原生環境中進行監視。它如此受歡迎的原因之一是它豐富的指標展示功能,Cindy Sridharan在她的《雲原生時代的監控》一文中對此大表讚賞。馬特奧·布里洛(Mateo Burillo)的文章《普羅米修斯度量》詳細地介紹了Prometheus的簡單語法,進一步闡述了它如此流行原因。

揭開監控的神秘面紗 4

Prometheus數據結構圖

在Netflix上構建可視化工具的經驗教訓

作為雲原生運動最前沿的技術領導者之一,Netflix是一家偉大的公司,就可視化方面它可以提供非常好的建議。這篇文章全面介紹了Netflix在解決日誌記錄、事件追踪和指標監控相關問題時面臨的挑戰。具體來說,團隊成員描述了他們如何擴展日誌記錄、如何構建分佈式的請求追踪、如何改進指標監控和告警、如何改進對數據存儲系統的監控,以及如何針對不場景定制不同的監控指標和UI展示。

你還需要更多的監控相關的資料嗎?

本文中提到的文章主要以概念性內容介紹為主,並有意避免對特定工具的使用進行示例講解。但是,如果你正在尋找用於日誌記錄,事件追踪以及指標監控或可視化展示等方面的工具,可以試著從GitHub上查找一些很不錯的工具,其中包括:

如果你還有其他不錯的監控工具,請踴躍在評論中留言,歡迎與大家分享。

終身學習

下面分享一些學習資源供大家閱讀。

作者介紹:

米奇·普隆申斯克,HashiCorp高級編輯兼內容營銷經理

原文鏈接:

揭開神秘面紗的監視:有關日誌記錄,跟踪和指標的指南