Debugging Grundlagen
Probleme systematisch finden und loesen - von 'es geht nicht' zu 'ich weiss warum'.
🧠 Schritt 1: Die richtige Einstellung
Bevor du loslegst - die wichtigste Regel beim Debugging:
"Der Computer macht genau das, was man ihm sagt - nicht das, was man meint."
Systematisches Vorgehen:
- Reproduzieren: Kannst du das Problem nachstellen?
- Eingrenzen: Was funktioniert noch? Was nicht?
- Hypothese: Was koennte die Ursache sein?
- Testen: Eine Aenderung, dann pruefen
- Dokumentieren: Was hast du versucht?
Nicht wild aendern!
🌐 Schritt 2: Ist es erreichbar? (Netzwerk-Check)
Das erste was du pruefen solltest: Komme ich ueberhaupt hin?
# Ist der Server erreichbar?
ping dein-server.de
# DNS-Aufloesung pruefen
nslookup dein-server.de
dig dein-server.de
# Ist der Port offen?
nc -zv dein-server.de 443
telnet dein-server.de 443
Haeufige Ursachen
| Ping fehlschlaegt | Server down, Firewall blockt ICMP, Netzwerkproblem |
| DNS fehlschlaegt | Domain nicht registriert, DNS-Server down, Propagation |
| Port nicht offen | Service laeuft nicht, Firewall, Port falsch |
Praktisches Beispiel: Nextcloud nicht erreichbar
ping cloud.deine-domain.de → OK? Server lebt2.
nc -zv cloud.deine-domain.de 443 → Fehlschlag? → Webserver oder Firewall pruefen
⚙️ Schritt 3: Laeuft der Service? (Status-Check)
Bei Docker-basierten Services:
# Alle Container anzeigen
docker ps -a
# Status eines spezifischen Containers
docker ps -a | grep nextcloud
# Container neustarten
docker restart nextcloud
# Mit docker-compose
cd /opt/nextcloud && docker compose ps
docker compose restart
Container-Status verstehen
| Up | Container laeuft normal |
| Restarting | Crasht und startet immer wieder → Logs pruefen! |
| Exited | Gestoppt oder gecrasht → Logs pruefen! |
| Created | Erstellt aber nie gestartet |
Bei systemd Services (ohne Docker):
# Service Status
systemctl status nginx
systemctl status postgresql
# Service neustarten
sudo systemctl restart nginx
📜 Schritt 4: Was sagen die Logs?
Logs sind dein bester Freund! Hier steht meist genau was schief laeuft.
# Docker Container Logs
docker logs nextcloud
docker logs nextcloud --tail 100
docker logs nextcloud -f # Live folgen
# docker-compose Logs
docker compose logs
docker compose logs -f nextcloud
# Systemd Journal
journalctl -u nginx -n 50
journalctl -xe # Letzte Fehler
Wonach suchen?
- • ERROR / FATAL - Offensichtliche Fehler
- • WARNING - Kann relevant sein
- • Connection refused - Anderer Service nicht erreichbar
- • Permission denied - Berechtigungsproblem
- • No space left - Festplatte voll
- • Out of memory - RAM voll
Praktisches Beispiel: n8n Workflow fehlgeschlagen
docker logs n8n --tail 200 | grep -i errorZeigt: "Connection refused to smtp:25" → E-Mail-Server nicht erreichbar
📊 Schritt 5: Ressourcen pruefen
Manchmal ist einfach etwas "voll":
# Festplatten-Nutzung
df -h
# Welcher Ordner ist gross?
du -sh /* 2>/dev/null | sort -h
du -sh /var/lib/docker/*
# RAM und CPU
htop
free -h
# Docker-spezifisch
docker stats
docker system df # Docker Speicherverbrauch
Typische Probleme
| Festplatte 100% | Docker Images aufraeumen, Logs rotieren, alte Backups loeschen |
| RAM voll | Service braucht zu viel, Memory Leak, zu viele Services |
| CPU 100% | Prozess haengt, Crypto-Mining, DoS-Angriff |
Docker aufraumen
docker system prune -a loescht ungenutzte Images, Container und Netzwerke.
Kann viel Platz freigeben - aber Vorsicht: Nicht bei laufenden Services!
🔧 Schritt 6: Typische Probleme & Loesungen
Webseite zeigt "502 Bad Gateway"
Der Reverse Proxy (nginx/Traefik) erreicht den Backend-Service nicht.
Pruefen:
- Laeuft der Container?
docker ps - Logs des Backends:
docker logs app-name - Stimmt der Port in der Proxy-Config?
E-Mails kommen nicht an
E-Mail-Versand ist komplex - viele moegliche Fehlerquellen.
Pruefen:
- SMTP-Credentials korrekt?
- Port blockiert? (25, 465, 587)
- SPF/DKIM/DMARC korrekt?
dig TXT deine-domain.de - Mailserver-Logs pruefen
Login funktioniert nicht
Authentifizierung fehlgeschlagen.
Pruefen:
- Passwort wirklich korrekt? (Caps Lock, Tastaturlayout)
- Account gesperrt/deaktiviert?
- Session/Cookie-Probleme? Browser-Cache leeren
- Datenbank erreichbar? (bei zentraler Auth)
Alles ist langsam
Performance-Probleme haben viele Ursachen.
Pruefen:
- Ressourcen:
htop,docker stats - Festplatte:
iostat(I/O-Last) - Netzwerk:
iftop(Bandbreite) - Datenbank: Langsame Queries? Indexe fehlen?
Container startet nicht / Restart Loop
Container crasht direkt nach dem Start.
Pruefen:
- Logs:
docker logs container-name - Config-Datei kaputt? (YAML-Syntax)
- Abhaengiger Service fehlt? (DB nicht gestartet)
- Volume/Mount-Pfad existiert nicht?
🎯 Schritt 7: Service-spezifische Checks
☁️ Nextcloud
# In den Container gehen
docker exec -it nextcloud bash
# OCC-Befehle (Nextcloud CLI)
occ status
occ maintenance:mode --off
occ files:scan --all
🔄 n8n
# Workflow-Ausfuehrungen pruefen
docker logs n8n --tail 100
# Webhook-URL erreichbar?
curl -I https://n8n.domain.de/webhook/test
📧 Mailserver
# Mailqueue pruefen
docker exec -it mailserver mailq
# SMTP-Verbindung testen
openssl s_client -connect mail.domain.de:465
# DNS-Records pruefen
dig MX domain.de
dig TXT domain.de | grep spf
🗄️ Datenbank (PostgreSQL/MariaDB)
# Verbindung pruefen
docker exec -it postgres psql -U user -d dbname -c "SELECT 1"
docker exec -it mariadb mysql -u user -p -e "SHOW STATUS"
# Aktive Verbindungen
SELECT * FROM pg_stat_activity;
🆘 Schritt 8: Wenn nichts hilft
Eskalations-Checkliste:
- Google die Fehlermeldung
Kopiere die exakte Fehlermeldung. Jemand hatte das Problem bestimmt schon.
- Dokumentation lesen
Die offizielle Doku hat oft einen Troubleshooting-Bereich.
- GitHub Issues durchsuchen
Bei Open Source Projekten: Issues und Discussions durchsuchen.
- Neustarten (ja, wirklich)
docker compose down && docker compose up -doder Server-Neustart. - Support kontaktieren
Mit allen gesammelten Infos: Was genau passiert, was hast du versucht, Logs.
Was wir brauchen wenn du uns kontaktierst
2. Wann trat es auf? Was hast du vorher gemacht?
3. Relevante Logs (die letzten 50-100 Zeilen)
4. Was hast du schon versucht?
Haeufige Fragen
Wie finde ich die richtige Log-Datei?
docker logs container-name. Bei systemd: journalctl -u service-name.
Bei Webservern: /var/log/nginx/ oder /var/log/apache2/. Die App selbst loggt oft in eigene Dateien
oder Docker-Volumes.