請求層級指標協助您更好地洞察每一次函數調用,掌握函數執行情況。您可以基於請求指標快速發現並定位問題,分析應用瓶頸。開啟請求層級指標,您將能夠更好地管理和最佳化您的函數應用。
什麼是請求層級指標
請求層級指標是函數請求層級的執行狀態匯總。開啟請求層級指標後,系統會收集合函式每次執行的指標資訊,包括效能指標、異常指標及追蹤指標,並將這些指標資訊投遞到您在日誌配置時選擇的日誌倉庫中。
效能指標:記憶體使用量情況、函數執行時間、初始化時間及冷啟動資訊等。
異常指標:是否執行失敗、錯誤詳情等。
追蹤指標:系統關鍵鏈路執行耗時、整合的鏈路追蹤是否採樣以及HTTP函數的Path、狀態代碼和用戶端IP等。
開啟請求層級指標後,Function Compute會將每次請求的執行指標投遞到您的日誌庫中,具體形式如下。
使用情境
基於請求指標查看函數執行詳情、效能指標及錯誤資訊等。
控制台基於請求層級指標提供請求列表,您可以通過該介面查看每個請求的詳細資料,包含請求執行情況、請求對應的執行個體ID、執行耗時、佔用記憶體和請求日誌等資訊。如下圖所示。
說明不開啟請求層級指標也可以查看請求列表,但是請求列表在以下情境可能不準確。
多個相同RequestId反覆出現時,無法定位指定請求的日誌,多見於非同步呼叫的重試情境。
Custom Runtime與Custom Container運行時中如果列印了
FC Invoke Start RequestId: xxx
與FC Invoke End RequestId: xxx
,會出現一次調用在請求列表中出現兩次的情況。
基於請求指標進行自訂搜尋,建立自訂大盤。
請求指標以
key:val
的形式投遞到您的日誌庫中,您可以基於業務訴求建立自訂儀錶盤。具體操作,請參見建立儀錶盤。
注意事項
生效範圍
請求層級指標日誌是服務的配置項,開啟後對服務下的所有函數生效,每個函數的每次執行都會記錄一條日誌。
費用
日誌投遞到Log Service中,會產生一定的日誌儲存費用。關於Log Service定價,請參見產品定價。
開啟請求層級指標
通過控制台開啟請求層級指標
前提條件
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務操作列的配置。
在編輯服務頁面的日誌配置地區,按需設定以下配置項,然後單擊儲存。
主要配置項說明如下,其餘配置項保持預設值即可。
配置項
說明
樣本值
日誌功能
是否支援將函數調用執行的日誌儲存至Log ServiceSLS。關於日誌功能的詳細資料,請參見配置日誌。
啟用
記錄項目
選擇已配置的記錄項目。
aliyun-fc-hangzhou-2238f0df-a742-524f-9f90-976ba*******
日誌庫
選擇已配置的日誌庫。
function-log
請求層級指標
是否查看請求層級指標。啟用後,函數每次調用執行的指標資訊將被收集,並被投遞到您在日誌配置時選擇的Logstore。
啟用
通過ServerlessDevs工具開啟請求層級指標
前提條件
操作步驟
建立代碼目錄,目錄結構如下所示。
. ├── code │ └── index.js └── s.yaml
s.yaml檔案樣本如下。
樣本中欄位enableRequestMetrics用於配置請求層級指標功能,開啟請求層級指標前需先開啟日誌功能,並設定logstore和project為您帳號下已存在的記錄項目和日誌庫。
edition: 1.0.0 name: hello-world-app access: "default" vars: region: "cn-hangzhou" service: name: "hello-world-service" description: 'hello world by serverless devs' logConfig: # logstore和project需按照實際修改,您也可以使用logConfig:auto,自動建立project和logstore project: 'your-project' logstore: 'your-logstore' enableRequestMetrics: true # 請求層級指標開關,開啟後系統會收集合函式每次執行的指標資訊 enableInstanceMetrics: true role: 'acs:ram::<accountID>:role/aliyunfcdefaultrole' # 請將<accountID>替換為您的阿里雲帳號ID services: helloworld: component: fc props: region: ${vars.region} service: ${vars.service} function: name: "hello-world" description: 'hello world by serverless devs' runtime: nodejs14 codeUri: ./code handler: index.handler memorySize: 128 timeout: 60
執行以下命令部署應用。
sudo s deploy -y
執行成功後,您可以登入Function Compute控制台查看已部署函數所屬服務的請求層級指標功能已經啟用。
日誌查詢
日誌格式
請求層級指標日誌主題遵循以下格式:FCRequestMetrics:serviceName/functionName
。您可以在Log Service中通過查詢條件 __topic__: "FCRequestMetrics:serviceName/functionName"
篩選出所有請求層級指標日誌。更多資訊,請參見查詢和分析日誌。
指標欄位
請求層級指標會記錄以下資訊。
指標名稱 | 描述 | 樣本值 | 是否每次調用都會記錄 |
serviceName | 服務名稱。 | my-service | 是 |
functionName | 函數名稱。 | my-function | 是 |
versionId | 版本名稱。 | 12 | 是 |
qualifier | 服務別名。預設為LATEST。 | prod | 是 |
requestId | 請求ID。 | db72ce53-ccbe-4216-af55-642622e01494 | 是 |
operation | 操作名稱。 | InvokeFunction | 是 |
invocationType | 調用類型,包含以下兩種。 Sync:同步調用 Async:非同步呼叫 | Sync | 是 |
memoryMB | 函數的記憶體上限。 | 512 | 是 |
memoryUsageMB | 函數執行消耗的記憶體。 | 410 | 是 |
durationMs | 請求執行時間。 | 20.20 | 是 |
isColdStart | 是否為冷啟動。 說明 當請求抵達Function Compute時,Function Compute系統沒有已經啟動的函數執行個體執行請求,需要重新建立執行個體、下載代碼、啟動執行環境。 請求生命週期內經歷了完整的建立執行個體、下載代碼、啟動執行環境過程的請求我們稱之為冷啟動請求。 Function Compute平台對冷啟動做了很多最佳化,為避免冷啟動,平台會提前建立執行個體,請求抵達Function Compute平台後建立執行個體過程中,可能會等到一個已經建立好的執行個體,這種請求我們不稱之為冷啟動請求。 | false | 是 |
instanceEvent | 執行個體事件。目前只有ColdStart,在冷啟動請求時記錄。 | ColdStart | 否 |
hasFunctionError | 函數執行是否出現函數錯誤。 | false | 是 |
errorType | 函數錯誤類型,包含以下三種:
| FunctionUnhandledError | 否。僅在函數執行出現錯誤即 |
invokeFunctionLatencyMs | 函數執行時間。 | 99.00 | 是。每次都會記錄。 |
traceContext | 鏈路追蹤上下文資訊。 | 371d3ff242fcee9:371d3ff242fcee9:0:1 | 否。僅當配置鏈路追蹤時記錄。 |
isSampled | 請求是否被鏈路追蹤採樣。 | true | 否。僅當配置鏈路追蹤時記錄。 |
resourceMode | 執行請求的執行個體類型。取值如下:
| OnDemand | 是 |
instanceID | 執行個體ID。 | c-65603d8c-37e1bf7123054a77**** | 是 |
hostname | 執行個體Host。 | c-65603d8c-37e1bf7123054a77**** | 是 |
ipAddress | 執行個體IP地址。 說明:此IP為執行個體內部IP,用於區分不同執行個體,不是執行個體公網IP地址。 | 21.0.XX.XX | 是 |
activeInstances | 活躍執行個體數。 | 1 | 是 |
activeInstancesPerFunction | 當前函數活躍執行個體數。 | 1 | 是 |
scheduleLatencyMs | 調度耗時。請求冷啟動時,調度延時相對比較長。 | 10.07 | 是 |
coldStartStartTimestamp | 冷啟動開始時間戳。 | 1700806029167 | 否。僅當發生冷啟動時有記錄。 |
coldStartLatencyMs | 冷啟動耗時。 | 487.65 | 否。僅當發生冷啟動時有記錄。 |
prepareCodeStartTimestamp | 下載代碼開始時間戳。13位時間戳記,精確到毫秒。 | 1700806029167 | 否。僅當發生冷啟動時有記錄。 |
prepareCodeLatencyMs | 下載代碼耗時。 | 0.18 | 否。僅當發生冷啟動時有記錄。 |
runtimeInitializationStartTimestamp | 運行時初始化開始時間戳。 | 1700806029168 | 否。僅當發生冷啟動時有記錄。 |
runtimeInitializationMs | 運行時初始化耗時。 | 487.37 | 否。僅當發生冷啟動時有記錄。 |
asyncAttemptStartTimestamp | 非同步呼叫函數執行失敗預設重試3次 此參數為第${retryCount}次重試的開始時間戳。 | 1700806028084 | 否。僅當非同步呼叫時有記錄。 |
asyncAttemptLatencyMs | 非同步呼叫函數執行失敗預設重試3次 此參數為第${retryCount}次重試的開始時間戳。 | 1688.74 | 否。僅當非同步呼叫時有記錄。 |
asyncMode | 非同步呼叫模式。取值說明如下:
| Stateful | 否。僅當非同步呼叫時有記錄。 |
retryCount | 重試次數。 | 0 | 否。僅當非同步呼叫時有記錄。 |
檢索日誌
檢索日誌需要配上索引,Function Compute控制台會自動幫您配置索引。配置索引後,您可以在Log Service控制台對應的日誌庫中使用SQL語句來進行請求檢索和要求篩選。您可以通過指定topic來限制尋找範圍為請求層級指標日誌。
例如,您需要查詢執行時間超過10s的請求列表,可以使用以下SQL語句。
__topic__: "FCRequestMetrics:s1/f1" AND qualifier: q1 and operation: InvokeFunction and durationMs>1000
更多複雜的查詢文法,請參見查詢和分析日誌。
製作自訂大盤
如果您想製作橫座標為t,縱座標為指標值的表徵圖,可以參考以下SQL語句。
__topic__: "FCRequestMetrics:s1/f1" AND qualifier: q1 and operation: InvokeFunction | select __time__ - __time__ % 60 as t, count(*) as invocations, avg(durationMs) as avgDurationMs group by t order by t
更多建立自訂儀錶盤的資訊,請參見建立儀錶盤。