要为您的所有服务的 Lambda 函数启用 X-Ray 跟踪,您只需在提供程序级别设置相应的跟踪配置:
provider:
tracing:
lambda: true
如果您想在每个函数级别设置跟踪,您可以在函数定义中使用跟踪配置:
functions:
myFunction:
handler: index.handler
tracing: true
将跟踪设置为 true 将转换为活动跟踪配置。您可以通过以字符串形式提供所需的配置来覆盖此行为:
functions:
myFunction:
handler: index.handler
tracing: PassThrough
另请注意,您可以混合使用提供程序级别和功能级别的配置。所有函数都将继承提供者级别的配置,然后可以在单个函数的基础上进行覆盖:
service:
name: my-tracing-service
provider:
name: aws
stage: dev
runtime: nodejs8.10
tracing:
lambda: true
functions:
myFunc1: # this function will inherit the provider-level tracing configuration
handler: index.func1
myFunc2:
handler: handler.func2
tracing: PassThrough # here we're overwriting the provider-level configuration
建议使用上述跟踪配置为 Lambda 设置 X-Ray 跟踪,因为这样做将确保 X-Ray 设置由无服务器框架核心通过 CloudFormation 管理。
您可以更细化并指定要跟踪的资源:
打开您的 serverless.yml 并在提供程序部分添加跟踪配置:
provider:
...
tracing:
apiGateway: true
lambda: true
重要提示:由于 CloudFormation 的限制,目前无法在不使用跟踪的现有部署上启用 AWS X-Ray Tracing。
如果您想使用 AWS X-Ray Tracing for Lambda,请删除旧的无服务器部署并重新部署启用了跟踪的 lambda。
最后,别忘了配置正确的 IAM 权限策略:
provider:
...
iamRoleStatements:
- Effect: Allow
Action:
...
- xray:PutTraceSegments
- xray:PutTelemetryRecords
Resource: "*"
要为 AWS Lambda 调用的其他 AWS 服务启用 X-Ray 跟踪,您必须安装 AWS X-Ray 开发工具包。在您的项目目录中,运行:
$ npm install -s aws-xray-sdk
更新您的 Lambda 代码并使用 X-Ray 开发工具包包装 AWS 开发工具包。变化:
const AWS = require('aws-sdk');
收件人:
const AWSXRay = require('aws-xray-sdk-core');
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
截至发布Serverless v140