rz_diagnose.sh – RZ Admin Diagnose-Script
Automatisches System-Diagnose-Script für Rechenzentrum-Administratoren.
Prüft 8 kritische Systembereiche und gibt farbigen, strukturierten Output.
Installation
# Script kopieren und ausführbar machen
cp rz_diagnose.sh /usr/local/sbin/rz_diagnose.sh
chmod +x /usr/local/sbin/rz_diagnose.sh
# Optional: Als symlink global verfügbar
ln -s /usr/local/sbin/rz_diagnose.sh /usr/local/bin/rz_diagnose
Voraussetzungen:
- bash >= 4.0
- bc (float-Arithmetik) – meist vorinstalliert
- ps, df, awk, grep – Standardtools
Empfohlene Zusatzpakete:
# Debian/Ubuntu
apt install sysstat fail2ban bc
# RHEL/Rocky
dnf install sysstat fail2ban bc
# Arch
pacman -S sysstat fail2ban bc
Flags
| Flag | Kurz | Beschreibung |
|---|---|---|
--quiet |
-q |
Nur Warnungen und kritische Meldungen |
--json |
-j |
JSON-Output für Monitoring-Integration |
--check NAME |
-c |
Einzelner Check |
--help |
-h |
Hilfe anzeigen |
Verfügbare Check-Namen: disk load mysql ssh io mem fail2ban eol
Verwendung
# Alle Checks (Standard)
rz_diagnose.sh
# Nur Probleme anzeigen
rz_diagnose.sh --quiet
# JSON für Zabbix/Nagios/Checkmk
rz_diagnose.sh --json
# Einzelner Check
rz_diagnose.sh --check disk
rz_diagnose.sh --check mysql
rz_diagnose.sh --check ssh
# In Cron (täglich, nur bei Problemen mailen)
0 6 * * * /usr/local/sbin/rz_diagnose.sh --quiet 2>&1 | mail -s "RZ Diagnose $(hostname)" admin@example.com
Exit-Codes
| Code | Bedeutung |
|---|---|
0 |
Alles OK |
1 |
Mindestens eine Warnung |
2 |
Mindestens ein kritischer Befund |
Geprüfte Bereiche
1. DISK – /var Auslastung
- Warnung bei >80%, Kritisch bei >90%
- Bei Treffer: Top-10 Verzeichnisse nach Größe
2. LOAD – CPU-Last
- Warnung bei >1.5x CPU-Kerne, Kritisch bei >3x
%iowaitviavmstatoderiostatseparat angezeigt
3. MYSQL – Datenbankstatus
- Nur wenn MySQL/MariaDB läuft
- Queries >30s aus PROCESSLIST
Threads_connectedvsmax_connections- Slow Query Log Status
Sicherheit: MySQL-Zugriff ausschließlich via Socket-Auth.
Kein Passwort im Script. Für passwortlosen Zugriff~/.my.cnfanlegen:
ini [client] user=monitoring password=sicher123
4. SSH – Angriffe & Logins
- Fehlgeschlagene Logins letzte Stunde: Warn >100, Kritisch >1000
- Top-5 Angreifer-IPs
- Erfolgreiche Logins (immer kritisch angezeigt zur manuellen Prüfung)
- fail2ban-Status inkl. gebannte IPs
5. IO – Festplatten-Auslastung
iostat -dx(sysstat erforderlich)- Warnung bei
%util>80%
6. MEMORY – RAM & Swap
- Swap-Nutzung: Warnung >20%, Kritisch >60%
- Top-5 RAM-Verbraucher via
ps
7. FAIL2BAN – Einbruchsschutz
- Installiert und aktiv?
- Alle Jails mit Anzahl gebannter IPs
8. EOL – End-of-Life Versionen
| Software | EOL-Datum |
|---|---|
| PHP 7.2 | November 2020 |
| PHP 7.4 | November 2022 |
| PHP 8.0 | November 2023 |
| PHP 8.1 | Dezember 2024 |
| MySQL 5.7 | Oktober 2023 |
| MySQL 8.0 | April 2026 (bald) |
Distro-Unterstützung
| System | Log-Quelle | Init-System |
|---|---|---|
| Debian/Ubuntu | auth.log, journalctl |
systemd |
| RHEL/Rocky/CentOS | /var/log/secure, journalctl |
systemd |
| Arch Linux | journalctl |
systemd |
| FreeBSD | /var/log/auth.log, service |
RC (kein systemctl/journalctl) |
Beispiel-Output
RZ-Diagnose – webserver01 – 2026-03-28 10:15:42
Distro: Ubuntu 22.04.3 LTS | Familie: debian
── DISK – /var Auslastung ──
✓ /var Auslastung: 34% – OK
── LOAD – CPU-Last ──
ℹ CPU-Kerne: 4 | Load: 0.42 / 0.38 / 0.31 (1/5/15 min)
✓ Load 0.42 – OK (Kerne: 4, Warn-Schwelle: 6.0)
ℹ %iowait: 1%
── MYSQL – Datenbankstatus ──
ℹ MySQL/MariaDB läuft
✓ Keine Queries >30s
ℹ Verbindungen: 12 / 151 (7%)
✓ Slow Query Log: aktiv
── SSH – Angriffe & Logins ──
⚠ Fehlgeschlagene SSH-Logins (letzte Stunde): 247 – WARNUNG
ℹ Top-5 Angreifer-IPs:
ℹ 89 203.0.113.42
ℹ 71 198.51.100.7
ℹ 45 192.0.2.99
ℹ 23 203.0.113.11
ℹ 19 198.51.100.44
✓ Erfolgreiche Logins (letzte Stunde): 0 – OK
✓ fail2ban: aktiv | sshd gebannte IPs: 14
── IO – Festplatten-Auslastung ──
✓ sda: %util=3.2% – OK
✓ sdb: %util=0.8% – OK
── MEMORY – RAM & Swap ──
✓ Swap-Nutzung: 4% – OK
ℹ Top-5 RAM-Verbraucher:
ℹ mysql 12.3% /usr/sbin/mysqld
ℹ php-fpm 4.1% php-fpm: pool www
ℹ nginx 1.2% nginx: worker process
ℹ redis 0.8% /usr/bin/redis-server
ℹ sshd 0.1% sshd: /usr/sbin/sshd
── FAIL2BAN – Einbruchsschutz ──
✓ fail2ban: aktiv
ℹ Aktive Jails:
ℹ sshd: 14 gebannte IP(s)
ℹ nginx-http-auth: 2 gebannte IP(s)
── EOL – End-of-Life Versionen ──
ℹ PHP-Version: 7.4.33
✗ PHP 7.4.33 – EOL seit November 2022!
ℹ MySQL-Version: 8.0.35
⚠ MySQL 8.0 – EOL April 2026 (bald)
════════════════════════════════════════
ZUSAMMENFASSUNG – webserver01 – 2026-03-28 10:15:44
════════════════════════════════════════
Checks gesamt : 8
OK : 5
Warnungen : 2
Kritisch : 1
Gefundene Probleme:
WARN SSH: 247 fehlgeschlagene Logins in 1h
WARN EOL: MySQL 8.0.35 (EOL Apr 2026)
CRIT EOL: PHP 7.4.33 (EOL Nov 2022)
════════════════════════════════════════
JSON-Output (für Monitoring)
rz_diagnose.sh --json
{
"timestamp": "2026-03-28T09:15:42Z",
"hostname": "webserver01",
"checks": {
"disk": {"status": "ok", "message": "/var 34% voll", "details": [...]},
"load": {"status": "ok", "message": "load1=0.42 cores=4", "details": [...]},
"mysql": {"status": "ok", "message": "MySQL OK", "details": [...]},
"ssh": {"status": "info", "message": "failed=247 success=0", "details": [...]},
"io": {"status": "ok", "message": "IO unauffällig", "details": [...]},
"memory": {"status": "ok", "message": "Memory OK", "details": [...]},
"fail2ban": {"status": "ok", "message": "fail2ban aktiv", "details": [...]},
"eol": {"status": "critical", "message": "EOL-Versionen gefunden", "details": [...]}
},
"summary": {
"total": 8,
"ok": 5,
"warn": 2,
"crit": 1
}
}
Monitoring-Integration
Nagios / Icinga / Checkmk
# check_command in commands.cfg
define command {
command_name check_rz_diagnose
command_line /usr/local/sbin/rz_diagnose.sh --quiet
}
Exit-Code 0/1/2 entspricht Nagios OK/WARNING/CRITICAL.
Zabbix (UserParameter)
# zabbix_agentd.conf
UserParameter=rz.diagnose.json,/usr/local/sbin/rz_diagnose.sh --json
UserParameter=rz.diagnose.exitcode,/usr/local/sbin/rz_diagnose.sh --quiet; echo $?
Cron-Job
# Täglich um 06:00, nur bei Problemen mailen
0 6 * * * /usr/local/sbin/rz_diagnose.sh --quiet && true || \
/usr/local/sbin/rz_diagnose.sh --quiet 2>&1 | \
mail -s "[$(hostname)] RZ Diagnose: Probleme gefunden" admin@example.com
Sicherheitshinweise
- Nur lesende Befehle – keine Systemveränderungen
- MySQL ohne Passwort – Socket-Auth via
~/.my.cnfoder root-Socket - Kein sudo erforderlich – einige Checks liefern bei fehlenden Rechten weniger Detail
- Für vollständige SSH-Log-Auswertung: Script als
rootoder Mitglied deradm-Gruppe ausführen
Erstellt für den ozmai #klassiker – RZ-Admin Toolbox