2 health check sh
michael edited this page 2025-09-10 14:12:26 +02:00

health-check.sh

furt Service-Status nach Installation validieren

Getestet unter

  • OpenBSD 7.7
  • Debian 12
  • Arch Linux

Zweck des Scripts

Das health-check.sh Script überprüft ob der furt-Service nach der Installation korrekt läuft und erreichbar ist. Es testet sowohl die HTTP-API-Funktionalität als auch die grundlegende Port-Erreichbarkeit und dient als finaler Validierungsschritt im Installations-Orchestrator.

Das Script eliminiert manuelles Testen nach Installationen und stellt sicher dass furt vollständig betriebsbereit ist bevor die Installation als erfolgreich gemeldet wird.

Wie das Script funktioniert

Das Script implementiert eine zweistufige Health-Check-Strategie mit intelligenten Fallback-Mechanismen:

# Primär: HTTP Health-Check mit curl
if curl -s "http://$HOST:$PORT/health" > /tmp/health_response; then
    echo "Health check successful:"
    cat /tmp/health_response | sed 's/^/  /'

Falls curl verfügbar ist, wird der /health Endpunkt abgefragt der detaillierte Service-Informationen in JSON-Format zurückgibt. Die Response wird formatiert ausgegeben um Status, Version und Features anzuzeigen.

# Fallback: Port-Check mit netcat
else
    if nc -z "$HOST" "$PORT" 2>/dev/null; then
        echo "Port $PORT is listening on $HOST"

Als Fallback nutzt das Script nc (netcat) für einen einfachen Port-Check falls curl nicht verfügbar ist. Diese Strategie stellt sicher dass das Script auch in minimalen Umgebungen funktioniert.

Health-Check-Strategien verstehen

Die zweistufige Validierung deckt verschiedene Fehlerszenarien ab:

HTTP-Level-Validierung (Primär)

Der /health Endpunkt testet die gesamte furt-Applikations-Pipeline:

  • Lua-Runtime: Script-Loading und Execution
  • HTTP-Server: Request-Parsing und Response-Generation
  • Konfiguration: Config-File-Loading und Validation
  • Features: SMTP-Integration und Auth-System-Status

Diese umfassende Validierung erkennt Probleme die ein einfacher Port-Check übersehen würde.

Port-Level-Validierung (Fallback)

Der netcat-basierte Port-Check testet nur die grundlegende Netzwerk-Erreichbarkeit:

  • Socket-Binding: Service lauscht auf konfigurierten Port
  • Firewall-Status: Keine Blockierung durch lokale Firewall
  • Process-Status: Haupt-Process läuft noch

Dieser Minimal-Check ist nützlich für Debug-Szenarien und Umgebungen ohne HTTP-Tools.

Script praktisch nutzen

Als Teil der orchestrierten Installation

# Automatischer Aufruf durch install.sh
./install.sh
# [INFO] Phase 6: Running health check... OK

Das Orchestrator-Script ruft health-check.sh als finalen Schritt auf um sicherzustellen dass die komplette Installation funktioniert.

Manuelle Service-Validierung

# Standard Health-Check
./scripts/health-check.sh

Ausgabe bei erfolgreicher Installation:

Checking furt health at 127.0.0.1:7811...
Health check successful:
  {"status":"healthy","service":"furt-lua","version":"0.1.0","timestamp":1699123456}

Remote-Server-Monitoring

# Health-Check auf externem Server
./scripts/health-check.sh --host 192.168.1.100 --port 7811

Diese Flexibilität ermöglicht Monitoring von furt-Installationen auf verschiedenen Servern.

Integration in Monitoring-Systeme

# Nagios/Icinga Integration
if ./scripts/health-check.sh --host $HOSTNAME --port 7811; then
    echo "FURT OK"
    exit 0
else
    echo "FURT CRITICAL"
    exit 2
fi

Installation validieren

Das Script zeigt verschiedene Ausgabe-Formate je nach Erfolg und verfügbaren Tools:

Erfolgreiche HTTP-Validierung

Checking furt health at 127.0.0.1:7811...
Health check successful:
  {"status":"healthy","service":"furt-lua","version":"0.1.0","content_hash":"abc123","timestamp":1699123456,"features":{"smtp_configured":true,"auth_enabled":true}}

Die JSON-Response enthält Service-Metadaten die detaillierte Diagnose ermöglichen.

Erfolgreiche Port-Validierung (Fallback)

Checking furt health at 127.0.0.1:7811...
Warning: curl not available, using basic port check
Port 7811 is listening on 127.0.0.1

Diese Ausgabe zeigt dass der Service läuft aber HTTP-Validierung nicht möglich war.

Fehlgeschlagene Validierung

Checking furt health at 127.0.0.1:7811...
Health check failed - service not responding

Das Script beendet sich mit Exit-Code 1 bei Fehlern für Integration in automatisierte Workflows.

Troubleshooting

"Health check failed - service not responding"

Health check failed - service not responding

Der Service ist nicht erreichbar - mehrere mögliche Ursachen:

# Service-Status prüfen
# OpenBSD
rcctl check furt

# Linux
systemctl status furt

# Logs analysieren
tail -f /var/log/furt/furt.log

"curl not available, using basic port check"

Warning: curl not available, using basic port check

Das ist eine normale Warnung - die Port-Validierung ist ausreichend aber weniger detailliert:

# curl installieren für detaillierte Checks
# OpenBSD
pkg_add curl

# Debian
apt install curl

# Arch
pacman -S curl

"Port 7811 is not accessible"

Port 7811 is not accessible on 127.0.0.1

Der Service läuft nicht oder bindet an falscher Adresse:

# Process-Liste prüfen
ps aux | grep furt

# Port-Binding prüfen
netstat -an | grep 7811

# Config-Datei validieren
./scripts/validate-config.sh

Host/Port-Parameter werden ignoriert

Das Script verwendet Standardwerte falls Parameter nicht erkannt werden:

# Korrekte Syntax
./scripts/health-check.sh --host 192.168.1.10 --port 8080

# Nicht:
./scripts/health-check.sh 192.168.1.10 8080

Script erweitern

Detailliertere JSON-Response-Analyse

# JSON-Response parsen mit jq
if command -v jq >/dev/null 2>&1; then
    VERSION=$(echo "$RESPONSE" | jq -r '.version')
    STATUS=$(echo "$RESPONSE" | jq -r '.status')
    echo "Service: furt-lua $VERSION ($STATUS)"
else
    echo "$RESPONSE"
fi

Timeout-Konfiguration

# Längere Timeouts für langsamere Server
TIMEOUT="${TIMEOUT:-5}"
curl --max-time "$TIMEOUT" -s "http://$HOST:$PORT/health"

Multiple-Health-Check-Endpunkte

# Verschiedene Endpunkte testen
ENDPOINTS="/health /version /metrics"
for endpoint in $ENDPOINTS; do
    echo "Testing $endpoint..."
    curl -s "http://$HOST:$PORT$endpoint" || echo "  Failed"
done

Colored Output für bessere Lesbarkeit

# Grün für Erfolg, Rot für Fehler
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color

echo -e "${GREEN}Health check successful:${NC}"
echo -e "${RED}Health check failed${NC}"

Integration mit systemd/rcctl

# Service-Status in Health-Check einbeziehen
if [ "$(uname)" = "OpenBSD" ]; then
    if ! rcctl check furt >/dev/null 2>&1; then
        echo "Service not running according to rcctl"
        exit 1
    fi
else
    if ! systemctl is-active furt >/dev/null 2>&1; then
        echo "Service not active according to systemctl"
        exit 1
    fi
fi

Das health-check.sh Script ist der Schlussstein des modularen furt-Installationssystems und stellt sicher dass alle vorherigen Installationsschritte erfolgreich waren und der Service vollständig betriebsbereit ist.