随着云计算技术的发展,Serverless 架构作为云原生架构的一种,被越来越多的企业和开发者所使用。相比于传统的架构方式,Serverless 架构能够大幅降低运维成本,提高开发效率。但是,Serverless 架构下,错误排查难度也相应地提高了。
本文将介绍 Serverless 架构下的错误排查方法和技巧,为开发者提供指导。
1. Serverless 架构下的错误分类
在开始讲解错误排查方法之前,我们需要先理解 Serverless 架构下的错误分类。
1.1 异常错误
在 Serverless 架构下,我们通常使用 AWS Lambda、Azure Functions 等服务来编写函数。在函数执行过程中,如果出现了未处理的异常,就会导致函数失败。
例如以下代码:
// javascriptcn.com 代码示例 exports.handler = async (event) => { const a = 1; const b = 0; const c = a / b; return { statusCode: 200, body: JSON.stringify({ message: 'success', }), }; };
在这个例子中,我们将 1 除以 0,会导致异常错误,导致函数执行失败。
1.2 非异常错误
在 Serverless 架构下,我们通常使用 API Gateway、EventBridge 等服务来触发函数执行。在这些服务中,可能会因为配置错误、访问频率限制等问题导致函数执行失败,这些错误我们称为非异常错误。
例如以下代码:
// javascriptcn.com 代码示例 exports.handler = async (event) => { if (event.path === '/test') { return { statusCode: 200, body: JSON.stringify({ message: 'success', }), }; } else { return { statusCode: 404, body: JSON.stringify({ message: 'not found', }), }; } };
在这个例子中,如果访问的路径不是 '/test'
,就会返回 404 错误。
2. Serverless 架构下的错误排查方法
了解了错误分类之后,我们就可以开始讲解 Serverless 架构下的错误排查方法了。
2.1 日志排查
在 Serverless 架构下,我们通常将函数的日志输出到 CloudWatch Logs 或者 stderr 中。在日志中,可以查看函数的执行流程、变量的取值等详细信息,是排查错误的关键。
在 CloudWatch Logs 中,我们可以使用 filter 和 metric 进行错误排查。
2.1.1 使用 filter 进行排查
filter 是 CloudWatch Logs 中的功能之一,可以筛选出符合条件的日志。我们可以使用 filter 来搜索出错误日志,并进一步查询错误信息。
例如以下代码:
// javascriptcn.com 代码示例 exports.handler = async (event) => { console.log('event:', JSON.stringify(event)); const a = 1; const b = 0; const c = a / b; console.log('c:', c); return { statusCode: 200, body: JSON.stringify({ message: 'success', }), }; };
在这个例子中,我们使用 console.log 打印了两条日志,分别输出了 event
和 c
的值。我们可以使用 filter 查询出错误的日志:
[$.errorMessage = "division by zero"]
这个 filter 表示检索出包含 errorMessage
字段,且值为 "division by zero"
的日志。使用 filter 搜索后,可以查看到类似以下的日志:
"errorMessage": "division by zero"
通过这种方式,我们可以快速定位错误发生的时间点,从而进一步分析问题。
2.1.2 使用 metric 进行排查
metric 是 CloudWatch Logs 中的功能之一,可以搜索出符合条件的日志,并生成对应的指标。我们可以使用 metric 来实时监控函数的执行情况,及时发现问题。
例如以下代码:
// javascriptcn.com 代码示例 exports.handler = async (event) => { const a = 1; const b = 0; const c = a / b; return { statusCode: 200, body: JSON.stringify({ message: 'success', }), }; };
在这个例子中,我们处理了未处理的异常错误。当使用 CloudWatch Logs 进行排查时,我们需要手动搜索错误日志,才能找到问题。
为了更加及时地发现问题,我们可以在 CloudWatch Metrics 中创建指标,监控函数执行错误的数量。
在 CloudWatch Metrics 中,我们可以使用以下指标来监控函数的执行错误:
- Errors:可以用来监控函数的执行异常错误;
- 4XXError:可以用来监控 API Gateway 返回的 4XX 错误;
- 5XXError:可以用来监控 API Gateway 返回的 5XX 错误。
例如创建一个 Errors 指标,表示监控函数的执行异常错误:
Filter pattern: [$.errorMessage = "*"] Metric namespace: ${aws:service:serviceName} Metric name: CustomMetricErrors Metric value: 1
这个指标表示,当 CloudWatch Logs 中出现 errorMessage
字段时,该指标的值为 1。
通过这种方式,我们可以及时发现函数的执行错误,并进一步排查问题。
2.2 调试排查
在 Serverless 架构下,我们也可以使用调试工具进行排查。AWS Toolkit for VS Code 和 Serverless Framework 都提供了对 Serverless 架构的支持,并且内置了调试工具。
在使用调试工具时,我们可以打断点、单步执行,查看变量的值等调试信息,大大提高了错误排查的效率。
以下是 AWS Toolkit for VS Code 和 Serverless Framework 的使用方法。
2.2.1 使用 AWS Toolkit for VS Code 进行排查
AWS Toolkit for VS Code 是由 AWS 官方推出的插件,能够大幅提高开发者的效率。使用 AWS Toolkit for VS Code 能够快速创建、调试 Serverless 应用程序,提高错误排查的能力。
使用 AWS Toolkit for VS Code 进行排查,步骤如下:
- 安装 AWS Toolkit for VS Code 插件;
- 打开 Serverless 应用程序所在的文件夹;
- 创建一个 Lambda 函数,并将调试器端口设置为 5858:
serverless create --template aws-nodejs --path hello-world cd hello-world npm install
// javascriptcn.com 代码示例 functions: hello: handler: handler.hello events: - http: path: / method: any environment: DEBUGGER_PORT: 5858 plugins: - serverless-offline
- 打开 VS Code 调试视图,创建一个 launch.json 文件,并进行配置:
// javascriptcn.com 代码示例 { "version": "0.2.0", "configurations": [ { "name": "Attach debugger", "type": "node", "request": "attach", "port": 5858, "skipFiles": ["<node_internals>/**/*.js"], "remoteRoot": "${workspaceFolder}/hello-world", "localRoot": "${workspaceFolder}/hello-world" } ] }
- 在代码中打上断点,启动调试。
使用 AWS Toolkit for VS Code 进行排查,效率非常高,开发者只需要几个简单的步骤就能进行 Serverless 应用程序的调试工作。
2.2.2 使用 Serverless Framework 进行排查
Serverless Framework 是由社区贡献的开源框架,能够使开发者更加方便地创建、部署和调试 Serverless 应用程序。
使用 Serverless Framework 进行排查,步骤如下:
- 安装 Serverless Framework:
npm install serverless -g
- 创建一个 Serverless 应用程序:
serverless create --template aws-nodejs --path hello-world cd hello-world npm install
- 在 serverless.yml 文件中配置调试器端口:
// javascriptcn.com 代码示例 functions: hello: handler: handler.hello events: - http: path: / method: any environment: DEBUGGER_PORT: 5858 plugins: - serverless-offline
- 打开 Node.js 调试器:
node --inspect-brk=0.0.0.0:5858 node_modules/serverless/bin/serverless offline start
- 在代码中打上断点,启动调试。
以上就是使用 Serverless Framework 进行排查的步骤,与使用 AWS Toolkit for VS Code 类似。开发者可以选择一个适合自己的工具来进行错误排查。
3. 总结
本文介绍了 Serverless 架构下的错误排查方法和技巧,包括日志排查和调试排查。在日志排查中,我们可以使用 CloudWatch Logs 的 filter 和 metric 来进行排查;在调试排查中,我们可以使用 AWS Toolkit for VS Code 和 Serverless Framework 来进行排查。
错误排查是 Serverless 架构下开发者必须要掌握的技能之一,希望本文能够为开发者提供一些指导和启示。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653db70b7d4982a6eb76e5aa