Azure / Azure/azure-functions-python-worker

[Bug] PYTHON_ENABLE_OPENTELEMETRY=true crashes every async invocation (NoneType.extract) on v2 runtime, Python 3.13

Abierto Apto para principiantes
#1,881 2 comentarios 2 reacciones 0 asignados Ver en GitHub
bug python
Lenguaje dominante
Python
Estrellas
357
Forks
116
Merge medio
32 min
PR fusionados (30 d)
1

Descripción

### Expected Behavior

With `host.json` `telemetryMode: OpenTelemetry` and app setting `PYTHON_ENABLE_OPENTELEMETRY=true`, async functions should invoke normally (the worker should either initialize the OpenTelemetry trace-context propagator or no-op safely)

### Actual Behavior

Every async invocation returns HTTP 500. In v2 `worker_init` (runtimes/v2/azure_functions_runtime/handle_event.py), `PYTHON_ENABLE_OPENTELEMETRY=true` only calls `otel_manager.set_otel_libs_available(True)` and never calls `update_opentelemetry_status()` (unlike the `PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY` path). The propagator stays None, so per-invocation context activation crashes:

AttributeError: 'NoneType' object has no attribute 'extract'
File ".../azure_functions_runtime/otel.py", line 112, in configure_opentelemetry
ctx = otel_manager.get_trace_context_propagator().extract(carrier)

Removing the setting makes the app healthy. Appears to be the crash manifestation of #1870.

### Steps to Reproduce

1. Deploy a Python 3.13 Flex Consumption function app with an async HTTP trigger.
2. `host.json`: `{ "version": "2.0", "telemetryMode": "OpenTelemetry" }`.
3. Add app setting `PYTHON_ENABLE_OPENTELEMETRY=true`.
4. Call any async function -> HTTP 500 with the AttributeError above.
5. Remove `PYTHON_ENABLE_OPENTELEMETRY` -> healthy.

### Relevant code being tried

```shell
host.json: `{ "version": "2.0", "telemetryMode": "OpenTelemetry" }`

App setting:  PYTHON_ENABLE_OPENTELEMETRY=true 
(App also calls  azure.monitor.opentelemetry.configure_azure_monitor(...) at startup; removing that call does not change the crash.)
```

### Relevant log output

```shell
AttributeError: 'NoneType' object has no attribute 'extract'
File ".../azure_functions_runtime/otel.py", line ~112, in configure_opentelemetry
ctx = otel_manager.get_trace_context_propagator().extract(carrier)
```

### requirements.txt file

```shell
azure-functions
azure-functions-durable
azure-monitor-opentelemetry
```

### Where are you facing this problem?

Production Environment (explain below)

### Function app name

_No response_

### Additional Information

Hosting: Azure Functions Flex Consumption (FC1), Python 3.13, v2 azure_functions_runtime.

Related:
#1870 (worker-side auto-init gap),
#1626 (late context propagation).

Suggested fix: call  update_opentelemetry_status()  in the  PYTHON_ENABLE_OPENTELEMETRY  branch of worker_init  (symmetric to the App Insights path), and/or add a  None  guard in  configure_opentelemetry() .

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza en runtimes/v2/azure_functions_runtime/handle_event.py, en worker_init, y compara la rama PYTHON_ENABLE_OPENTELEMETRY con la ruta PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY. Después inspecciona runtimes/v2/azure_functions_runtime/otel.py, en configure_opentelemetry; la tarea estará terminada cuando las invocaciones asíncronas dejen de fallar al habilitar la configuración y el contexto de traza se inicialice o se gestione de forma segura.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
azure, python
Área
backend, observability-sre
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Activo
Claridad
Bien especificado
Aptitud para principiantes
78/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.