
作者 | 夏莞 阿裡巴巴函數計算團隊
本文整理自
《Serverless 技術公開課》,關注“Serverless”公衆号,回複“入門”,即可擷取 Serverless 系列文章 PPT。
導讀:本文主要分為三個部分:概述中介紹可觀測性的基本概念,主要包括 Logging、Metrics、Tracing 三個方面;然後詳細介紹函數計算上的 Logging、Metrics、Tracing;最後以幾個常見場景為例,介紹在函數計算中如何快速定位問題并解決問題。
概述
可觀測性是什麼呢?維基百科中這樣說:可觀測性是通過外部表現判斷系統内部狀态的衡量方式。
在應用開發中,可觀測性幫助我們判斷系統内部的健康狀況。在系統出現問題時,幫助我們定位問題、排查問題、分析問題;在系統平穩運作時,幫助我們評估風險,預測可能出現的問題。評估風險類似于天氣預報,預測到明天下雨,那出門就要帶傘。在函數計算的應用開發中,如果觀察到函數的并發度持續升高,很可能是業務推廣團隊的努力工作導緻業務規模迅速擴張,為了避免達到并發度限制觸發流控,開發者就需要提前提升并發度。
可觀測性包括三個方面:Logging、Metrics、Tracing
- Logging 是日志,日志記錄了函數運作中的關鍵資訊,這些資訊是離散且具體的,結合錯誤日志與函數代碼可以迅速定位問題。
- Metrics 是名額,是聚合的資料,通常以圖表的形式展現。圖表中的 tps、錯誤率等核心名額,可以反映函數的運作情況與健康狀況。
- Tracing 是鍊路追蹤,是請求級别的追蹤,在分布式系統中可以看到請求在各個子產品的延時、分析性能瓶頸。
函數計算中的 Logging/Metrics/Tracing
1. 日志
在函數計算中如何檢視函數日志呢?在傳統伺服器開發方式中,可以将日志記錄到磁盤中的某個檔案中,再通過日志收集工具收集檔案的内容;而在函數計算中,開發者不需要維護伺服器了,那如何收集代碼裡列印的日志呢?
1)配置日志
函數計算與日志服務無縫內建,可以将函數日志記錄到開發者提供的日志倉庫(Logstore)中。日志是服務配置中的一項,為服務配置 LogProject 和 Logstore,同一服務下所有函數通過 stdout 列印的日志,都會收集到對應的 Logstore 中。
2)記錄日志
那日志怎麼打呢?在代碼中直接通過 console.log/print 列印的日志可以收集到嗎?答案是可以的。各個開發語言提供的列印日志的庫都将日志列印到 stdout,比如 node.js 的 console.log()、python 的 print()、golang 的 fmt.Println() 等。函數計算收集所有列印到 stdout 的日志并将其上傳到 Logstore 中。
函數計算的調用是請求次元的,每次調用對應一個請求,也就對應一個 requestID。當請求量很大時,會有海量日志,如何區分哪些日志屬于哪個請求呢?這就需要把 requestID 一起記錄到日志中。函數計算提供内置的日志語句,列印的每條日志前都會帶上請求 ID,友善日志的篩選。
3)檢視日志
當函數日志被收集到日志服務的 Logstore 中,可以登入日志服務控制台檢視日志。
同時,函數計算控制台也內建了日志服務,可以在函數計算控制台上檢視日志。函數計算控制台有兩種查詢方式:
- 簡單查詢:簡單查詢中列出每個 requestID 對應的日志,可以通過 requestID 對日志進行篩選;
- 進階查詢:進階查詢嵌入了日志服務,可以通過 SQL 語句進行查詢。
點選連結觀看 Demo 示範:
https://developer.aliyun.com/lesson_2024_189962. 名額
檢視名額的方式:
- 函數詳情檢視監控名額:FC 提供豐富的系統名額,這些名額可以不用任何配置,就可以在函數計算控制台檢視。
- 配置日志大盤:日志大盤不僅可以看到函數計算提供的監控名額,而且可以與開發者日志關聯,生成自定義的監控名額。
3. 鍊路追蹤
(請求在各個鍊路的延時瀑布圖)
鍊路追蹤是分布式系統排查問題的重要一環,鍊路追蹤可以分析分布式系統中請求在各個鍊路的時延。有以下幾種情況:
- 函數計算作為整個鍊路中的一環,可以看到請求在函數計算上的時延,時延包括系統啟動的時間和請求真正的執行時間,幫助使用者分析性能瓶頸。
- 函數計算中調用 FC SDK,可以預設看到 SDK API 的調用時延。
- 開發者在函數代碼中通路資料庫等産品,可以手動在函數中埋點分析這段時延。
問題排查
函數計算提供了很多可觀測性相關的功能,那究竟怎樣定位問題呢?以幾個場景為例。
場景一:新版本釋出後,函數錯誤率升高
首先釋出版本後要觀察函數各項名額,一旦錯誤率升高要立即復原避免故障,檢視函數日志定位錯誤原因,修複問題再次上線。
場景二:函數性能差,總是執行時間很長,甚至逾時
開啟 tracing 功能,在函數内部可能耗時的地方進行埋點,檢視請求的瀑布圖,定位執行時間長的原因,修複問題。
場景三:業務量迅速擴張,并發度即将到達并發度限制
通過 metrics 檢視目前并發度,觀察到并發度持續上升時,及時聯系函數計算開發同學,提升并發度。
課程推薦
為了更多開發者能夠享受到 Serverless 帶來的紅利,這一次,我們集結了 10+ 位阿裡巴巴 Serverless 領域技術專家,打造出最适合開發者入門的 Serverless 公開課,讓你即學即用,輕松擁抱雲計算的新範式——Serverless。
點選即可免費觀看課程:https://developer.aliyun.com/learning/roadmap/serverlessServerless 公衆号 ,釋出 Serverless 技術最新資訊,彙集 Serverless 技術最全内容,關注 Serverless 趨勢,更關注你落地實踐中的遇到的困惑和問題。