Request Tracing für Fehlersuche nutzen
📖 Nutzung
·
Updated vor 1 Monat
Anwendungsbeispiele
Beispiel 1: Route gibt 502 zurück
"Mein Nextcloud unter cloud.example.com gibt 502 zurück"
- Debug-Tab öffnen, Tracing aktivieren, Route speichern
- Request an cloud.example.com senden
- Im Debug-Tab erscheint:
21:45:54 GET / 502 10.8.0.3 - Status 502 = Backend nicht erreichbar → Peer offline oder Port falsch
Beispiel 2: Redirect-Schleife
"Meine Route leitet endlos weiter"
- Tracing aktivieren
- Im Debug-Tab sieht man mehrere 302-Einträge:
21:46:01 GET / 302 10.8.0.3 21:46:01 GET /login 302 10.8.0.3 21:46:01 GET / 302 10.8.0.3 - Redirect-Schleife zwischen
/und/login→ Auth-Konfiguration prüfen
Beispiel 3: Request kommt nicht an
"Meine Route antwortet nicht"
- Tracing aktivieren
- Request senden — kein Eintrag im Debug-Tab
- Der Request erreicht die Route gar nicht → DNS-Problem oder Caddy-Config prüfen
API
Trace-Einträge abrufen
GET /api/v1/routes/:id/trace?limit=50&since=1774640938.708
Query-Parameter:
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
limit |
Integer | 50 | Max. Anzahl Einträge (max. 200) |
since |
String (ISO 8601) | - | Nur Einträge nach diesem Zeitpunkt |
Response:
{
"ok": true,
"data": {
"entries": [
{
"timestamp": "2026-03-27T21:45:54.741Z",
"method": "GET",
"uri": "/",
"status": 302,
"remote_ip": "54.36.233.20",
"host": "nas.domaincaster.com",
"user_agent": "Mozilla/5.0 ..."
}
]
}
}
Tracing aktivieren/deaktivieren
Über die bestehende Route-API:
# Tracing aktivieren
curl -X PUT /api/v1/routes/:id \
-H "Content-Type: application/json" \
-d '{"debug_enabled": true}'
# Tracing deaktivieren
curl -X PUT /api/v1/routes/:id \
-H "Content-Type: application/json" \
-d '{"debug_enabled": false}'
Einschränkungen
- Nur HTTP-Routen: L4/TCP-Routen unterstützen kein Tracing (caddy-trace ist ein HTTP-Handler)
- Keine Persistenz: Trace-Daten werden nur in der Caddy-Log-Datei gespeichert, nicht in der Datenbank
- Kein Export: Trace-Einträge können nicht als CSV/JSON exportiert werden
- Kein URI-Filter: Alle Requests an die Route werden getraced, kein selektives Tracing möglich
- Performance: Tracing erzeugt zusätzliche Log-Einträge — bei hochfrequentierten Routen sollte es nur temporär aktiviert werden
Technische Details
caddy-trace Plugin
Repository: github.com/greenpau/caddy-trace
Handler-Name: trace (http.handlers.trace)
Go-Modul: github.com/greenpau/caddy-trace
Handler-Config
{
"handler": "trace",
"tag": "route-{routeId}",
"response_debug_enabled": true
}
- tag: Eindeutiger Identifier pro Route (
route-1,route-2, etc.) — wird zum Filtern der Log-Einträge verwendet - response_debug_enabled: Aktiviert Response-Logging (Status-Code, Response-Größe, Response-Headers)
Log-Pipeline
- caddy-trace schreibt Zap-JSON nach stdout
- Supervisord leitet Caddy-stdout via
teenach/data/caddy/caddy-stdout.log - Die Trace-API (
GET /api/v1/routes/:id/trace) liest diese Datei - Einträge werden nach
tag === "route-{id}"gefiltert - Incoming- und Outgoing-Einträge werden per
request_idzusammengeführt
Log-Format (caddy-trace Output)
Incoming Request:
{
"level": "debug",
"time": "2026-03-27T21:45:54.741Z",
"msg": "debugging request",
"request_id": "f9c59915-9071-419a-8ca2-46a035bfa356",
"direction": "incoming",
"tag": "route-1",
"method": "GET",
"host": "nas.domaincaster.com",
"uri": "/",
"remote_addr": "54.36.233.20",
"user_agent": "curl/8.17.0",
"headers": { "Accept": "*/*" }
}
Outgoing Response:
{
"level": "debug",
"time": "2026-03-27T21:45:54.742Z",
"msg": "debugging response",
"request_id": "f9c59915-9071-419a-8ca2-46a035bfa356",
"direction": "outgoing",
"tag": "route-1",
"status_code": 302,
"response_size": 0,
"response_headers": { "Location": ["/route-auth/login?..."] }
}
Datenbank
| Spalte | Typ | Default | Beschreibung |
|---|---|---|---|
debug_enabled |
INTEGER | 0 | Request-Tracing aktiviert (0/1) |
Migration Version 27 (add_debug_enabled) — erstellt am 2026-03-27.
Backup/Restore
debug_enabled wird bei Backup/Restore berücksichtigt. Trace-Daten (Log-Datei) werden nicht exportiert.
UI-Integration
- Create-Card: Toggle "Request Tracing" innerhalb von
http-fields(bei L4 ausgeblendet) - Edit-Modal: Eigener "Debug"-Tab mit Toggle + Trace-Log-Container
- Debug-Tab wird bei L4-Routen ausgeblendet
- Polling: Auto-Refresh alle 3 Sekunden wenn Debug-Tab aktiv
- Polling stoppt bei Tab-Wechsel oder Modal-Close
- Badge: Bernsteinfarbener "Debug"-Badge in der Routen-Liste