elastic / elastic/apm-agent-python

Fix transaction tracing when running Django under ASGI

Aperta
#1,953 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub
agent-python community triage
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:

Screenshot 2024-01-02 at 3 52 41 PM

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:

image

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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.