API網關支持用戶對配置在API網關中的已發布API進行在線調試,本文重點介紹如何通過API調試中的自助排錯功能進行調試過程中的問題排查。
1. 概述
API控制臺支持對已發布API進行調試,而在調試過程中遇到問題時,如何理解報錯信息并快速定位和解決問題。本文將結合API調試頁面提供的自助排錯能力進行介紹。
API調試支持摘要簽名認證、簡單認證(AppCode)、BasicAuth插件認證。
API調試支持 multipart/form-data,可在調試頁面上傳文件。
調試頁請求報文最大支持512KB,若請求報文較大,建議使用SDK調試。
配置的實例黑白名單以及IP訪問控制插件需放行API調試的IP地址,具體IP地址可以在API調試頁面左下角的調試提示中獲取。
2. 調試信息獲取錯誤信息
所有的API請求只要到達網關,網關就會返回請求結果信息。用戶可以查看返回結果的頭部,即Header部分,來獲取API網關返回的信息。其中X-Ca開頭的屬性均為API網關返回,其中您需要重點關注的信息為:
X-Ca-Error-Code。API網關系統錯誤碼,當請求出現錯誤被網關攔截后,由API網關提供的錯誤碼。
X-Ca-Request-Id。請求唯一ID,請求一旦進入API網關應用后,API網關就會生成請求ID并通過響應頭返回給客戶端,建議客戶端與后端服務都記錄此請求ID,可用于問題排查與跟蹤。
X-Ca-Error-Message。API網關返回的錯誤消息,當請求出現錯誤時API網關會通過響應頭將錯誤消息返回給客戶端。
2.1. 根據X-Ca-Request-Id查詢更多調用信息
在應答的Header中獲得X-Ca-Error-Code與X-Ca-Error-Message可以基本明確報錯原因,而X-Ca-Request-Id可以用于在日志服務中查詢請求日志、通過控制臺查詢結果、或提供給支持人員進行日志排查。
控制臺查詢步驟如下:
登錄API網關控制臺。
在左側欄單擊API調用——自助排錯,輸入API所在Region以及X-Ca-Request-Id,單擊查詢,就可以看到對應的日志信息。
可以參考通過日志服務查看API調用日志,文檔中有日志各字段具體的含義,可以幫助更好的查看日志信息。
2.1.1. API網關報錯
當本次API網關調用響應信息中API網關錯誤碼(X-Ca-Error-Code)不為空,說明本次調用被API網關攔截。錯誤碼由一個6位長度的字符描述。當請求被API網關攔截時,API網關會返回相應的錯誤信息,并附有簡單的錯誤原因說明(X-Ca-Error-Message),可以根據該部分內容排查錯誤原因。更多錯誤碼解釋請參考錯誤代碼表。
2.1.2. 后端服務報錯
當本次調用的HTTP狀態碼不為200,且API網關錯誤碼為空,則表示本次調用API網關成功將請求轉發到后端服務,后端服務經過處理后返回非200的狀態碼。這時候需要檢查后端服務業務邏輯。如果是通過云市場購買的API,則需要咨詢云市場的服務提供商。
2.1.3. 請求成功
當的本次調用返回的HTTP狀態碼為200,則表示本次請求API網關成功轉發請求到后端服務,并且后端服務返回成功的應答。
3. 獲取Trace日志
在API調試頁面發送請求后。可以在Trace日志中可以查看API網關收到的請求、API網關的處理詳情、API網關發給后端服務的請求、API網關收到的應答、API網關給客戶端返回的應答。
如果使用的是子賬號或者角色扮演賬號,發送請求前需要勾選記錄Trace日志,則需要確保使用的賬號被主賬號授予了當前API所在實例的AcquireGatewayToken接口RAM權限。示例如下,更多詳情可以參考使用 RAM 管理 API。
{
"Version": "1",
"Statement": [
{
"Effect": "ALLOW",
"Action": "apigateway:AcquireGatewayToken",
"Resource": "acs:apigateway:{#regionId}:{#accountId}:instance/{#InstanceId}"
}
]
}
# 其中{#}為變量標識,需要替換為實際值。
4. 使用自助排錯分析錯誤原因
自助排錯中的問題診斷展示了本次調用的部分日志數據,當調用出現失敗的情況時,可以根據該部分的信息定位和排查問題。這里介紹部分字段用于快速定位出錯位置:
TotalLatency:API網關從接收到客戶端請求,到完成客戶端響應的總時間
ServiceLatency:API網關向后端服務發送請求,到接收完后端服務響應的時間
通過上述兩個字段可以快速分析出報錯位置,當ServiceLatency為0則表示請求在API網關被攔截,未到達后端服務;當ServiceLatency不為0則表示請求到達后端服務。另外,整個請求鏈路的IO時間點也記錄在日志中:
FrontRequestStart:API網關開始接收到客戶端請求的時間點
FrontRequestEnd:API網關完成接收客戶端請求的時間點
BackendRequestStart:API網關開始向后端服務發起請求的時間點
BackendRequestEnd:API網關完成向后端服務發起請求的時間點
BackendResponseStart:API網關開始接收到后端服務響應的時間點
BackendResponseEnd:API網關完成接收后端服務響應的時間點
FrontResponseStart:API網關開始向客戶端發送響應的時間點
FrontResponseEnd:API網關完成向客戶端發送響應的時間點
利用好請求日志信息能快速解決調用問題,詳細的日志字段含義請參考通過日志服務查看API調用日志。