開發前言
作為一名 Serverless 架構的重度使用者,我一直對除錯感到恐慌:經常在測驗介面的時候,會通過網頁/PostMan 觸發函式,然后沒得到預期的結果,我就只能傻乎乎的一直點控制臺的日志,等待他能早點出來結果,看看為啥和我預期結果不同,

雖然說 10S,20S 的日志輸出還能接受,但是在除錯程序中,真的就是噩夢,一直在想有什么方法可以實作實時日志,我觸發函式,就馬上能看到,無論是控制臺/API 網關還是 COS 觸發器,只要被觸發,我就能實時看到日志,這將會對我寫代碼,除錯產生重大,超級重大幫助,所以我開發了這個組件,
為了更加方便,清晰,直觀,我這里做了個使用方法的教程:
使用方法教程:
說明
該模塊用于實作云函式 SCF Python Runtime 的實時日志功能,通過該組件,您可以實時查看到函式輸出的日志(包括 print 和 logging 等),本組件目前在測驗階段,歡迎測驗提意見,目前不建議上業務,
準備
- 安裝
scflog:
pip install scflog
安裝時,可能需要 root 權限,否則可能無法使用,安裝完成,可以執行 scflog -v 查看是否安裝成功:
scflog 0.1.1
- 部署實時日志組件,新建專案,并且建立
serverless.yaml,內容:
組件部署
PythonLogs:
component: '@gosls/tencent-pythonlogs'
inputs:
region: ap-guangzhou
這里的引數是您要將這個組件部署的區域,該組件可以復用,也就是說這個組件部署完成之后可以一直被使用,
通過 sls --debug 部署:
DEBUG ─ Setting tags for function PythonRealTimeLogs_Cleanup
DEBUG ─ Creating trigger for function PythonRealTimeLogs_Cleanup
DEBUG ─ Deployed function PythonRealTimeLogs_Cleanup successful
PythonLogs:
websocket: ws://service-laabz6zm-1256773370.gz.apigw.tencentcs.com/test/python_real_time_logs
26s ? PythonLogs ? done
此時我們需要配置組件:
scflog set -w ws://service-laabz6zm-1256773370.gz.apigw.tencentcs.com/test/python_real_time_logs
配置成功輸出:
DFOUNDERLIU-MB0:~ dfounderliu$ scflog set -w ws://service-laabz6zm-1256773370.gz.apigw.tencentcs.com/test/python_real_time_logs
設定成功
websocket: ws://service-laabz6zm-1256773370.gz.apigw.tencentcs.com/test/python_real_time_logs
region: ap-guangzhou
namespace: default
通過 sls remove --debug 移除
DEBUG ─ Removing any previously deployed API. api-rzm1uzik
DEBUG ─ Removing any previously deployed API. api-07wq4u9a
DEBUG ─ Removing any previously deployed service. service-laabz6zm
6s ? PythonLogs ? done
專案中使用
在專案中使用該組件的方法很簡單,
- 創建一個檔案夾,并進入
mkdir scflogs && cd scflogs
- 初始化專案
scflog init
- 創建
index.py檔案以及serverless.yaml檔案:
vim index.py
內容是:
from logs import *
import time
import logging
def main_handler(event, context):
print("event is: ", event)
time.sleep(1)
logging.debug("this is debug_msg")
time.sleep(1)
logging.info("this is info_msg")
time.sleep(1)
logging.warning("this is warning_msg")
time.sleep(1)
logging.error("this is error_msg")
time.sleep(1)
logging.critical("this is critical_msg")
time.sleep(1)
print("context is: ", event)
return "hello world"
vim serverless.yaml
內容是:
Hello_World:
component: "@serverless/tencent-scf"
inputs:
name: Hello_World
codeUri: ./
handler: index.main_handler
runtime: Python3.6
region: ap-guangzhou
description: My Serverless Function
memorySize: 64
timeout: 20
exclude:
- .gitignore
- .git/**
- node_modules/**
- .serverless
- .env
events:
- apigw:
name: serverless
parameters:
protocols:
- http
serviceName: serverless
description: the serverless service
environment: release
endpoints:
- path: /test
method: ANY
通過 sls --debug 部署:
DEBUG ─ Deployed function Hello_World successful
Hello_World:
Name: Hello_World
Runtime: Python3.6
Handler: index.main_handler
MemorySize: 64
Timeout: 20
Region: ap-guangzhou
Namespace: default
Description: My Serverless Function
APIGateway:
- serverless - http://service-89bjzrye-1256773370.gz.apigw.tencentcs.com/release
30s ? Hello_World ? done
此時,我們配置了APIGW的觸發器,地址是上面輸出的地址 + endpoints中的path例如:
http://service-89bjzrye-1256773370.gz.apigw.tencentcs.com/release/test
此時,我們可以打開實時日志:
scflog logs -n Hello_World -r ap-guangzhou
此時會提醒我們實時日志開啟成功:
DFOUNDERLIU-MB0:~ dfounderliu$ scflog logs -n Hello_World -r ap-guangzhou
實時日志開啟 ...
我們可以用瀏覽器通過剛才函式部署完成回傳給我們的地址觸發函式:
實時日志開啟 ...
[2020-03-04 16:36:08] : ......}
[2020-03-04 16:36:09] : DEBUG debug_msg
[2020-03-04 16:36:10] : INFO info_msg
[2020-03-04 16:36:11] : WARNING warning_msg
[2020-03-04 16:36:14] : ERROR error_msg
[2020-03-04 16:36:14] : CRITICAL critical_msg
[2020-03-04 16:36:16] : context is: .......}
.......
至此,實作實時日志功能,
總結
至此,完成了 Python 語言的實時日志功能,根據測驗來看,性能還算不錯,也還算穩定,通過 3 個函式 + APIGW + COS + CAM 完成了一個實時日志功能,理論上也可以復用到 Nodejs 等 Runtime,
傳送門:
- GitHub: github.com/serverless
- 官網:serverless.com
歡迎訪問:Serverless 中文網,您可以在 最佳實踐 里體驗更多關于 Serverless 應用的開發!
推薦閱讀:《Serverless 架構:從原理、設計到專案實戰》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/24802.html
標籤:其他
上一篇:了解這5大K8S管理服務,為你節省50%的部署時間!
下一篇:請加入我們!
