OneAPM大講堂 | Metrics, Tracing 和 Logging 的關係
【編者按】這是在 OpenTracing 和分散式追蹤領域內廣受歡迎的一片部落格文章。在構建監控系統時,大家往往在這幾個名詞和方式之間糾結。 通過這篇文章,作者很好的闡述了分散式追蹤、統計指標與日誌之間的區別和關係。
Peter Bourgon 原作: Metrics, tracing, and logging
譯者:吳晟
正文
今天,我很榮幸的參加了 2017 分散式追蹤峰會(2017 Distributed Tracing Summit), 並和來自 AWS/X-Ray, OpenZipkin, OpenTracing, Instana, Datadog, Librato,以及其他更多組織的同仁進行了愉快的溝通和討論。 其中一個重要的論點,是針對監控專案的範圍和定義的。作為一個分散式追蹤系統,應該管理日誌麼?從不同角度看來,到底什麼是日誌?如何通過一張圖形象的定位這些形形色色的系統?
總體說來,我覺得我們是在一些通用的名詞間糾結。我想我們可以通過圖表來定義監控的作用域,使各名詞的作用範圍更明確。 我們使用維恩圖(Venn diagram)來描述 Metrics, Tracing, Logging 三個概念的定義。他們三者在某些情況下是重疊的,但是我儘量嘗試定義他們的不同。如下圖所示:
Metrics 的特點是,它是可累加的:他們具有原子性,每個都是一個邏輯計量單元,或者一個時間段內的柱狀圖。 例如:佇列的當前深度可以被定義為一個計量單元,在寫入或讀取時被更新統計; 輸入 HTTP 請求的數量可以被定義為一個計數器,用於簡單累加; 請求的執行時間可以被定義為一個柱狀圖,在指定時間片上更新和統計彙總。
Logging 的特點是,它描述一些離散的(不連續的)事件。 例如:應用通過一個滾動的檔案輸出 Debug 或 Error 資訊,並通過日誌收集系統,儲存到 Elasticsearch 中; 審批明細資訊通過 Kafka,儲存到資料庫(BigTable)中; 又或者,特定請求的後設資料資訊,從服務請求中剝離出來,傳送給一個異常收集服務,如 NewRelic。
Tracing 的最大特點就是,它在單次請求的範圍內,處理資訊。 任何的資料、後設資料資訊都被繫結到系統中的單個事務上。 例如:一次呼叫遠端服務的 RPC 執行過程;一次實際的 SQL 查詢語句;一次 HTTP 請求的業務性 ID。
根據上述的定義,我們可以標記上圖的重疊部分。
當然,大量的被監控的應用是具有分散式能力(Cloud-native)的應用,邏輯處理在單次請求的範圍內完成。因此,討論追蹤的上下文是有意義的。 但是,我們注意到,並不是所有的監控系統都繫結在請求的生命週期上的。他們可能是邏輯元件診斷資訊、處理過程的生命週期明細資訊,這些資訊和任何離散的請求時正交關係。 所以,不是所有的 Metrics 和 Log 都可以被塞進追蹤系統的概念中,至少在不經過資料加工處理是不行的。又或者,我們可能發覺使用 Metrics 統計資料,對應用監控有很大幫助,例如 Prometheus 生態,可以量化的實時展現應用檢視;相應的,如果我們將 Metrics 統計資料強行使用針對 Log 的管道來處理,將使我們丟失很多特性。
那麼,在這裡,我們可以開始對已知的系統進行分類。如:Prometheus, 專一的 Metrics 統計系統,隨著時間推移,也許會進化為追蹤系統,進而進行請求內的指標統計,但不太可能深入到 Log 處理領域。ELK 生態提供 Log 的記錄,滾動和聚合,並在其他領域不停的積累更多的特性,並整合進來。
另外,我發現通過維恩圖的方式展現三者關係時,會正巧展現出一個附加效應。在這三個功能域中,Metrics 傾向於更節省資源,因為他會“天然的”壓縮資料。相反,日誌傾向於無限增加的,會頻繁的超出預期的容量。(有另一篇我寫的關於這方面的文章,檢視,譯者注:未翻譯)。所以,我們可以在圖上,繪製出容量的需求趨勢,Metrics 低到 Logging 高, 而 Trace 可能處於他們兩的中間位置
也許,這不是最完美的方式描述這三者的管理,但我從會議現場收到的反饋來看,這個分類還是相當不錯的:隨著三者的關係越清晰,我們越容易建設性的討論其他問題。如果你嘗試對產品的功能進行定位,你可能也需要這張圖,在討論中,澄清產品的位置。
OneAPM Li** 智慧日誌分析平臺可以實時收集資料中心基礎架構及應用的海量日誌,實時搜尋,實時分析,洞悉日誌價值。想閱讀更多技術文章,請訪問 **OneAPM 官方技術部落格。 來源:http://blog.oneapm.com/apm-tech/811.html
相關文章
- OneAPM大講堂 | Java 異常日誌記錄最佳實踐Java
- PostgreSQL技術大講堂 - Part 7:PG使用者schema相互關係SQL
- 今天講講Java中的日誌—logging、logbackJava
- 今天講講Java中的日誌---logging、logbackJava
- 大資料和人工智慧的關係大資料人工智慧
- 區塊鏈和大資料的關係區塊鏈大資料
- PostgreSQL技術大講堂 - 第31講:SQL調優技巧SQL
- jre 和 jdk的關係JDK
- @SpringBootApplication和@SpringBootConfiguration的關係Spring BootAPP
- PassEncoder和Pipeline的關係
- PostgreSQL技術大講堂 - 第34講:調優工具pgBagder部署SQL
- PostgreSQL技術大講堂 - 第46講:poc-tpch測試SQL
- PostgreSQL技術大講堂 - 第45講:poc-tpcc測試SQL
- PostgreSQL技術大講堂 - 第33講:並行查詢管理SQL並行
- ThymeleafViewResolver和SpringTemplateEngine和SpringResourceTemplateResolver的關係ViewSpring
- 大資料和人工智慧的關係是什麼?大資料人工智慧
- 程式和產品的關係
- flink jobmanager和taskmanager的關係
- 矩陣:橫向關係和縱向關係矩陣
- Python 內建logging 使用詳細講Python
- commons-logging,log4j,logback,slf4j之間的關係詳解
- 雲端計算、大資料和人工智慧的關係大資料人工智慧
- 雲端計算和大資料的區別與關係大資料
- session和cookie關係SessionCookie
- PostgreSQL技術大講堂 - 第32講:資料庫引數調整SQL資料庫
- 從Oracle DBA出發,走進GaussDB的世界 - 雲和恩墨大講堂GaussDB專題Oracle
- Python和大資料有什麼關係?Python教程Python大資料
- iOS 中 UIView 和 CALayer 的關係iOSUIView
- repo和Git的關係 [轉載]Git
- IP地址和MAC地址的關係Mac
- cmsis和各種庫的關係
- HomeAssistantOS和docker的組織關係Docker
- 談談 JDK 和 SAPMachine 的關係JDKMac
- Python和人工智慧的關係Python人工智慧
- 類圖的6大關係詳解
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- PG技術大講堂 - 第13講:PostgreSQL Full-Page Writes 全頁寫SQL
- 今天開講,6 大演講主題、5 位技術大咖!龍蜥大講堂 5 月精彩直播預告搶先看