| .. | ||
| Dokumentation.md | ||
| isntall.txt | ||
| Licence | ||
| QUICKSTART.md | ||
| README.md | ||
| tms_backup_check.py | ||
| tsm_backup_check.py | ||
| tsm_backups.py | ||
TSM Backup Monitoring für CheckMK
Ein vollständiges CheckMK-Plugin zur Überwachung von IBM Spectrum Protect (TSM) Backups mit intelligenter Backup-Typ-Erkennung, umfassenden Labels und flexiblen Schwellwerten.
📋 Inhaltsverzeichnis
✨ Features
Kernfunktionen
- Umfassende Backup-Typ-Erkennung: Unterstützung für 18+ Backup-Typen
- Flexible Labels: Umfassende Service-Labels für erweiterte Filterung und Reporting
- Typ-spezifische Schwellwerte: Individuelle Warn- und Kritisch-Schwellen für verschiedene Backup-Typen
- Redundanz-Support: Normalisierung von RRZ*/NFRZ* Node-Namen
- Aggregierte Überwachung: Pro-Node-Aggregierung mehrerer Backup-Jobs
- Intelligentes Error-Handling: Tolerantes vs. striktes Verhalten je nach Backup-Typ
Unterstützte Backup-Typen
Datenbanken (strikte Überwachung)
- MSSQL (26h/48h)
- SAP HANA (26h/48h)
- Oracle (26h/48h)
- DB2 (26h/48h)
- MySQL/MariaDB (26h/48h)
- PostgreSQL (26h/48h)
- Sybase (26h/48h)
- MongoDB (26h/48h)
Dateisysteme (tolerante Überwachung)
- FILE (36h/72h)
- SCALE (36h/72h)
- DM (36h/72h)
- Datacenter (36h/72h)
Virtualisierung (tolerante Überwachung)
- Virtual/VMware (36h/72h)
- Hyper-V (36h/72h)
Applikationen
- Mail/Exchange (26h/48h)
- Transaction Logs (4h/8h)
🔧 Anforderungen
CheckMK Server
- CheckMK Version: 2.3.0p40 oder höher
- Python 3.8+
- Zugriff auf
/omd/sites/<site>/local/lib/python3/cmk_addons/
Überwachte Hosts
- Python 3.6+
- Lesezugriff auf TSM CSV-Export-Verzeichnis
- CheckMK Agent installiert
TSM Server
- CSV-Export der Backup-Statistiken
- Export-Format:
YYYY-MM-DD HH:MM:SS,<field>,NODE_NAME,SCHEDULE,STATUS
📦 Installation
Schritt 1: Agent-Plugin installieren
Das Agent-Plugin muss auf jedem Host installiert werden, der TSM-Backups überwachen soll.
# Als root auf dem überwachten Host
cd /usr/lib/check_mk_agent/plugins
# Plugin herunterladen oder kopieren
wget https://your-repo/tsm_backups_agent.py -O tsm_backups
# ODER
scp user@server:tsm_backups_agent.py /usr/lib/check_mk_agent/plugins/tsm_backups
# Ausführbar machen
chmod +x /usr/lib/check_mk_agent/plugins/tsm_backups
# Test
./tsm_backups
Erwartete Ausgabe:
<<<tsm_backups:sep(0)>>>
{"SERVER_MSSQL": {"statuses": ["Completed"], "schedules": ["DAILY_FULL"], "last": 1736693420, "count": 1}, ...}
Schritt 2: CSV-Verzeichnis vorbereiten
# CSV-Verzeichnis erstellen
mkdir -p /mnt/CMK_TSM
chmod 755 /mnt/CMK_TSM
# TSM-CSV-Dateien bereitstellen
# Option A: NFS-Mount vom TSM Server
mount -t nfs tsm-server:/exports/backup-stats /mnt/CMK_TSM
# Option B: Regelmäßiger SCP/Rsync
# Crontab-Eintrag:
*/15 * * * * rsync -az tsm-server:/path/to/*.CSV /mnt/CMK_TSM/
Erwartete CSV-Struktur:
/mnt/CMK_TSM/
├── TSM_BACKUP_SCHED_24H.CSV
├── TSM_DB_SCHED_24H.CSV
└── TSM_FILE_SCHED_24H.CSV
Schritt 3: Check-Plugin installieren
Das Check-Plugin wird auf dem CheckMK Server installiert.
# Als Site-User
OM=/omd/sites/monitoring
cd $OM
# Plugin-Verzeichnis erstellen
mkdir -p local/lib/python3/cmk_addons/plugins/tsm/agent_based
# Plugin kopieren
cp tsm_backups.py local/lib/python3/cmk_addons/plugins/tsm/agent_based/
# Rechte setzen
chmod 644 local/lib/python3/cmk_addons/plugins/tsm/agent_based/tsm_backups.py
# CheckMK Cache leeren
cmk -R
Schritt 4: Service Discovery
# Service Discovery für einen Host
cmk -II hostname
# Bulk Discovery für alle Hosts
cmk -II --all
# WebUI: Setup > Hosts > <Host> > Service Discovery > Full Scan
⚙️ Konfiguration
Schwellwerte anpassen
Die Schwellwerte können direkt im Check-Plugin angepasst werden:
Datei: local/lib/python3/cmk_addons/plugins/tsm/agent_based/tsm_backups.py
THRESHOLDS = {
"log": {"warn": 4 * 3600, "crit": 8 * 3600}, # 4h/8h
"mssql": {"warn": 26 * 3600, "crit": 48 * 3600}, # 26h/48h
# ... weitere Typen ...
"default": {"warn": 26 * 3600, "crit": 48 * 3600},
}
Neue Backup-Typen hinzufügen
Szenario: Ein neuer Typ "SAPASE" soll unterstützt werden.
Schritt 1: Typ zur known_types Liste hinzufügen
# In extract_backup_type() Funktion
known_types = [
'MSSQL', 'HANA', 'FILE', 'ORACLE', 'DB2', 'SCALE', 'DM',
'DATACENTER', 'VIRTUAL', 'MAIL', 'MYSQL', 'POSTGRES',
'MARIADB', 'EXCHANGE', 'VMWARE', 'HYPERV', 'SYBASE', 'MONGODB',
'SAPASE', # NEU
]
Schritt 2: Schwellwerte definieren (optional)
THRESHOLDS = {
# ... bestehende ...
"sapase": {"warn": 26 * 3600, "crit": 48 * 3600},
}
Schritt 3: Kategorie zuweisen (optional)
DATABASE_TYPES = {
'mssql', 'hana', 'db2', 'oracle', 'mysql',
'postgres', 'mariadb', 'sybase', 'mongodb',
'sapase', # NEU
}
Nach Änderungen:
cmk -R
cmk -II --all
Tolerantes Error-Handling konfigurieren
Backup-Typen mit tolerantem Verhalten (Failed → WARNING statt CRITICAL):
TOLERANT_TYPES = {
'file', 'virtual', 'scale', 'dm', 'datacenter',
'vmware', 'hyperv', 'mail', 'exchange',
'custom_tolerant_type' # NEU
}
CSV-Verzeichnis ändern
Im Agent-Plugin (/usr/lib/check_mk_agent/plugins/tsm_backups):
CSV_DIR = Path("/mnt/CMK_TSM") # Hier anpassen
🚀 Verwendung
Service-Labels nutzen
Jeder TSM-Backup-Service erhält automatisch folgende Labels:
| Label | Werte | Beschreibung |
|---|---|---|
backup_type |
mssql, hana, file, ... |
Erkannter Backup-Typ |
backup_category |
database, virtualization, filesystem, application, other |
Kategorie |
backup_system |
tsm |
Backup-System |
frequency |
hourly, daily, weekly, monthly |
Backup-Frequenz |
backup_level |
log, full, incremental, differential |
Backup-Level |
error_handling |
tolerant, strict |
Fehlerbehandlung |
node_name |
Original Node-Name | TSM-Node |
Beispiele: Label-basierte Filterung
Views erstellen
CheckMK GUI:
Setup > General > Custom views > Create new view
Filter-Beispiele:
-
Alle Datenbank-Backups:
Service labels: backup_category = database -
Alle fehlgeschlagenen strikten Backups:
State: CRIT+Service labels: error_handling = strict -
Alle MSSQL-Backups mit täglicher Frequenz:
Service labels: backup_type = mssql AND frequency = daily
Business Intelligence (BI)
# BI-Aggregation: Alle DB-Backups OK?
{
"type": "bi_aggregation",
"title": "Database Backups",
"filter": {
"service_labels": {
"backup_category": "database"
}
}
}
Status-Bewertungslogik
| Bedingung | Error Handling | Ergebnis |
|---|---|---|
| ≥ 1x Completed | - | OK ✅ |
| Only Pending/Started (<2h) | - | OK ✅ |
| Only Pending/Started (>2h) | - | WARN ⚠️ |
| Failed/Missed | Tolerant | WARN ⚠️ |
| Failed/Missed | Strict | CRIT 🔴 |
| Age > Threshold | - | WARN/CRIT ⚠️🔴 |
🏗️ Architektur
Komponenten-Übersicht
┌─────────────────────────────────────────────────────────┐
│ TSM Server │
│ ┌────────────────────────────────────────────────┐ │
│ │ Backup Jobs → CSV Export │ │
│ │ (via TSM Queries oder Export-Scripts) │ │
│ └────────────────┬───────────────────────────────┘ │
└───────────────────┼──────────────────────────────────────┘
│ CSV-Dateien
│ (z.B. via NFS, SCP, Rsync)
▼
┌─────────────────────────────────────────────────────────┐
│ Überwachter Host │
│ ┌────────────────────────────────────────────────┐ │
│ │ /mnt/CMK_TSM/*.CSV │ │
│ └────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌────────────────▼───────────────────────────────┐ │
│ │ Agent Plugin: tsm_backups │ │
│ │ - Liest CSV-Dateien │ │
│ │ - Normalisiert Node-Namen │ │
│ │ - Aggregiert pro Node │ │
│ │ - Gibt JSON aus │ │
│ └────────────────┬───────────────────────────────┘ │
└───────────────────┼──────────────────────────────────────┘
│ JSON via CheckMK Agent
▼
┌─────────────────────────────────────────────────────────┐
│ CheckMK Server │
│ ┌────────────────────────────────────────────────┐ │
│ │ Check Plugin: tsm_backups │ │
│ │ - Parsed JSON │ │
│ │ - Erstellt Services mit Labels │ │
│ │ - Bewertet Status │ │
│ │ - Prüft Schwellwerte │ │
│ │ - Erzeugt Metriken │ │
│ └────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌────────────────▼───────────────────────────────┐ │
│ │ CheckMK Services │ │
│ │ - TSM Backup SERVER_MSSQL │ │
│ │ - TSM Backup VM_HYPERV_01 │ │
│ │ - ... │ │
│ └────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
Datenfluss
- TSM Server: Exportiert Backup-Statistiken als CSV
- Host: Agent-Plugin liest CSV, aggregiert und normalisiert Daten
- CheckMK: Check-Plugin empfängt JSON, erstellt Services, bewertet Status
- Output: Services mit Labels, Metriken, Status
Node-Normalisierung
Problem: Redundante TSM-Server-Nodes
Beispiel:
RRZ01_MYSERVER_MSSQLRRZ02_MYSERVER_MSSQLNFRZ01_MYSERVER_MSSQL
Lösung: Normalisierung entfernt RRZ*/NFRZ*-Präfixe
Ergebnis: Ein Service MYSERVER_MSSQL aggregiert alle Nodes
🔍 Troubleshooting
Problem: Keine Services gefunden
Diagnose:
# Agent-Ausgabe prüfen
check_mk_agent | grep -A 20 "<<<tsm_backups"
# Sollte JSON zurückgeben
<<<tsm_backups:sep(0)>>>
{"NODE1": {...}, "NODE2": {...}}
Lösungen:
- CSV-Verzeichnis
/mnt/CMK_TSMexistiert? - CSV-Dateien vorhanden? (
ls -lh /mnt/CMK_TSM/*.CSV) - Agent-Plugin ausführbar? (
ls -l /usr/lib/check_mk_agent/plugins/tsm_backups) - Manuell testen:
/usr/lib/check_mk_agent/plugins/tsm_backups
Problem: Services bleiben UNKNOWN
Diagnose:
# Check-Plugin testen
cmk -nv --debug hostname | grep "TSM Backup"
Lösungen:
- Check-Plugin korrekt installiert?
- Plugin-Cache löschen:
cmk -R - Discovery erneut:
cmk -II hostname
Problem: Falsche Backup-Typen erkannt
Node-Namen-Konvention überprüfen:
✅ KORREKT:
- SERVER_MSSQL
- DATABASE_HANA_01
- FILESERVER_FILE
- VM_HYPERV_123
❌ FALSCH:
- MSSQL (zu kurz)
- SERVER (kein Typ)
- SERVER_12345 (Typ unklar)
Lösung: Node-Namen-Schema anpassen oder extract_backup_type() erweitern
Problem: CSV-Dateien werden nicht gelesen
CSV-Format prüfen:
head -n 5 /mnt/CMK_TSM/TSM_BACKUP_SCHED_24H.CSV
Erwartetes Format:
2026-01-12 08:00:00,FIELD,SERVER_MSSQL,DAILY_FULL,Completed
2026-01-12 09:15:00,FIELD,DATABASE_HANA,HOURLY_LOG,Completed
Spalten:
- Timestamp (
YYYY-MM-DD HH:MM:SS) - Beliebiges Feld
- Node-Name
- Schedule-Name
- Status
Problem: Logs analysieren
# CheckMK-Log
tail -f /omd/sites/monitoring/var/log/cmc.log | grep tsm
# Agent-Plugin debuggen
/usr/lib/check_mk_agent/plugins/tsm_backups 2>&1 | tee /tmp/tsm_debug.log
📊 Metriken
Erzeugte Metriken
| Metrik | Beschreibung | Einheit | Schwellwerte |
|---|---|---|---|
backup_age |
Zeit seit letztem Backup | Sekunden | Typ-spezifisch |
backup_jobs |
Anzahl Backup-Jobs | Count | - |
Grafana-Integration
Beispiel-Query (InfluxDB):
SELECT mean("backup_age")
FROM "tsm_backups"
WHERE "backup_type" = 'mssql'
AND time > now() - 7d
GROUP BY time(1h), "node_name"
🔄 Changelog
Version 5.0 (2026-01-12)
- ✨ Dynamische Backup-Typ-Erkennung: Keine feste Liste mehr nötig
- ✨ Backup-Kategorien: Zusätzliches Label
backup_category - ✨ Erweiterte Kommentierung: Vollständige Docstrings
- ✨ Neue Typen: PostgreSQL, MariaDB, MongoDB
- 🐛 Bugfix: ServiceLabel API für CheckMK 2.3.0p40
Version 4.0 (2026-01-10)
- ✨ ServiceLabel API-Kompatibilität mit CheckMK 2.3.0p40
- 📝 Erweiterte Dokumentation
Version 3.0 (2025-12-15)
- ✨ Node-Normalisierung für Redundanz
- ✨ Aggregation pro logischem Node
- 🔧 Typ-spezifische Schwellwerte
Version 2.0 (2025-11-20)
- ✨ Tolerantes Error-Handling
- ✨ Service-Labels
Version 1.0 (2025-11-01)
- 🎉 Initiales Release
📝 Lizenz
MIT License - Siehe LICENSE Datei
👤 Autor
Marius Gielnik
IT Product Owner - CheckMK Monitoring
GC-Gruppe (Cordes und Gräfe KG)
🤝 Support
- Issues: GitHub Issues
- Fragen: CheckMK Community Forum
- Email: [deine-email]@example.com
📚 Weiterführende Links
Letzte Aktualisierung: 2026-01-12
Version: 4.1