做者 | 夏莞 阿里巴巴函數計算團隊 本文整理自《Serverless 技術公開課》node
導讀:本文主要分爲三個部分:概述中介紹可觀測性的基本概念,主要包括 Logging、Metrics、Tracing 三個方面;而後詳細介紹函數計算上的 Logging、Metrics、Tracing;最後以幾個常見場景爲例,介紹在函數計算中如何快速定位問題並解決問題。python
概述
可觀測性是什麼呢?維基百科中這樣說:可觀測性是經過外部表現判斷系統內部狀態的衡量方式。golang
在應用開發中,可觀測性幫助咱們判斷系統內部的健康情況。在系統出現問題時,幫助咱們定位問題、排查問題、分析問題;在系統平穩運行時,幫助咱們評估風險,預測可能出現的問題。評估風險相似於天氣預報,預測到明天下雨,那出門就要帶傘。在函數計算的應用開發中,若是觀察到函數的併發度持續升高,極可能是業務推廣團隊的努力工做致使業務規模迅速擴張,爲了不達到併發度限制觸發流控,開發者就須要提早提高併發度。數據庫
可觀測性包括三個方面:Logging、Metrics、Tracing服務器
- Logging 是日誌,日誌記錄了函數運行中的關鍵信息,這些信息是離散且具體的,結合錯誤日誌與函數代碼能夠迅速定位問題。
- Metrics 是指標,是聚合的數據,一般以圖表的形式展示。圖表中的 tps、錯誤率等核心指標,能夠反映函數的運行狀況與健康情況。
- Tracing 是鏈路追蹤,是請求級別的追蹤,在分佈式系統中能夠看到請求在各個模塊的延時、分析性能瓶頸。
函數計算中的 Logging/Metrics/Tracing
1. 日誌
在函數計算中如何查看函很多天志呢?在傳統服務器開發方式中,能夠將日誌記錄到磁盤中的某個文件中,再經過日誌收集工具收集文件的內容;而在函數計算中,開發者不須要維護服務器了,那如何收集代碼裏打印的日誌呢?併發
1)配置日誌less
函數計算與日誌服務無縫集成,能夠將函很多天志記錄到開發者提供的日誌倉庫(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_18996
2. 指標
查看指標的方式:
- **函數詳情查看監控指標:**FC 提供豐富的系統指標,這些指標能夠不用任何配置,就能夠在函數計算控制檯查看。
- **配置日誌大盤:**日誌大盤不只能夠看到函數計算提供的監控指標,並且能夠與開發者日誌關聯,生成自定義的監控指標。
3. 鏈路追蹤
(請求在各個鏈路的延時瀑布圖)
鏈路追蹤是分佈式系統排查問題的重要一環,鏈路追蹤能夠分析分佈式系統中請求在各個鏈路的時延。有如下幾種狀況:
- 函數計算做爲整個鏈路中的一環,能夠看到請求在函數計算上的時延,時延包括系統啓動的時間和請求真正的執行時間,幫助用戶分析性能瓶頸。
- 函數計算中調用 FC SDK,能夠默認看到 SDK API 的調用時延。
- 開發者在函數代碼中訪問數據庫等產品,能夠手動在函數中埋點分析這段時延。
問題排查
函數計算提供了不少可觀測性相關的功能,那究竟怎樣定位問題呢?以幾個場景爲例。
場景一:新版本發佈後,函數錯誤率升高
首先發布版本後要觀察函數各項指標,一旦錯誤率升高要當即回滾避免故障,查看函很多天志定位錯誤緣由,修復問題再次上線。
場景二:函數性能差,老是執行時間很長,甚至超時
開啓 tracing 功能,在函數內部可能耗時的地方進行埋點,查看請求的瀑布圖,定位執行時間長的緣由,修復問題。
場景三:業務量迅速擴張,併發度即將到達併發度限制
經過 metrics 查看當前併發度,觀察到併發度持續上升時,及時聯繫函數計算開發同窗,提高併發度。
Serverless 公衆號,發佈 Serverless 技術最新資訊,聚集 Serverless 技術最全內容,關注 Serverless 趨勢,更關注你落地實踐中的遇到的困惑和問題。