以简单的方式解决无服务器错误--使用标签

111 阅读2分钟

调试无服务器应用程序的错误

当客户报告一个你无法复制的问题,但你仍然需要解决,你会怎么做?你可以发布一个带有日志语句的变更,然后开始监控日志,试图抓住客户的功能,并希望你再次看到这个错误。这可能是一个漫长而没有结果的任务。

我们自己也曾经历过这种情况!这就是为什么我们在无服务器框架仪表板的调试工具--探索器中加入了标签。

Tags in dashboard

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

Tags in dashboard

下面是一个我们如何使用它的例子;为无服务器框架仪表盘提供动力的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)
   }