调试无服务器应用程序的错误
当客户报告一个你无法复制的问题,但你仍然需要解决,你会怎么做?你可以发布一个带有日志语句的变更,然后开始监控日志,试图抓住客户的功能,并希望你再次看到这个错误。这可能是一个漫长而没有结果的任务。
我们自己也曾经历过这种情况!这就是为什么我们在无服务器框架仪表板的调试工具--探索器中加入了标签。

我们的新标签过滤器可以为你做追踪。现在,当你试图调试一个难以追踪或难以复制的问题时,请尝试这样做:当你处于错误状态时记录日志,对该日志行进行标记,并输出一个JSON对象,代表你的应用程序的某些状态。打开资源管理器,对该标签进行过滤,查看资源管理器为你找到的调用情况。

下面是一个我们如何使用它的例子;为无服务器框架仪表盘提供动力的API在仪表盘中被监控(是的,我们吃自己的狗粮)。我们的一个客户报告了一个查询错误,但没有提出实际的错误。我们创建了一个标签,用它来查找他们的调用日志,这样我们就可以研究在他们的函数被调用时我们的应用程序的状态。
我们没有尝试自己去跟踪它们的调用,而是让探索者去做。我们花的时间完全集中在理解问题上,而不是猎取日志。
如果你想在资源管理器中尝试标签,你首先需要在你的Serverless.yml文件中添加一些。
用NodeJS做标签
如果你使用NodeJS,用npm update -g serverless来更新serverless
将这段代码添加到你的Serverless.yml文件中。
module.exports.hello = async event, context => {
context.serverlessSdk.tagEvent('customerId', 5, { newCustomer: true, isDemo: true, demoExpire: '2019-12-01' })
tagEvent('200 OK')
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
},
null,
2
),
};
};
用Python做标记
如果你使用的是Python,请添加这个:
def hello(event, context):
context.serverless_sdk.tag_event('customerId', 5, { 'newCustomer': True, 'isDemo': True})
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}