全部產品
Search
文件中心

Function Compute:請求層級指標日誌

更新時間:Aug 29, 2024

請求層級指標協助您更好地洞察每一次函數調用,掌握函數執行情況。您可以基於請求指標快速發現並定位問題,分析應用瓶頸。開啟請求層級指標,您將能夠更好地管理和最佳化您的函數應用。

什麼是請求層級指標

請求層級指標是函數請求層級的執行狀態匯總。開啟請求層級指標後,系統會收集合函式每次執行的指標資訊,包括效能指標、異常指標及追蹤指標,並將這些指標資訊投遞到您在日誌配置時選擇的日誌倉庫中。

  • 效能指標:記憶體使用量情況、函數執行時間、初始化時間及冷啟動資訊等。

  • 異常指標:是否執行失敗、錯誤詳情等。

  • 追蹤指標:系統關鍵鏈路執行耗時、整合的鏈路追蹤是否採樣以及HTTP函數的Path、狀態代碼和用戶端IP等。

開啟請求層級指標後,Function Compute會將每次請求的執行指標投遞到您的日誌庫中,具體形式如下。

image

使用情境

  • 基於請求指標查看函數執行詳情、效能指標及錯誤資訊等。

    控制台基於請求層級指標提供請求列表,您可以通過該介面查看每個請求的詳細資料,包含請求執行情況、請求對應的執行個體ID、執行耗時、佔用記憶體和請求日誌等資訊。如下圖所示。

    image

    說明

    不開啟請求層級指標也可以查看請求列表,但是請求列表在以下情境可能不準確。

    • 多個相同RequestId反覆出現時,無法定位指定請求的日誌,多見於非同步呼叫的重試情境。

    • Custom Runtime與Custom Container運行時中如果列印了FC Invoke Start RequestId: xxxFC Invoke End RequestId: xxx,會出現一次調用在請求列表中出現兩次的情況。

  • 基於請求指標進行自訂搜尋,建立自訂大盤。

    請求指標以key:val的形式投遞到您的日誌庫中,您可以基於業務訴求建立自訂儀錶盤。具體操作,請參見建立儀錶盤

注意事項

  • 生效範圍

    請求層級指標日誌是服務的配置項,開啟後對服務下的所有函數生效,每個函數的每次執行都會記錄一條日誌。

  • 費用

    日誌投遞到Log Service中,會產生一定的日誌儲存費用。關於Log Service定價,請參見產品定價

開啟請求層級指標

通過控制台開啟請求層級指標

前提條件

操作步驟

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數
  2. 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務操作列的配置
  3. 在編輯服務頁面的日誌配置地區,按需設定以下配置項,然後單擊儲存

    主要配置項說明如下,其餘配置項保持預設值即可。

    配置項

    說明

    樣本值

    日誌功能

    是否支援將函數調用執行的日誌儲存至Log ServiceSLS。關於日誌功能的詳細資料,請參見配置日誌

    啟用

    記錄項目

    選擇已配置的記錄項目。

    aliyun-fc-hangzhou-2238f0df-a742-524f-9f90-976ba*******

    日誌庫

    選擇已配置的日誌庫。

    function-log

    請求層級指標

    是否查看請求層級指標。啟用後,函數每次調用執行的指標資訊將被收集,並被投遞到您在日誌配置時選擇的Logstore。

    啟用

通過ServerlessDevs工具開啟請求層級指標

前提條件

操作步驟

  1. 建立代碼目錄,目錄結構如下所示。

    .
    ├── 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
  2. 執行以下命令部署應用。

    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

函數錯誤類型,包含以下三種:

  • FunctionOOMError:記憶體溢出。

  • FunctionTimeoutError:執行時間超限。

  • FunctionUnhandledError:未捕獲的其他異常。

FunctionUnhandledError

否。僅在函數執行出現錯誤即hasFunctionError:true時記錄。

invokeFunctionLatencyMs

函數執行時間。

99.00

是。每次都會記錄。

traceContext

鏈路追蹤上下文資訊。

371d3ff242fcee9:371d3ff242fcee9:0:1

否。僅當配置鏈路追蹤時記錄。

isSampled

請求是否被鏈路追蹤採樣。

true

否。僅當配置鏈路追蹤時記錄。

resourceMode

執行請求的執行個體類型。取值如下:

  • OnDemand:表示按量執行個體。

  • Provision:表示預留執行個體。

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

非同步呼叫模式。取值說明如下:

  • Stateless:無狀態非同步呼叫

  • Stateful:有狀態非同步呼叫

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 

更多建立自訂儀錶盤的資訊,請參見建立儀錶盤