HOME LAB · SELFHOSTING · NETZWERK

Kategorie: Monitoring & Observability

Monitoring, Logging, Alerting und Metriken.

  • Redis für Self-Hosted Apps verstehen: Persistenz, RAM-Limits, Backups

    Redis für Self-Hosted Apps verstehen: Persistenz, RAM-Limits, Backups

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Redis für Self-Hosted Apps verstehen: Persistenz, RAM-Limits, Backups

    Kurzproblem und Zielbild

    In diesem Guide setzt du Redis für Self-Hosted Apps verstehen: Persistenz, RAM-Limits, Backups mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    redis-server --version
    redis-cli INFO memory
    redis-cli CONFIG GET maxmemory
    redis-cli BGSAVE

    3) Dienst/Funktion gezielt prüfen

    redis-cli INFO persistence
    redis-cli DBSIZE
    ls -lh /var/lib/redis

    4) Betriebsgrenzen testen

    redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -c 50 -q
    redis-cli INFO stats | egrep "instantaneous_ops_per_sec|evicted_keys"

    Validierung / Checks

    redis-cli INFO persistence
    redis-cli DBSIZE
    ls -lh /var/lib/redis
    redis-cli PING
    redis-cli INFO persistence | egrep "rdb_last_bgsave_status|aof_enabled"

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    redis-cli INFO persistence
    df -h
    sudo journalctl -u redis-server -n 120 --no-pager

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    redis-cli CONFIG GET maxmemory maxmemory-policy
    redis-cli INFO memory
    ss -ltnp | grep 6379

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • PostgreSQL Wartung im Homelab: Vacuum, Index-Checks, Backup-Strategie

    PostgreSQL Wartung im Homelab: Vacuum, Index-Checks, Backup-Strategie

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: PostgreSQL Wartung im Homelab: Vacuum, Index-Checks, Backup-Strategie

    Kurzproblem und Zielbild

    In diesem Guide setzt du PostgreSQL Wartung im Homelab: Vacuum, Index-Checks, Backup-Strategie mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    psql -U postgres -c "SELECT version();"
    psql -U postgres -c "VACUUM (VERBOSE, ANALYZE);"
    psql -U postgres -c "REINDEX DATABASE postgres;"

    3) Dienst/Funktion gezielt prüfen

    psql -U postgres -c "SELECT relname,n_live_tup,n_dead_tup FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 10;"
    pg_isready

    4) Betriebsgrenzen testen

    pgbench -i -s 10 postgres
    pgbench -c 20 -j 4 -T 60 postgres
    psql -U postgres -d postgres -c "SELECT * FROM pg_stat_bgwriter;"

    Validierung / Checks

    psql -U postgres -c "SELECT relname,n_live_tup,n_dead_tup FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 10;"
    pg_isready
    psql -U postgres -d postgres -c "SELECT now();"
    pg_isready -h 127.0.0.1 -p 5432

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    sudo sed -n '1,160p' /etc/postgresql/*/main/pg_hba.conf
    sudo -u postgres psql -c "SHOW hba_file;"
    sudo systemctl reload postgresql

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    ss -ltnp | grep 5432
    psql -U postgres -d postgres -c "SELECT usename,client_addr FROM pg_stat_activity;"
    traceroute DB_HOST

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • Netdata als Live-Dashboard: Alarme, Eltern-Kind-Streaming, Retention

    Netdata als Live-Dashboard: Alarme, Eltern-Kind-Streaming, Retention

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Netdata als Live-Dashboard: Alarme, Eltern-Kind-Streaming, Retention

    Kurzproblem und Zielbild

    In diesem Guide setzt du Netdata als Live-Dashboard: Alarme, Eltern-Kind-Streaming, Retention mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    bash <(curl -Ss https://my-netdata.io/kickstart.sh) --dont-wait
    systemctl status netdata --no-pager
    curl -I http://127.0.0.1:19999

    3) Dienst/Funktion gezielt prüfen

    # Alarm-Health in UI prüfen
    journalctl -u netdata -n 120 --no-pager

    4) Betriebsgrenzen testen

    sudo apt-get install -y stress-ng
    stress-ng --cpu 4 --timeout 60s
    curl -fsS "http://127.0.0.1:19999/api/v1/alarms?all=true" | jq '. | length'

    Validierung / Checks

    # Alarm-Health in UI prüfen
    journalctl -u netdata -n 120 --no-pager
    curl -fsS http://127.0.0.1:19999/api/v1/info | jq '.version'
    curl -fsS "http://127.0.0.1:19999/api/v1/alarms?active=true" | jq '. | length'

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    systemctl is-active netdata
    ss -ltnp | grep 19999
    journalctl -u netdata -n 200 --no-pager

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    grep -R "memory mode\|history" /etc/netdata/ -n
    curl -I http://127.0.0.1:19999
    traceroute NETDATA_PARENT_OR_AGENT

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • Uptime Kuma Multi-Location Checks: Latenzvergleich und echte SLA-Sicht

    Uptime Kuma Multi-Location Checks: Latenzvergleich und echte SLA-Sicht

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Uptime Kuma Multi-Location Checks: Latenzvergleich und echte SLA-Sicht

    Kurzproblem und Zielbild

    In diesem Guide setzt du Uptime Kuma Multi-Location Checks: Latenzvergleich und echte SLA-Sicht mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    docker ps --filter name=uptime-kuma
    docker logs --tail 100 uptime-kuma
    # mehrere Push Probes/Locations konfigurieren

    3) Dienst/Funktion gezielt prüfen

    # Latenzvergleich in Status Page prüfen
    # Alerting nur bei Mehrheitsfehlern auslösen

    4) Betriebsgrenzen testen

    docker ps --filter name=uptime-kuma
    docker logs --tail 200 uptime-kuma | egrep -i "timeout|dns|connect|tls"
    curl -m 5 -I https://dein-endpunkt.tld || true

    Validierung / Checks

    # Latenzvergleich in Status Page prüfen
    # Alerting nur bei Mehrheitsfehlern auslösen
    curl -I http://127.0.0.1:3001
    docker logs --tail 100 uptime-kuma

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    docker logs --tail 200 uptime-kuma
    nslookup dein-endpunkt.tld
    curl -vk https://dein-endpunkt.tld

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    traceroute dein-endpunkt.tld
    ss -ltnp | grep 3001
    docker inspect uptime-kuma --format '{{.State.Status}}'

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • Debian Hardening im Homelab: SSH, nftables, unattended-upgrades

    Debian Hardening im Homelab: SSH, nftables, unattended-upgrades

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Debian Hardening im Homelab: SSH, nftables, unattended-upgrades

    Kurzproblem und Zielbild

    In diesem Guide setzt du Debian Hardening im Homelab: SSH, nftables, unattended-upgrades mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    sudo apt update && sudo apt upgrade -y
    sudo sed -n "1,120p" /etc/ssh/sshd_config
    sudo nft list ruleset
    sudo systemctl status unattended-upgrades

    3) Dienst/Funktion gezielt prüfen

    sshd -t
    sudo nft -c -f /etc/nftables.conf
    sudo journalctl -u ssh -n 100 --no-pager

    4) Betriebsgrenzen testen

    sudo nft -c -f /etc/nftables.conf
    sshd -t
    ssh -o PreferredAuthentications=publickey user@host

    Validierung / Checks

    sshd -t
    sudo nft -c -f /etc/nftables.conf
    sudo journalctl -u ssh -n 100 --no-pager
    sudo sshd -T | egrep "passwordauthentication|permitrootlogin"
    sudo unattended-upgrade --dry-run --debug

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    sudo journalctl -u ssh -n 200 --no-pager
    sudo grep -E "PasswordAuthentication|PermitRootLogin" /etc/ssh/sshd_config
    sudo systemctl restart ssh

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    sudo nft list ruleset
    sudo ip route
    ss -tulpn | egrep "22|80|443"

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • Syncthing sicher betreiben: Device-Keys, Ignore-Patterns, Konfliktlösung

    Syncthing sicher betreiben: Device-Keys, Ignore-Patterns, Konfliktlösung

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Syncthing sicher betreiben: Device-Keys, Ignore-Patterns, Konfliktlösung

    Kurzproblem und Zielbild

    In diesem Guide setzt du Syncthing sicher betreiben: Device-Keys, Ignore-Patterns, Konfliktlösung mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    syncthing --version
    curl -s http://127.0.0.1:8384/rest/system/status
    # Ignore-Patterns in .stignore prüfen

    3) Dienst/Funktion gezielt prüfen

    # Konfliktdateien und device states im UI prüfen
    journalctl -u syncthing -n 120 --no-pager

    4) Betriebsgrenzen testen

    # Gezielten Failover-/Negativtest ausführen
    # Reaktionszeit und Fehlerbild protokollieren
    # Danach Service normalisieren und Zustand erneut verifizieren

    Validierung / Checks

    # Konfliktdateien und device states im UI prüfen
    journalctl -u syncthing -n 120 --no-pager
    # End-to-End Test mit klaren Sollwerten durchführen und Ergebnis dokumentieren

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    journalctl -n 120 --no-pager
    # betroffenen Dienst gezielt reload/restarten
    # Konfigurationsdatei auf Syntax prüfen

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    ip a
    ip route
    ss -tulpn
    # Berechtigungen und Abhängigkeiten gegenprüfen

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • CrowdSec mit Traefik Bouncer: echte Blocklisten im Reverse Proxy

    CrowdSec mit Traefik Bouncer: echte Blocklisten im Reverse Proxy

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: CrowdSec mit Traefik Bouncer: echte Blocklisten im Reverse Proxy

    Kurzproblem und Zielbild

    In diesem Guide setzt du CrowdSec mit Traefik Bouncer: echte Blocklisten im Reverse Proxy mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    sudo cscli bouncers add traefik-bouncer
    docker logs --tail 120 traefik
    sudo cscli decisions list -n 20

    3) Dienst/Funktion gezielt prüfen

    sudo cscli alerts list -n 20
    # geblockte Test-IP im Traefik-Log prüfen

    4) Betriebsgrenzen testen

    # Gezielten Failover-/Negativtest ausführen
    # Reaktionszeit und Fehlerbild protokollieren
    # Danach Service normalisieren und Zustand erneut verifizieren

    Validierung / Checks

    sudo cscli alerts list -n 20
    # geblockte Test-IP im Traefik-Log prüfen
    # End-to-End Test mit klaren Sollwerten durchführen und Ergebnis dokumentieren

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    journalctl -n 120 --no-pager
    # betroffenen Dienst gezielt reload/restarten
    # Konfigurationsdatei auf Syntax prüfen

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    ip a
    ip route
    ss -tulpn
    # Berechtigungen und Abhängigkeiten gegenprüfen

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • Home Assistant Automationen debuggen: Trace, Logs, Conditions

    Home Assistant Automationen debuggen: Trace, Logs, Conditions

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: Home Assistant Automationen debuggen: Trace, Logs, Conditions

    Kurzproblem und Zielbild

    In diesem Guide setzt du Home Assistant Automationen debuggen: Trace, Logs, Conditions mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    ha core logs --lines 150
    ha automation list
    ha core check

    3) Dienst/Funktion gezielt prüfen

    # UI Trace pro Automation prüfen
    ha core logs --lines 200 | grep -i automation

    4) Betriebsgrenzen testen

    # Gezielten Failover-/Negativtest ausführen
    # Reaktionszeit und Fehlerbild protokollieren
    # Danach Service normalisieren und Zustand erneut verifizieren

    Validierung / Checks

    # UI Trace pro Automation prüfen
    ha core logs --lines 200 | grep -i automation
    # End-to-End Test mit klaren Sollwerten durchführen und Ergebnis dokumentieren

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    journalctl -n 120 --no-pager
    # betroffenen Dienst gezielt reload/restarten
    # Konfigurationsdatei auf Syntax prüfen

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    ip a
    ip route
    ss -tulpn
    # Berechtigungen und Abhängigkeiten gegenprüfen

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen

  • ZFS Scrub und SMART-Routinen planen: Frühwarnung statt Datenverlust

    ZFS Scrub und SMART-Routinen planen: Frühwarnung statt Datenverlust

    Schwierigkeit: Mittel · Dauer: 45–90 Min · Ziel: ZFS Scrub und SMART-Routinen planen: Frühwarnung statt Datenverlust

    Kurzproblem und Zielbild

    In diesem Guide setzt du ZFS Scrub und SMART-Routinen planen: Frühwarnung statt Datenverlust mit reproduzierbaren Schritten, klaren Checks und belastbaren Recovery-Pfaden um.

    Voraussetzungen

    • Linux-/CLI-Grundlagen
    • Admin-Zugriff auf die Zielsysteme
    • Snapshot/Backup vor Änderungen

    Schnellstart (funktionierende Basis)

    hostnamectl
    ip a
    systemctl --failed
    journalctl -p 3 -xb --no-pager | tail -n 30

    Schritt-für-Schritt Umsetzung

    1) Ausgangszustand dokumentieren

    date -Iseconds
    uname -a
    # aktuelle Versionen und relevante Konfig-Pfade notieren

    2) Kernkonfiguration sauber setzen

    zpool status
    zpool scrub TANK
    smartctl -a /dev/sdX | head -n 80

    3) Dienst/Funktion gezielt prüfen

    zpool status -x
    smartctl -H /dev/sdX
    journalctl -k -n 120 --no-pager

    4) Betriebsgrenzen testen

    # Gezielten Failover-/Negativtest ausführen
    # Reaktionszeit und Fehlerbild protokollieren
    # Danach Service normalisieren und Zustand erneut verifizieren

    Validierung / Checks

    zpool status -x
    smartctl -H /dev/sdX
    journalctl -k -n 120 --no-pager
    # End-to-End Test mit klaren Sollwerten durchführen und Ergebnis dokumentieren

    Troubleshooting

    Konfiguration wird nicht übernommen

    Ursache: Syntax-/Reload-Fehler oder falscher Parameterpfad.

    journalctl -n 120 --no-pager
    # betroffenen Dienst gezielt reload/restarten
    # Konfigurationsdatei auf Syntax prüfen

    Dienst läuft, Funktion aber fehlerhaft

    Ursache: Abhängigkeiten, Routing, Rechte oder Versionen inkonsistent.

    ip a
    ip route
    ss -tulpn
    # Berechtigungen und Abhängigkeiten gegenprüfen

    Fazit

    Mit einem klaren Ablauf, harten Checks und dokumentierten Grenzwerten bleibt das Setup wartbar statt zufällig stabil. Nächster Schritt: den Ablauf als monatliche Betriebsroutine einplanen.

    Quellen