開發者在云函式的開發除錯、在線運維程序中,難免會遇到函式呼叫失敗需要定位問題的情況,通常我們使用日志作為主要排障手段,
在云函式控制臺中,我們可以看到包含函式呼叫狀態的日志串列,直接篩選可過濾查看所有呼叫失敗的日志,
如果我們能夠從網關回傳資訊中拿到某個失敗請求的 RequestId ,我們還可以根據 RequestId 檢索指定請求的日志,

這是最基礎的日志檢索使用方法,
實際定位問題的程序中,有可能出現以下幾種場景:
- 函式里的部分例外有進行捕獲,但函式的呼叫狀態依然是成功,此時怎么找到已捕獲的例外?
- 函式錯誤呼叫非常多,我只想查看某些指定模塊的日志資訊怎么辦?
- 收到告警提示我函式運行時間超過 x 秒,我如何迅速找到指定運行時長范圍的呼叫日志?
- 我要查看的業務日志包含多個不同的關鍵詞,想要一次性找到多個關鍵詞所在的日志怎么辦?
針對以上場景,我們可以利用「高級日志」功能解決上述全部問題,
高級日志如何使用
下面給大家分享一下已捕獲的例外,查找函式運行時間大于 x 的請求,關鍵詞組合檢索中如何使用高級日志,
1. 已捕獲的例外
云函式比較多的使用場景是和 API 網關組合使用實作 REST API ,以下我們結合一個實際的業務場景說明如何使用高級日志,
以下模擬一個 HTTP PUT 請求實作教師錄入學生資訊的功能,
def teacher_put():
print('insert info')
try:
fh = open("/tmp/testfile", "w")
fh.write("students info xxxx")
except IOError:
print("Error: cannot find the file or open file failed")
else:
print("write info success")
fh.close()
return('teacher_put success')
def main_handler(event, context):
print(str(event))
if event["pathParameters"]["user_type"] == "teacher":
if event["pathParameters"]["action"] == "get":
return teacher_get()
if event["pathParameters"]["action"] == "put":
return teacher_put()
由于上面寫檔案時的 IO 例外已被捕獲,所以當找不到檔案時,函式呼叫結果依然為成功,API 請求回傳 null ,如果使用普通呼叫日志功能,需要逐條查看日志,這將會非常麻煩,
我們在代碼捕獲例外時有列印 Error 資訊,在高級日志里可以直接檢索該關鍵詞:

如果想查看包含該請求的完整日志,則點擊該條日志的 RequestId 即可:

上面講述了如何查找已被捕獲的例外,直接檢索捕獲時列印的關鍵詞即可, 日志輸出方法沒有特殊要求,使用運行時原生日志即可,
2. 查找函式運行時間大于 x 的請求
如果我們收到告警或通過監控圖表查看到某個函式的運行時間例外,如何迅速找到這些日志呢?
高級日志里提供了運行時間檢索的方法,比如我們想查找運行時間大于 150ms 的日志,我們可以在檢索框輸入 SCF_Duration>150,即可找出該時間范圍的日志,

時間范圍和關鍵詞檢索可組合使用,在上述示例中會將所有日志都過濾出來,
如果我們只想查看有多少請求的運行時間是大于 150 ms ,我們可以組合關鍵詞過濾 SCF_Duration>150 and "Report RequestId" 進行檢索:

上述運算式的意思是,過濾運行時間大于 150 ms 且 包含 Report RequestId 關鍵詞的日志,Report RequestId這一行是函式每次請求結束后系統列印的陳述句,所以可以用它來達到篩選唯一請求日志的作用,
如果想過濾出 150<運行時間≤300 的日志,則可以使用 SCF_Duration in (150 300],
3. 關鍵詞組合檢索
如果我們想同時檢索多個關鍵詞,比如 error,userid,region我們可以使用 and 或者 or 連接這些關鍵詞,
如想要過濾出同時包含這些關鍵詞的日志,則可以使用 error and userid and region ,
如想要過濾出包含任一關鍵詞的日志,則可以使用 error or userid or region,
高級日志服務提供了豐富的檢索語法,可參考日志檢索語法教程
Serverless Framework 30 天試用計劃
我們誠邀您來體驗最便捷的 Serverless 開發和部署方式,在試用期內,相關聯的產品及服務均提供免費資源和專業的技術支持,幫助您的業務快速、便捷地實作 Serverless!
詳情可查閱:Serverless Framework 試用計劃
One More Thing
3 秒你能做什么?喝一口水,看一封郵件,還是 —— 部署一個完整的 Serverless 應用?
復制鏈接至 PC 瀏覽器訪問:https://serverless.cloud.tencent.com/deploy/express
3 秒極速部署,立即體驗史上最快的 Serverless HTTP 實戰開發!
傳送門:
- GitHub: github.com/serverless
- 官網:serverless.com
歡迎訪問:Serverless 中文網,您可以在 最佳實踐 里體驗更多關于 Serverless 應用的開發!
推薦閱讀:《Serverless 架構:從原理、設計到專案實戰》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6771.html
標籤:其他
