elastic / elastic/apm-agent-python

When APM is disabled, OTEL's `start_span` causes exception

Abierto
#2,163 3 comentarios 0 reacciones 0 asignados Ver en GitHub
agent-python community triage
Lenguaje dominante
Python
Estrellas
431
Forks
239
Merge medio
5 d 10 h
PR fusionados (30 d)
7

Descripción

**Describe the bug**: ...
When `ELASTIC_APM_ENABLED` is set to `false`, `start_span()` should not result in an exception. This happens when the Tracer from `from elasticapm.contrib.opentelemetry.trace` is used.

**To Reproduce**

1. Set `ELASTIC_APM_ENABLED` to `false`
2. Call `start_as_current_span` or `start_span` (from `Tracer` of `elasticapm.contrib.opentelemetry.trace`)
3. Notice an exception is thrown

**Environment (please complete the following information)**
- OS: Mac OS, Linux
- Python version: 3.12
- Framework and version [e.g. Django 2.1]: N/A
- APM Server version: N/A
- Agent version: `6.23.0`

**Additional context**

Here's the exception:
```
with tracer.start_as_current_span(name) as span:\\n
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n
| File \\\"/usr/local/lib/python3.12/contextlib.py\\\", line 137, in __enter__\\n
| return next(self.gen)\\n
| ^^^^^^^^^^^^^^\\n
| File \\\"/app/.venv/lib/python3.12/site-packages/elasticapm/contrib/opentelemetry/trace.py\\\", line 230, in start_as_current_span\\n
| span = self.start_span(\\n
| ^^^^^^^^^^^^^^^^\\n
| File \\\"/app/.venv/lib/python3.12/site-packages/elasticapm/contrib/opentelemetry/trace.py\\\", line 150, in start_span\\n
| span = Span(\\n
| ^^^^^\\n
| File \\\"/app/.venv/lib/python3.12/site-packages/elasticapm/contrib/opentelemetry/span.py\\\", line 65, in __init__\\n
| elastic_span.otel_wrapper = self\\n
| ^^^^^^^^^^^^^^^^^^^^^^^^^\\n
| AttributeError: 'NoneType' object has no attribute 'otel_wrapper'\\n
```

- Agent config options

Click to expand

```
client = elasticapm.Client(
central_config=False,
transaction_sample_rate=1,
)

tracer = Tracer(__name__)
```

- `requirements.txt`:

Click to expand

```
elastic-apm = "^6.23.0"
opentelemetry-api = "^1.28.1"
opentelemetry-sdk = "^1.28.1"
```

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza en elasticapm/contrib/opentelemetry/trace.py, en Tracer.start_span, y sigue la construcción de Span hasta elasticapm/contrib/opentelemetry/span.py. Reproduce el fallo con ELASTIC_APM_ENABLED establecido en false e inspecciona por qué la ruta deshabilitada proporciona None. Se considera terminado cuando start_span y start_as_current_span se completan sin una excepción en esa configuración.

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

Evaluación

Stack tecnológico
python
Área
backend, observability-sre
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
48/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.