C#集成AWS Lambda与OpenTelemetry时父Span缺失问题排查
AWS Lambda + C# OpenTelemetry 父Span缺失问题
我用C#给AWS Lambda函数集成OpenTelemetry,已经添加了AWS Otel Collector作为层,数据能正常发送到Signoz,但存在一个问题:我的Span始终显示缺失父Span。
应用会创建一个带有自定义服务名的Span,后续生成的其他Span都正常,但第一个Span的父Span实际是Lambda服务本身,这个父Span因未知原因未发送到第三方服务,导致平台显示缺失Span。Honeycomb相关文档中提到过类似问题,但未针对C#场景提供解决方案。
AWS Lambda与XRay原生集成,函数被调用时会传入Lambda服务的XRay信息,因此使用OTEL时,第一个Span会以Lambda服务作为父Span,但该父Span不会发送到Honeycomb等第三方服务,导致平台认为存在缺失Span。我的解决思路是将首个Span标记为根Span,但尝试以下方法后均未解决:
- 关闭Lambda配置中的XRay追踪:虽然停止向XRay发布Lambda服务Span,但自定义Span仍带有ParentId
- 参考Honeycomb文档修改环境变量:问题依旧存在
我的OpenTelemetry代码配置如下,首个Span名为lambda.otel.service,其父Span来自AWS Lambda服务:
readonly TracerProvider? _tracerProvider; public Function() { _tracerProvider = Sdk.CreateTracerProviderBuilder() .ConfigureResource(resource => { resource .AddService("lambda.otel.service") .AddAttributes(new[] { new KeyValuePair<string, object>("service.version", Assembly.GetExecutingAssembly().GetName().Version!.ToString()) }); }) .AddAWSLambdaConfigurations() .AddAspNetCoreInstrumentation() .AddGrpcClientInstrumentation() .AddHttpClientInstrumentation() .AddSource(DiagnoticsConfig.SourceName) .AddOtlpExporter() .AddConsoleExporter() .Build(); }
内容的提问来源于stack exchange,提问作者Batuhan Aydın
相关产品推荐
相关产品推荐

