在 AWS Lambda 上排查 .NET 跟踪问题
如果 AWS Lambda 函数的跟踪功能未按预期工作,请先尝试常规的故障排除步骤,然后再处理具体情况。
一般故障诊断
完成以下步骤:
验证先决条件:
检查 .NET 的版本兼容性:
- .NET 运行时: 8.0 或更高版本
- 请确认 Instana 层已正确关联到Lambda函数。
验证Layer的安装:当 Instana Layer正确加载后,您应在 CloudWatch 日志中看到初始化消息:
- 请查找 Instana 的初始化信息。
- 检查是否有与图层加载相关的错误信息。
- 请确认环境变量是否被正确读取。
如果未显示以下消息:
- 请确认图层的 ARN 是否正确。
- 检查 Lambda 函数的运行时兼容性。
- 请确保环境变量是在函数级别设置的。
验证环境变量:如果跟踪功能无法正常工作,请检查环境变量是否为:
- 设置正确。
- 拼写正确。
- 请根据应用程序的部署环境进行适当设置。
- 有效、可被进程或应用程序访问且正确。
验证 Lambda 配置:
- 请确保 Lambda 函数使用的是正确的运行时(.NET 8 或更高版本)。
- 请确认 Instana Layer的ARN是否与正确的 AWS 区域和.NET 运行时相匹配。
- 请确认 Lambda 函数具有互联网连接,或者已正确配置虚拟私有云(VPC),以便能够访问 Instana 端点。
验证端点 URL 的配置:
SaaS Instana : 请使用您在 Instana 租户中的正确无服务器端点:
- 格式:
https://serverless-<region>.instana.io - 示例:
https://serverless-blue-saas.instana.io
- 格式:
自主托管的 Instana :
- 格式:
https://<instana-backend-ip>/serverless - 设置环境变量:
INSTANA_DISABLE_CA_CHECK=true或1
- 格式:
- 请确认 Lambda 函数的超时时间是否足够(建议初始冷启动时至少设置为 30 秒)。
- 请检查 CloudWatch 日志中是否存在与 Instana 相关的错误或警告。
针对具体情况的故障排除
如果常规故障排除无法解决您的问题,请参考以下故障排除方案:
场景 1: Instana 用户界面中未显示任何跟踪记录
症状: Lambda 函数运行成功,但在配置完成后, Instana 界面中未显示任何跟踪信息。
故障诊断步骤:
- 请确认 Lambda 函数的运行时环境受支持(.NET 8 或更高版本)。
请确认 Instana 层已正确关联到Lambda函数:
- 在 AWS 控制台中,转到 Lambda > 函数 > 您的函数。
- 在 Lambda 函数的 “配置 ”选项卡中,点击 “层”。
- 请确认“ Instana ”层是否已列出。
请确认该图层的 ARN 与正确的区域以及 .NET 运行时版本相符:
- 标准 AWS 区域的ARN格式:
arn:aws:lambda:<region>:410797082306:layer:instana-dotnetcore:<layer-version> - 中国 AWS 区域的ARN格式:
arn:aws:lambda:<region>:107998019096:layer:instana-dotnetcore:<layer-version>
- 标准 AWS 区域的ARN格式:
请确认环境变量已正确设置,且路径有效、可被进程或应用程序访问,并且正确无误:
CORECLR_ENABLE_PROFILING=1 CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd} CORECLR_PROFILER_PATH=/opt/instana_tracing/CoreProfiler.so DOTNET_STARTUP_HOOKS=/opt/Instana.Tracing.Core.dll INSTANA_AGENT_KEY=<your-agent-key> INSTANA_ENDPOINT_URL=<serverless_instana_endpoint> INSTANA_AWS_ACCOUNT_ID=<your_aws_account_id> LAMBDA_HANDLER=<Assembly::Namespace.ClassName::MethodName>请确认端点 URL 是否正确:
SaaS Instana : 请使用您在 Instana 租户中的正确无服务器端点:
- 格式:
https://serverless-<region>.instana.io - 示例:
https://serverless-blue-saas.instana.io
- 格式:
自主托管的 Instana :
- 格式:
https://<instana-backend-ip>/serverless - 将环境变量
INSTANA_DISABLE_CA_CHECK设置为true或1
- 格式:
- 请确认 Lambda 函数具有互联网连接,或者 VPC 配置正确,以便能够访问 Instana 端点。
- 请检查 Lambda 函数的执行角色是否具备必要的权限。
- 请确认 Lambda 函数的超时时间是否足够(建议初始冷启动时至少设置为 30 秒)。
- 请检查 CloudWatch 日志中是否存在与 Instana 相关的错误或警告。
场景 2:Lambda 函数超时问题
症状: 在添加 Instana 跟踪后,Lambda函数超时,或者执行时间显著增加。
故障诊断步骤:
检查 Lambda 函数的超时配置(如有必要,请延长超时时间):
- 在 AWS 控制台中,转到 Lambda > 函数 > 您的函数。
- 选择配置选项卡。
- 点击 “常规设置” > “编辑 ”。
- 将超时值调高(建议至少设置为30秒)。
- 检查冷启动开销:首次启动所需时间较长。
请确认 Lambda 函数的内存分配是否充足(建议至少为 512 MB):
- 在 AWS 控制台中,转到 Lambda > 函数 > 您的函数。
- 选择配置选项卡。
- 点击 “常规设置” > “编辑 ”。
- 如有需要,请增加内存分配。
- 查看 CloudWatch 日志以获取性能指标。
- 检查同步调用是否阻塞了 Lambda 的执行。
- 如果支持,请考虑使用异步追踪。
- 验证与 Instana 端点的网络延迟。
情况 3:缺失的跨度或不完整的轨迹
症状: 出现了一些记录,但不完整,缺少下游调用,或存在缺失。
故障诊断步骤:
- 请确认所有受支持的库均在兼容的版本范围内:
- 检查特定库是否需要自定义仪器配置。
审查以下 Lambda 函数的代码:
- 可能无法正确追踪的 async/await 模式
- 在 Lambda 返回后完成的后台任务
- 使用不受支持的客户端进行的外部服务调用
- 启用调试日志 ,以查看生成了哪些跨度。
- 在发送所有跨度之前,请检查 Lambda 函数是否已停止。
- 验证分布式追踪中的上下文传播是否正确。
场景 4:层连接失败
症状: 无法将 Instana 图层附加到 AWS Lambda 函数上,或者图层已附加但函数执行期间无法正确加载。
故障诊断步骤:
请确认图层 ARN 是否匹配:
- 更正 AWS 区域
- 正确的.NET 运行时版本(.NET 8 或更高版本)
- 最新可用图层版本
请确认 Lambda 函数的运行时与层兼容性一致:
- .NET 8 或更高版本
如果运行时不受支持,请在挂载层之前更新 Lambda 运行时。
- 请确认“ AWS ”账户具有访问“ Instana ”图层的权限。
- 检查 Lambda 函数是否已达到 5 个层级的限制。
- 检查 CloudWatch 日志 ,查看图层初始化错误。
请确认该层与 Lambda 函数架构兼容( x86_64 或 arm64 ):
- 请检查 Lambda 函数的架构设置。
- 请确保 Instana 层支持所选的架构。
场景 5:环境变量配置问题
症状:Instana 环境变量已设置,但 Lambda 函数无法识别。
故障诊断步骤:
请确认环境变量是在 Lambda 函数级别设置的,而不仅仅是在代码中设置:
- 在 AWS 控制台中,转到 Lambda > 函数 > 您的函数。
- 选择配置选项卡。
- 单击 “环境变量”。
- 请确认所有必需的变量均已存在。
- 检查环境变量名称中是否存在拼写错误(区分大小写)。
- 请确认 是否
INSTANA_AGENT_KEY有效且未过期。 - 请确认 Lambda 执行环境能够访问该
INSTANA_ENDPOINT_URL资源。 通过以下方式检查环境变量是否被覆盖:
- Lambda 函数代码
- 容器镜像设置(适用于容器化 Lambda)
- 基础设施即代码( Terraform 或 CloudFormation )
- 查看 CloudWatch 日志中的环境变量加载信息。
场景 7:VPC 配置问题
症状: VPC 中的 Lambda 函数无法将跟踪信息发送到 Instana。
故障诊断步骤:
请通过以下方式验证 Lambda 函数是否具有互联网访问权限:
- NAT网关(适用于公共 Instana 端点)
- VPC 端点(适用于 AWS 服务)
- 互联网网关(若位于公共子网中)
请确认安全组是否允许外发 HTTPS 流量(端口443):
- 在 AWS 控制台中,转到 Lambda > 函数 > 您的函数。
- 选择配置选项卡。
- 点击 VPC。
- 检查相关的安全组。
- 请确认出站规则允许访问 HTTPS (端口 443)。
请确认网络访问控制列表 (ACL) 未阻止出站流量:
- 在 AWS 控制台中,转到 VPC > 网络访问控制列表。
- 查找与您的 Lambda 函数子网关联的 Network ACL。
- 请确认出站规则允许 HTTPS 的流量。
wget使用测试 Lambda 函数并结合curl或 来测试连接:创建一个简单的 Lambda 函数来测试连接:
using System.Net.Http; public async Task<string> TestConnectivity() { using var client = new HttpClient(); var response = await client.GetAsync("https://serverless-<region>.instana.io"); return $"Status: {response.StatusCode}"; }对于自托管的 Instana :
- 验证 VPC 对等连接或 Transit Gateway 的配置。
- 检查路由表以确保路由正确。
- 请确认 DNS 的解析在 Instana 后端上是否正常。
收集日志
AWS Lambda 不支持自动日志收集。 因此,您必须手动收集日志。
手动收集日志
完成以下步骤:
通过在 Lambda 函数中添加环境变量来启用调试日志记录:
INSTANA_DEBUG=true INSTANA_LOG_LEVEL=DEBUG访问 CloudWatch 日志:
- Go 转到 AWS 控制台 > CloudWatch > 日志组。
- /aws/lambda/<function-name>查找日志组:.
- 查看 Instana 相关消息的近期日志流。
收集 Lambda 函数配置:
aws lambda get-function-configuration --function-name <function-name>收集 Lambda 函数的详细信息:
aws lambda get-function --function-name <function-name>测试 Lambda 函数调用:
aws lambda invoke --function-name <function-name> --payload '{}' response.json查看图层信息:
aws lambda list-layers aws lambda get-layer-version --layer-name instana-dotnet --version-number <version>
开具支持凭单
如果完成这些故障排除步骤后问题仍然存在,请在提交支持工单之前收集 MustGather 的数据。 MustGather 这些数据有助于 IBM 支持团队更高效地诊断您的问题。
如需了解更多信息,请访问 MustGather: Instana .NET / .NET Core Tracer - AWS Lambda。