elastic / elastic/apm-agent-python
Fix transaction tracing when running Django under ASGI
- Lingua principale
- Python
- Stelle
- 431
- Fork
- 239
- Merge medio
- 5g 10h
- PR unite (30g)
- 7
Descrizione
(Moved from [original discussion](https://github.com/elastic/apm-agent-python/issues/1548#issuecomment-1875952921))
When running Django under ASGI, the middleware that Elastic APM injects is not tracking standard Django request transactions.
Here's my `asgi.py`:
```python
django_asgi_app = get_asgi_application()
application = ProtocolTypeRouter(
{
"http": django_asgi_app,
}
)
```
My `settings.ELASTIC_APM`:
```python
{'SERVICE_NAME': 'myapp',
'SERVER_URL': 'http://fleet-server:8200',
'SECRET_TOKEN': '*************',
'ENVIRONMENT': 'development',
'DEBUG': True}
```
I've browsed several pages and waited for Fleet to flush but all I see are Celery tasks:
Nothing is logged as a `request` transaction type by the standard Django middleware when running under Daphne.
If I switch the project back to standard WSGI/Django runserver, it logs request transactions:
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia dal punto di ingresso ASGI in asgi.py, in particolare da get_asgi_application e dalla configurazione di ProtocolTypeRouter, e riproduci la richiesta con Daphne usando le impostazioni ELASTIC_APM mostrate. Confronta il comportamento ASGI con WSGI/Django runserver standard e segui il percorso standard del middleware Django; il lavoro è completato quando una normale richiesta HTTP appare come una transazione di richiesta, non solo come task Celery.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- django, python
- Ambito
- backend, observability-sre
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100