Azure中使用OpenTelemetry时App Insights组件名称及Cloud RoleName异常问题
Azure OpenTelemetry追踪问题排查
我在Azure上使用OpenTelemetry追踪服务时遇到两个问题:
- Azure Application Map显示的追踪组件名称不正确,上报的Cloud RoleName也有误——App Insights显示的是Function App名称而非具体的Function名称(我的Function名为
FirewallCreate)。 - 追踪结果中显示了同一Function App中的另一个函数名称,且该组件标注0ms耗时和0调用量。
我的工具方法及函数代码如下:
def get_otel_new_tracer(name=__name__): # Setup a TracerProvider(). For more details read: # https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable?tabs=python#set-the-cloud-role-name-and-the-cloud-role-instance trace.set_tracer_provider( TracerProvider( resource=Resource.create( { SERVICE_NAME: name, SERVICE_NAMESPACE: name, # SERVICE_INSTANCE-ID: "my-instance-id" } ) ) ) # Send messages to Exporter in batches span_processor = BatchSpanProcessor( AzureMonitorTraceExporter.from_connection_string( os.environ["TRACE_APPINSIGHTS_CONNECTION_STRING"] ) ) trace.get_tracer_provider().add_span_processor(span_processor) return trace.get_tracer(name) def firewall_create(): tracer = get_otel_new_tracer("FirewallCreate") with tracer.start_new_span("span-firewall-create") as span: # do some stuff ...
问题1:可能存在的错误
- TracerProvider重复初始化冲突:每次调用
get_otel_new_tracer都会重置全局TracerProvider。如果同一Function App内的其他函数也用了相同逻辑,后执行的函数会覆盖之前的Resource配置,导致FirewallCreate的追踪被其他函数的配置污染,显示成错误的函数名称。 - Cloud RoleName未显式配置:当前仅设置了
SERVICE_NAME和SERVICE_NAMESPACE,但Azure App Insights识别Cloud RoleName需要对应cloud.role.name属性。默认情况下Function App会自动上报自身名称作为RoleName,你的自定义配置未覆盖这个默认值。 - Span上下文关联异常:如果函数执行过程中存在跨Span调用或依赖,可能出现上下文串线,导致追踪归属到错误组件。
问题2:0ms耗时和0调用量的解读
- 0调用量:表示该组件(另一个函数)没有产生任何被追踪的请求,当前显示的组件条目是TracerProvider被覆盖后残留的元数据,并非实际有调用记录。
- 0ms耗时:因为没有对应的实际追踪Span数据,所以耗时统计为0。本质是错误的Resource元数据被上报,但没有匹配的调用Span,因此出现空统计值。
内容的提问来源于stack exchange,提问作者Bhaskar
相关产品推荐
相关产品推荐

