Azure / Azure/azure-functions-python-worker
[Bug] PYTHON_ENABLE_OPENTELEMETRY=true crashes every async invocation (NoneType.extract) on v2 runtime, Python 3.13
- Langage dominant
- Python
- Étoiles
- 357
- Forks
- 116
- Merge moyen
- 32 min
- PR mergées (30 j)
- 1
Description
### 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() .
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez dans runtimes/v2/azure_functions_runtime/handle_event.py, au niveau de worker_init, et comparez la branche PYTHON_ENABLE_OPENTELEMETRY avec le chemin PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY. Examinez ensuite runtimes/v2/azure_functions_runtime/otel.py, au niveau de configure_opentelemetry ; le travail est terminé lorsque les invocations asynchrones n’échouent plus lorsque le paramètre est activé et que le contexte de trace est initialisé ou géré de manière sûre.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- azure, python
- Domaine
- backend, observability-sre
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- Active
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 78/100