本文介紹Custom Runtime的公共請(qǐng)求頭、響應(yīng)碼和響應(yīng)頭以及日志格式,您可以參見(jiàn)這些信息打造屬于您的自定義運(yùn)行環(huán)境。
函數(shù)計(jì)算公共請(qǐng)求頭
Custom Runtime從函數(shù)計(jì)算中接收到的公共請(qǐng)求頭如下表所示。如果您需要訪問(wèn)阿里云其他服務(wù),您可能需要用到臨時(shí)AccessKey的Headers。如果您需要遷移已有的應(yīng)用,可忽略下文的內(nèi)容。
- 事件函數(shù)和HTTP函數(shù)均包含Common Headers。
- 公共請(qǐng)求頭是函數(shù)計(jì)算自動(dòng)生成的,主要包含權(quán)限信息和函數(shù)的基本信息等。
Header | 描述 |
---|---|
x-fc-request-id | Request ID。 |
x-fc-access-key-id | 臨時(shí)AccessKey ID。 |
x-fc-access-key-secret | 臨時(shí)AccessKey Secret。 |
x-fc-security-token | 臨時(shí)Security Token。 |
x-fc-function-handler | 函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。 |
x-fc-function-memory | 函數(shù)最大能使用的內(nèi)存。 |
x-fc-function-initializer | Initializer函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。 |
x-fc-initialization-timeout | Initializer函數(shù)執(zhí)行的超時(shí)時(shí)間。 |
x-fc-instance-lifecycle-pre-stop-handler | PreStop函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。 |
x-fc-instance-lifecycle-pre-freeze-handler | PreFreeze函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。 |
x-fc-region | 函數(shù)所在的地域。 |
x-fc-account-id | 函數(shù)所有者的UID。 |
x-fc-qualifier | 函數(shù)調(diào)用時(shí)指定的服務(wù)版本或別名。更多信息,請(qǐng)參見(jiàn)灰度發(fā)布示例。 |
x-fc-version-id | 函數(shù)調(diào)用時(shí)指定的服務(wù)版本。 |
x-fc-function-name | 函數(shù)名稱。 |
x-fc-service-name | 函數(shù)所在的服務(wù)的名字。 |
x-fc-service-logproject | 函數(shù)所在服務(wù)配置的日志項(xiàng)目。 |
x-fc-service-logstore | 函數(shù)所在服務(wù)配置的日志庫(kù)。 |
x-fc-control-path | 函數(shù)的請(qǐng)求類型。
對(duì)于Custom Runtime或Custom Container,您可以根據(jù)Headers中的參數(shù)來(lái)判斷函數(shù)調(diào)用是HTTP函數(shù)調(diào)用還是事件函數(shù)調(diào)用。參數(shù)信息如下:
|
函數(shù)計(jì)算響應(yīng)碼和響應(yīng)頭
- 響應(yīng)碼
StatusCode
200
:成功狀態(tài)。404
:失敗狀態(tài)。
- 響應(yīng)頭
x-fc-status
200
:成功狀態(tài)。404
:失敗狀態(tài)。
x-fc-status
響應(yīng),向函數(shù)計(jì)算匯報(bào)本地函數(shù)是否執(zhí)行成功。
- 不設(shè)置
x-fc-status
:函數(shù)計(jì)算默認(rèn)本次調(diào)用是成功執(zhí)行的,但是您的函數(shù)可能有異常,沒(méi)有向函數(shù)計(jì)算匯報(bào),函數(shù)計(jì)算會(huì)認(rèn)為這次函數(shù)執(zhí)行沒(méi)有報(bào)錯(cuò),在業(yè)務(wù)邏輯上可能沒(méi)有影響,但是在監(jiān)控可觀測(cè)性上會(huì)有影響。如下圖所示: - 設(shè)置
x-fc-status
:當(dāng)您的函數(shù)存在異常,通過(guò)x-fc-status
響應(yīng)向函數(shù)計(jì)算匯報(bào)本次函數(shù)執(zhí)行失敗,并將錯(cuò)誤堆棧信息打印到日志中。如下圖所示:
StatusCode
和x-fc-status
。
函數(shù)日志格式
建議您在創(chuàng)建服務(wù)時(shí)啟用日志功能,Custom Runtime中所有打印到標(biāo)準(zhǔn)輸出(Stdout)的日志會(huì)自動(dòng)收集到您指定的日志服務(wù)中。具體步驟,請(qǐng)參見(jiàn)配置日志。
函數(shù)計(jì)算在其他運(yùn)行環(huán)境,即除Custom Runtime和Custom Container以外的運(yùn)行環(huán)境中調(diào)用函數(shù)時(shí),如果請(qǐng)求頭中包含x-fc-log-type" = "Tail"
,那么返回的響應(yīng)頭包含x-fc-log-result
的內(nèi)容就是函數(shù)執(zhí)行時(shí)打印的日志,日志上限為4 KB。您可以在函數(shù)計(jì)算控制臺(tái)函數(shù)執(zhí)行結(jié)果中查看該日志。如果您希望在控制臺(tái)的執(zhí)行結(jié)果中看到Custom Runtime的運(yùn)行日志,需要在代碼中記錄請(qǐng)求開(kāi)始和結(jié)束的日志。
日志內(nèi)容 | 是否必選 | 代碼 |
---|---|---|
啟動(dòng)Runtime | 否
說(shuō)明 該內(nèi)容為函數(shù)冷啟動(dòng)的標(biāo)志。
|
FunctionCompute ${runtime} runtime inited. 說(shuō)明
${runtime} 為自定義語(yǔ)言類型,建議您避免使用函數(shù)計(jì)算官方語(yǔ)言名稱,例如Node.js、Python或PHP等。
|
Invoke開(kāi)始的日志 | 是 | FC Invoke Start RequestId: ${RequestId} |
Invoke結(jié)束的日志 | 是 | FC Invoke End RequestId: ${RequestId} |
Initialize開(kāi)始的日志 | 否
說(shuō)明 如果是Initializer函數(shù),則需要記錄。
|
FC Initialize Start RequestId: ${RequestId} |
Initialize結(jié)束的日志 | 否
說(shuō)明 如果是Initializer函數(shù),則需要記錄。
|
FC Initialize End RequestId: ${RequestId} |
除了以上特殊的信息外,推薦您在自己的日志中包含請(qǐng)求ID,方便日后診斷問(wèn)題。推薦日志格式為$utcdatetime(yyyy-MM-ddTHH:mm:ss.fff) $requestId [$Level] $message
。