Überwachung scheitert selten an fehlenden Werkzeugen. Sie scheitert an zwei Enden: Es wird zu viel gemessen, sodass niemand mehr hinsieht, oder es wird von innen gemessen, sodass ein Ausfall der Maschine auch die Messung mitnimmt.
Ein einzelner Server braucht keine Messplattform. Er braucht sieben Prüfungen, von denen mindestens eine von außen kommt, und einen Weg, auf dem der Alarm ankommt. Das ist an einem Nachmittag eingerichtet und schlägt jedes Dashboard, das niemand öffnet.
Die sieben#
| # | Prüfung | Von wo | Schwelle |
|---|---|---|---|
| 1 | Antwortet die Seite? | außen | 2 Fehlversuche in Folge |
| 2 | Zertifikat noch gültig? | außen | < 10 Tage Restlaufzeit |
| 3 | Platte voll? | innen | > 85 % oder < 2 GB frei |
| 4 | Laufen die Dienste? | innen | Dienst nicht active |
| 5 | Sicherung gelaufen? | außen (Totmannschalter) | Meldung bleibt aus |
| 6 | Sicherheitsupdates offen? | innen | > 7 Tage nicht eingespielt |
| 7 | Ausgehender Verkehr auffällig? | innen | Verbindung auf gesperrten Port |
Die drei Prüfungen von außen sind die wichtigen: Sie funktionieren auch dann noch, wenn die Maschine nicht mehr antwortet.
Klein anfangen, ohne zusätzliche Software#
# 3. Platte
df -h --output=pcent,target / /var | tail -n +2
# 4. Dienste, die laufen sollen
systemctl is-active nginx postgresql docker || echo "Dienst fehlt"
# 6. Offene Sicherheitsupdates
apt-get -s -o Debug::NoLocking=true upgrade | grep -ci '^Inst.*security'
# 7. Ausgehende Verbindungen auf ungewöhnliche Ziele
ss -tunp state established | awk 'NR>1 {print $5}' | cut -d: -f1 | sort -u
Ein Skript, das diese vier Punkte prüft und nur bei Abweichung eine Meldung schickt, deckt die Innenseite ab:
#!/usr/bin/env bash
# /usr/local/sbin/wachhund.sh — schweigt im Normalfall
set -uo pipefail
meldungen=()
voll=$(df --output=pcent / | tail -1 | tr -dc '0-9')
[ "$voll" -gt 85 ] && meldungen+=("Platte / bei ${voll}%")
for d in nginx postgresql; do
systemctl is-active --quiet "$d" || meldungen+=("Dienst $d ist nicht aktiv")
done
offen=$(apt-get -s -o Debug::NoLocking=true upgrade 2>/dev/null | grep -ci '^Inst.*security')
[ "$offen" -gt 0 ] && meldungen+=("$offen Sicherheitsupdates offen")
[ ${#meldungen[@]} -eq 0 ] && exit 0
printf '%s\n' "${meldungen[@]}" | mail -s "Befund auf $(hostname -s)" [email protected]
Die Außensicht braucht einen zweiten Ort#
Erreichbarkeit, Zertifikatsablauf und der Totmannschalter für die Sicherung gehören auf ein System, das nicht mitausfällt: eine kleine VM bei einem anderen Anbieter oder ein Dienst, der genau das anbietet. Wer beide Seiten auf derselben Maschine betreibt, misst die Verfügbarkeit einer Maschine mit sich selbst.
Warum das nicht theoretisch ist, steht in Alarme, die nachts ankommen: Der unangenehmste Zustand ist Stille, die wie Ruhe aussieht.
Ein Alarm bei 80 % Plattenfüllung ist auf einer 20-GB-Platte sinnvoll und auf einer 4-TB-Platte Unsinn, dort sind 20 % noch 800 GB Luft. Sinnvoller ist die Frage: Wie lange dauert es bei aktuellem Wachstum, bis es eng wird? Wer statt Prozent die verbleibenden Tage alarmiert, bekommt eine Meldung, auf die man reagieren kann.
Was man sich sparen kann#
- CPU-Spitzen. Ein Server, der arbeitet, ist kein Befund.
- Arbeitsspeicherauslastung nahe 100 %. Linux nutzt freien Speicher als Zwischenspeicher; die interessante Zahl ist
available, nichtused. - Jede erfolgreiche Sicherung. Erfolg ist kein Ereignis; das Ausbleiben ist eins.
- Prozessanzahl, Netzdurchsatz, Lastdurchschnitt, interessant bei der Fehlersuche, nutzlos als Alarm.
Der Test, den fast niemand macht#
Einen Dienst absichtlich stoppen und die Uhr laufen lassen: Wann kommt die Meldung, und kommt sie auf dem Gerät an, das man abends dabei hat?
sudo systemctl stop nginx # Uhrzeit notieren
# … warten, Meldung abwarten …
sudo systemctl start nginx
Wenn nach fünfzehn Minuten nichts kommt, ist die Überwachung ein Dashboard, kein Alarm und der eigentliche Befund steht in Einen Einbruch erkennen: Zeit bis zur Entdeckung entscheidet über die Kosten.
Geschrieben aus dem laufenden Betrieb: MRMedia betreibt eigene Hosts, Kundendienste und deren Härtung in der EU. Eine veraltete Anleitung ist hier ein Sicherheitsproblem, kein Schönheitsfehler. Korrekturen bitte über Discord.