Didactum Monitoring-Geräte und Sensoren – Integration in Checkmk
Diese Anleitung beschreibt die vollständige Integration von Didactum Monitoring-Geräten in Checkmk (Raw Edition, Standard Edition und Managed Services Edition). Ziel ist die zentrale Überwachung aller angeschlossenen Sensoren – Temperatur, Luftfeuchtigkeit, Leckage, Spannung, Türkontakte und weitere – über SNMP, inklusive automatischer Service-Erkennung, Alarmierung und Trendgrafiken.
1. Grundlagen und Architektur
Checkmk ist eine umfassende Monitoring-Plattform mit starkem Fokus auf automatische Konfiguration. Die Service Discovery erkennt viele Services automatisch – bei SNMP-Geräten wie dem Didactum durch einen Walk der Gerätedaten. Manuelle Konfiguration ist nur für gerätespezifische OIDs erforderlich, die nicht in den Standard-Checkmk-Plugins enthalten sind.
Checkmk-Editionen im Vergleich
| Edition | Kürzel | Besonderheit |
|---|---|---|
| Raw Edition | CRE | Kostenlos, Open Source, Nagios-Core, keine Agenten-Bakery |
| Cloud Edition | CCE | SaaS-optimiert, CMC (Checkmk Micro Core) |
| Standard Edition | CSE | Kommerziell, CMC, Agenten-Bakery, Business Intelligence |
| Managed Services Edition | CME | Multi-Mandanten, für MSPs und große Umgebungen |
Diese Anleitung gilt für alle Editionen. Abweichungen werden explizit gekennzeichnet.
Verarbeitungsablauf für SNMP-Geräte
- Host-Erstellung: Das Didactum-Gerät wird als Host mit SNMP-Parametern angelegt.
- SNMP-Walk: Checkmk führt einen vollständigen SNMP Walk durch und speichert die Ergebnisse im Cache.
- Service Discovery: Checkmk erkennt anhand der Daten automatisch verfügbare Services.
- Aktive Checks: Der Checkmk-Agent fragt in konfigurierten Intervallen die SNMP-OIDs ab.
- Alarmierung: Bei Schwellwertüberschreitungen werden Benachrichtigungen ausgelöst.
Wichtige Verzeichnisse und Dateien
| Pfad | Inhalt |
|---|---|
| /omd/sites/<site>/ | Site-Verzeichnis (alles unterhalb gehört zur Site) |
| /omd/sites/<site>/etc/check_mk/ | Konfigurationsdateien der Site |
| /omd/sites/<site>/local/share/check_mk/checks/ | Eigene/benutzerdefinierte Check-Plugins |
| /omd/sites/<site>/local/share/check_mk/mibs/ | Eigene MIB-Dateien |
| /omd/sites/<site>/var/check_mk/snmp_cache/ | SNMP-Walk-Cache-Dateien |
| /omd/sites/<site>/var/log/ | Log-Dateien |
2. Voraussetzungen
- Checkmk 2.1.x oder neuer (Raw, Cloud, Standard oder Managed Edition)
- Eine aktive Checkmk-Site (omd create <sitename>)
- Linux-Server (Debian/Ubuntu oder RHEL/CentOS) als Checkmk-Server
- Didactum Monitoring-Gerät im Netzwerk erreichbar, SNMP aktiviert
- UDP Port 161 vom Checkmk-Server zum Didactum-Gerät freigegeben
- UDP Port 162 (für SNMP-Traps) auf dem Checkmk-Server freigegeben
- SNMP-Community-String bekannt (Standard: public)
- Zugriff auf das Checkmk-Web-Interface als Administrator
Beispiel-Netzwerkkonfiguration
| Gerät | IP-Adresse | Rolle |
|---|---|---|
| Checkmk-Server | 192.168.1.60 | Monitoring-Server |
| Didactum Monitoring Unit | 192.168.1.100 | Überwachtes Gerät (SNMP-Agent) |
3. SNMP-Vorbereitung am Didactum-Gerät
3.1 SNMP aktivieren
- Didactum Web-Interface aufrufen: 192.168.1.100, Login mit Admin-Konto.
- Navigation: Einstellungen → Netzwerk → SNMP (oder: Settings → Network → SNMP).
- Folgende Parameter setzen:
- SNMP aktiviert: Ja
- SNMP-Version: v2c (empfohlen) oder v3
- Community-String: public (in Produktion ändern)
- SNMP-Port: 161
- Allowed Managers: IP des Checkmk-Servers (192.168.1.60) eintragen
- SNMP Trap Receiver: IP des Checkmk-Servers, Port 162
- Einstellungen speichern.
Achtung: Den Standard-Community-String public in Produktivumgebungen ändern. Den gleichen String in den Checkmk-SNMP-Regeln verwenden.
3.2 Erreichbarkeit vom Checkmk-Server testen
# Als Site-Benutzer einloggen: su - <sitename> # SNMP Walk vom Checkmk-Server aus: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Temperatur Sensor 1 direkt abfragen: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # Checkmk-eigenen SNMP Walk Tool verwenden: cmk --snmpwalk 192.168.1.100
Hinweis: Didactum gibt Temperatur- und Spannungswerte mit Faktor 10 zurück (235 = 23,5°C). Dies wird in den Checkmk-Schwellwert-Regeln und Check-Plugins berücksichtigt.
3. SNMP-Vorbereitung am Didactum-Gerät
3.1 SNMP aktivieren
- Didactum Web-Interface aufrufen: 192.168.1.100, Login mit Admin-Konto.
- Navigation: Einstellungen → Netzwerk → SNMP (oder: Settings → Network → SNMP).
- Folgende Parameter setzen:
- SNMP aktiviert: Ja
- SNMP-Version: v2c (empfohlen) oder v3
- Community-String: public (in Produktion ändern)
- SNMP-Port: 161
- Allowed Managers: IP des Checkmk-Servers (192.168.1.60) eintragen
- SNMP Trap Receiver: IP des Checkmk-Servers, Port 162
- Einstellungen speichern.
Achtung: Den Standard-Community-String public in Produktivumgebungen ändern. Den gleichen String in den Checkmk-SNMP-Regeln verwenden.
3.2 Erreichbarkeit vom Checkmk-Server testen
# Als Site-Benutzer einloggen: su - <sitename> # SNMP Walk vom Checkmk-Server aus: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Temperatur Sensor 1 direkt abfragen: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # Checkmk-eigenen SNMP Walk Tool verwenden: cmk --snmpwalk 192.168.1.100
Hinweis:
Didactum gibt Temperatur- und Spannungswerte mit Faktor 10 zurück (235 = 23,5°C). Dies wird in den Checkmk-Schwellwert-Regeln und Check-Plugins berücksichtigt.
4. Didactum-Gerät als Host anlegen
4.1 Host über das Web-Interface anlegen
- Checkmk Web-Interface aufrufen: 192.168.1.60/<sitename>/.
- Navigation: Setup → Hosts → Add host.
- Folgende Felder ausfüllen:
- Hostname: didactum-rack01
- IP address: 192.168.1.100
- Alias: Didactum Rack Monitoring – Serverraum A
- Unter Monitoring agents:
- Checkmk agent / API integrations: No API integrations, no Checkmk agent
- SNMP: SNMP v2c auswählen
- SNMP credentials: Community-String public eintragen
- Unter Custom attributes:
- Labels: device_type:didactum, location:serverraum-a
- Klick auf Save & run service discovery.
4.2 Host-Tag und Ordner-Struktur empfohlen
- Navigation: Setup → Hosts → Folders → Add subfolder.
- Ordner anlegen: Rack-Monitoring / Didactum
- Ordner-Attribut setzen: SNMP communities → public für alle Hosts im Ordner.
- Alle Didactum-Hosts in diesen Ordner legen – SNMP-Einstellungen werden vererbt.
4.3 Host für SNMP v3 konfigurieren
- Beim Host-Anlegen unter SNMP: SNMP v3 auswählen.
- Zusätzliche Felder:
- Security name: SNMP-v3-Benutzername vom Didactum-Gerät
- Authentication protocol: SHA
- Authentication password: Authentifizierungspasswort
- Privacy protocol: AES
- Privacy password: Verschlüsselungspasswort
5. SNMP-Konfiguration in Checkmk
5.1 SNMP-Community global oder per Host hinterlegen
Über Setup → Hosts → SNMP credentials of monitored hosts können Community-Strings für einzelne IPs oder IP-Bereiche hinterlegt werden, ohne den Host manuell zu bearbeiten:
- Navigation: Setup → Global settings → SNMP → SNMP communities oder Setup → Hosts → Rulesets → SNMP credentials.
- Neue Regel anlegen:
- Conditions → Explicit hosts: didactum-rack01
- SNMP community: public
- SNMP version: v2c
- Speichern und aktivieren.
5.2 SNMP-Bulk-Walk aktivieren (Performance-Optimierung)
# In der Site-Konfiguration: # Setup → Global settings → SNMP → Use SNMP bulk walk # Aktivieren für bessere Performance bei vielen OIDs.
5.3 Didactum MIB-Datei in Checkmk einbinden
# Als Site-Benutzer: su - <sitename> # MIB in das Site-MIB-Verzeichnis kopieren: cp DIDACTUM-RACKMONI2-MIB.mib ~/local/share/check_mk/mibs/ # MIB-Verzeichnis prüfen: ls ~/local/share/check_mk/mibs/ # MIBs werden beim nächsten SNMP-Walk automatisch verwendet.
6. Automatische Service-Erkennung (Service Discovery)
6.1 Service Discovery starten
- Navigation: Setup → Hosts → didactum-rack01 → Run service discovery.
- Checkmk führt einen SNMP Walk durch und zeigt alle erkannten Services.
- Typisch erkannte Standard-Services:
- SNMP Info (System-Beschreibung, Uptime)
- Interface-Status (Netzwerkschnittstelle)
- SNMP Uptime
- Alle gewünschten Services mit Accept all übernehmen.
- Änderungen aktivieren: Activate changes (gelbe Schaltfläche oben rechts).
Hinweis:
Didactum-spezifische Sensor-OIDs werden von der automatischen Service Discovery nur erkannt, wenn ein passendes Checkmk-Plugin vorhanden ist. Für gerätespezifische Sensoren sind manuelle SNMP-Checks erforderlich (siehe Abschnitt 7).
6.2 Periodische Service Discovery aktivieren
- Navigation: Setup → Hosts → Rulesets → Periodic service discovery.
- Neue Regel anlegen:
- Conditions: Label device_type:didactum
- Perform service discovery every: 4 hours
- Severity of unmonitored services: Warning
- Speichern – neue Sensoren werden automatisch erkannt, sobald sie angeschlossen werden.
7. SNMP-Checks manuell konfigurieren
Für Didactum-spezifische OIDs, die von der automatischen Discovery nicht erkannt werden, gibt es in Checkmk zwei Wege: den SNMP Check über Regeln im Web-Interface oder ein eigenes Check-Plugin in Python.
7.1 Methode 1: SNMP Checks über das Web-Interface (empfohlen für den Einstieg)
- Navigation: Setup → Services → Service monitoring rules → SNMP checks oder direkt: Setup → Hosts → Rulesets → SNMP checks for custom values.
- Klick auf Add rule.
- Folgende Parameter für Temperatur Sensor 1 eintragen:
- Service description: Temperatur Sensor 1 – Rack-Front
- OID: .1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1
- SNMP data type: Integer
- Warning above: 300 (= 30,0 °C × 10)
- Critical above: 350 (= 35,0 °C × 10)
- Unit: x10=°C
- Unter Conditions: Explizit auf didactum-rack01 einschränken.
- Speichern und Service Discovery erneut ausführen – der neue Service erscheint.
7.2 Methode 2: Eigenes Checkmk-Plugin in Python
Für eine saubere, wiederverwendbare Integration empfiehlt sich ein eigenes Check-Plugin. Als Site-Benutzer anlegen:
su - <sitename> mkdir -p ~/local/lib/check_mk/base/plugins/agent_based/ nano ~/local/lib/check_mk/base/plugins/agent_based/didactum_sensors.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Checkmk Check-Plugin für Didactum Monitoring-Geräte
Überwacht Temperatur-, Leckage- und Luftfeuchtigkeitssensoren via SNMP.
"""
from cmk.base.plugins.agent_based.agent_based_api.v1 import (
SNMPTree, OIDEnd, register, Service, Result, State,
check_levels, startswith, contains
)
# ── OID-DEFINITIONEN ──────────────────────────────────────────────────────────
DIDACTUM_BASE = ".1.3.6.1.4.1.3854.1.2.2.1"
OID_TEMP_NAME = DIDACTUM_BASE + ".16.1.2"
OID_TEMP_VALUE = DIDACTUM_BASE + ".16.1.3"
OID_TEMP_STATUS = DIDACTUM_BASE + ".16.1.4"
OID_TEMP_HI = DIDACTUM_BASE + ".16.1.7"
OID_TEMP_LO = DIDACTUM_BASE + ".16.1.8"
OID_HUM_NAME = DIDACTUM_BASE + ".17.1.2"
OID_HUM_VALUE = DIDACTUM_BASE + ".17.1.3"
OID_HUM_STATUS = DIDACTUM_BASE + ".17.1.4"
OID_LEAK_NAME = DIDACTUM_BASE + ".18.1.2"
OID_LEAK_STATUS = DIDACTUM_BASE + ".18.1.4"
# ── SNMP-SECTION: TEMPERATUR ──────────────────────────────────────────────────
register.snmp_section(
name="didactum_temperature",
detect=contains(".1.3.6.1.2.1.1.1.0", "didactum"),
fetch=SNMPTree(
base=DIDACTUM_BASE + ".16.1",
oids=[OIDEnd(), "2", "3", "4"],
),
parse_function=lambda string_table: {
idx: {"name": name, "value": int(value), "status": int(status)}
for idx, name, value, status in string_table
if value.isdigit()
},
)
# ── CHECK: TEMPERATUR ─────────────────────────────────────────────────────────
def discover_didactum_temperature(section):
for idx, data in section.items():
yield Service(item=idx, parameters={"sensor_name": data["name"]})
def check_didactum_temperature(item, params, section):
if item not in section:
yield Result(state=State.UNKNOWN, summary="Sensor nicht gefunden")
return
data = section[item]
raw_value = data["value"]
temp_celsius = raw_value / 10.0
status_code = data["status"]
# Gerätestatus auswerten:
status_map = {0: (State.OK, "OK"), 1: (State.WARN, "Warnung"), 2: (State.CRIT, "Alarm")}
device_state, device_text = status_map.get(status_code, (State.UNKNOWN, "Unbekannt"))
warn = params.get("warn", 30.0)
crit = params.get("crit", 35.0)
yield from check_levels(
temp_celsius,
levels_upper=(warn, crit),
metric_name="temperature",
label=f"Temperatur {data['name']}",
render_func=lambda v: f"{v:.1f} °C",
)
if device_state != State.OK:
yield Result(state=device_state, summary=f"Gerätestatus: {device_text}")
register.check_plugin(
name="didactum_temperature",
service_name="Temperatur %s",
discovery_function=discover_didactum_temperature,
check_function=check_didactum_temperature,
check_default_parameters={"warn": 30.0, "crit": 35.0},
)
# ── SNMP-SECTION: LECKAGE ─────────────────────────────────────────────────────
register.snmp_section(
name="didactum_leak",
detect=contains(".1.3.6.1.2.1.1.1.0", "didactum"),
fetch=SNMPTree(
base=DIDACTUM_BASE + ".18.1",
oids=[OIDEnd(), "2", "4"],
),
parse_function=lambda string_table: {
idx: {"name": name, "status": int(status)}
for idx, name, status in string_table
if status.isdigit()
},
)
def discover_didactum_leak(section):
for idx, data in section.items():
yield Service(item=idx, parameters={"sensor_name": data["name"]})
def check_didactum_leak(item, params, section):
if item not in section:
yield Result(state=State.UNKNOWN, summary="Leckage-Sensor nicht gefunden")
return
data = section[item]
status = data["status"]
name = data["name"]
if status == 0:
yield Result(state=State.OK, summary=f"{name}: Trocken (kein Wasser)")
else:
yield Result(state=State.CRIT, summary=f"LECKAGE ERKANNT: {name}! Sofortiger Handlungsbedarf!")
register.check_plugin(
name="didactum_leak",
service_name="Leckage %s",
discovery_function=discover_didactum_leak,
check_function=check_didactum_leak,
check_default_parameters={},
)
# ── SNMP-SECTION: LUFTFEUCHTIGKEIT ────────────────────────────────────────────
register.snmp_section(
name="didactum_humidity",
detect=contains(".1.3.6.1.2.1.1.1.0", "didactum"),
fetch=SNMPTree(
base=DIDACTUM_BASE + ".17.1",
oids=[OIDEnd(), "2", "3", "4"],
),
parse_function=lambda string_table: {
idx: {"name": name, "value": int(value), "status": int(status)}
for idx, name, value, status in string_table
if value.isdigit()
},
)
def discover_didactum_humidity(section):
for idx, data in section.items():
yield Service(item=idx, parameters={"sensor_name": data["name"]})
def check_didactum_humidity(item, params, section):
if item not in section:
yield Result(state=State.UNKNOWN, summary="Feuchtigkeitssensor nicht gefunden")
return
data = section[item]
humidity = data["value"]
yield from check_levels(
humidity,
levels_upper=(params.get("warn_high", 70), params.get("crit_high", 80)),
levels_lower=(params.get("crit_low", 10), params.get("warn_low", 20)),
metric_name="humidity",
label=f"Luftfeuchtigkeit {data['name']}",
render_func=lambda v: f"{v:.0f} % rF",
)
register.check_plugin(
name="didactum_humidity",
service_name="Luftfeuchtigkeit %s",
discovery_function=discover_didactum_humidity,
check_function=check_didactum_humidity,
check_default_parameters={
"warn_high": 70, "crit_high": 80,
"warn_low": 20, "crit_low": 10,
},
)7.3 Plugin aktivieren und testen
# Als Site-Benutzer: su - <sitename> # Plugin-Syntax prüfen: python3 ~/local/lib/check_mk/base/plugins/agent_based/didactum_sensors.py # Check-Plugin in Checkmk laden und testen: cmk -v --detect-plugins=didactum_temperature didactum-rack01 # Service Discovery mit neuem Plugin ausführen: cmk -I didactum-rack01 # Check direkt ausführen: cmk -v didactum-rack01
7.4 SNMP-Check über Ruleset für einzelne OIDs (ohne Plugin)
Alternativ zum Plugin können einzelne OIDs über das Ruleset SNMP checks for custom values überwacht werden:
# Navigation im Web-Interface: # Setup → Service monitoring rules → SNMP → SNMP checks for custom values # Beispiel-Konfiguration für Leckage Sensor 1: # Service description: Leckage Sensor 1 – Bodenbereich # OID: .1.3.6.1.4.1.3854.1.2.2.1.18.1.4.1 # Expected regex: ^0$ (nur Wert 0 ist OK) # Severity on failure: CRITICAL
8. OID-Referenz für Checkmk
Alle OIDs basieren auf der Didactum Enterprise OID-Basis 1.3.6.1.4.1.3854. Der Platzhalter {n} steht für den Sensorindex (1 = erster Sensor usw.).
8.1 Temperatursensoren
| OID | Beschreibung | Einheit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.{n} | Temperaturwert Sensor n | °C × 10 | 300 (30 °C) | 350 (35 °C) |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.4.{n} | Temperatur-Status Sensor n | Enum 0/1/2 | ≠ 0 | ≥ 2 |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.7.{n} | Oberer Grenzwert Sensor n | °C × 10 | – | – |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.8.{n} | Unterer Grenzwert Sensor n | °C × 10 | – | – |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.2.{n} | Sensor-Name n | Text | – | – |
8.2 Leckagesensoren
| OID | Beschreibung | Einheit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.4.{n} | Leckage-Status Sensor n | 0=OK, 1=Leckage | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.3.{n} | Leckage-Wert Sensor n | 0=trocken | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.2.{n} | Sensor-Name n | Text | – | – |
8.3 Luftfeuchtigkeitssensoren
| OID | Beschreibung | Einheit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.3.{n} | Luftfeuchtigkeitswert Sensor n | % rF | 20–70 % (außerhalb) | 10–80 % (außerhalb) |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.4.{n} | Luftfeuchtigkeits-Status n | Enum 0/1/2 | ≠ 0 | ≥ 2 |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.7.{n} | Oberer Grenzwert Sensor n | % rF | – | – |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.8.{n} | Unterer Grenzwert Sensor n | % rF | – | – |
8.4 Weitere Sensoren
| OID | Beschreibung | Einheit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.3.{n} | Spannungswert Sensor n | V × 10 | 2070–2530 (außerhalb) | 1960–2600 (außerhalb) |
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.4.{n} | Spannungs-Status Sensor n | Enum 0/1/2 | ≠ 0 | ≥ 2 |
| 1.3.6.1.4.1.3854.1.2.2.1.10.1.3.{n} | Türkontakt-Status n | 0=zu, 1=offen | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.11.1.3.{n} | Erschütterung / Bewegung n | 0=keine, 1=Alarm | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.14.1.3.{n} | Rauchmelder-Status n | 0=OK, 1=Alarm | – | ≥ 1 |
| 1.3.6.1.2.1.1.3.0 | System Uptime (sysUpTime) | Hundertstelsekunden | – | – |
9. Schwellwerte und Regeln konfigurieren
9.1 Schwellwerte für das eigene Plugin per Ruleset festlegen
Damit Schwellwerte zentral über das Web-Interface gepflegt werden können (statt im Plugin-Code), wird ein Ruleset-Plugin angelegt:
su - <sitename> nano ~/local/lib/check_mk/base/plugins/agent_based/didactum_rulesets.py
#!/usr/bin/env python3
from cmk.gui.plugins.wato.utils import (
CheckParameterRulespecWithItem,
rulespec_registry,
RulespecGroupCheckParametersEnvironment,
)
from cmk.gui.valuespec import Dictionary, Tuple, Float, TextInput
def _parameter_valuespec_didactum_temperature():
return Dictionary(
title="Didactum Temperatur-Schwellwerte",
elements=[
("warn", Float(title="Warnschwelle (°C)", default_value=30.0)),
("crit", Float(title="Kritisch-Schwelle (°C)", default_value=35.0)),
],
)
rulespec_registry.register(
CheckParameterRulespecWithItem(
check_group_name="didactum_temperature",
group=RulespecGroupCheckParametersEnvironment,
match_type="dict",
parameter_valuespec=_parameter_valuespec_didactum_temperature,
title=lambda: "Didactum Temperatursensor",
)
)9.2 Schwellwerte über das Web-Interface anpassen
- Navigation: Setup → Service monitoring rules → Didactum Temperatursensor.
- Neue Regel anlegen:
- Warnschwelle: 30,0 °C
- Kritisch-Schwelle: 35,0 °C
- Conditions: Hostlabel device_type:didactum
- Speichern und Änderungen aktivieren.
9.3 Empfohlene Schwellwerte
| Sensortyp | Warning | Critical | Norm |
|---|---|---|---|
| Temperatur IT-Rack | 30,0 °C | 35,0 °C | ASHRAE A1: 15–32 °C |
| Temperatur USV-Raum | 25,0 °C | 30,0 °C | Herstellervorgabe |
| Luftfeuchtigkeit hoch | 70 % rF | 80 % rF | ASHRAE: 20–80 % rF |
| Luftfeuchtigkeit niedrig | 20 % rF | 10 % rF | ASHRAE: 20–80 % rF |
| Leckage | – | Wert ≥ 1 | Sofortalarm |
| Spannung 230 V AC | 207–253 V (außerhalb) | 196–260 V (außerhalb) | EN 50160 ±10 % |
| Türkontakt / Rauch | – | Wert ≥ 1 | Policy-abhängig |
10. Alarmierung und Benachrichtigungen
10.1 Benachrichtigungsregel anlegen
- Navigation: Setup → Events → Notifications → Add rule.
- Allgemeine Einstellungen:
- Rule description: Didactum Sensor-Alarme
- Notification method: HTML email
- Unter Conditions:
- Match host labels: device_type:didactum
- Service state: WARN, CRIT, UNKNOWN
- Notification type: Problem, Recovery
- Unter Contacts:
- Kontakte oder Kontaktgruppen auswählen
- Speichern und aktivieren.
10.2 Separate Eskalationsregel für Leckage
- Neue Benachrichtigungsregel anlegen.
- Conditions → Match service groups: Leckage-Sensoren
- Conditions → Service state: nur CRIT
- Notification method: HTML email + SMS via Script
- Throttling: First notification immediately, repeat every 5 minutes
- Zusätzliche Kontakte (Bereitschaft, Leitung) eintragen.
10.3 Wartungsfenster für Didactum-Geräte
- Navigation: Monitor → Schedule downtimes.
- Host didactum-rack01 auswählen, Zeitraum und Kommentar eintragen.
- Während des Wartungsfensters werden keine Alarme ausgelöst.
10.4 Bestätigungen (Acknowledgements)
Bei einem Leckage-Alarm sofort bestätigen, um weitere Benachrichtigungen zu pausieren:
- Im Monitoring-Bereich: Service anklicken.
- Schaltfläche Acknowledge klicken.
- Kommentar eintragen (z.B. Techniker alarmiert, vor Ort im Anfahren).
- Benachrichtigungen pausieren, bis das Problem behoben ist.
11. SNMP-Trap-Integration
Checkmk kann SNMP-Traps über das eingebaute Event Console (EC) Modul empfangen und verarbeiten. Die Event Console ist eine eigenständige Komponente, die Traps als Events auswertet und optional in Checkmk-Alarme umwandelt.
11.1 Event Console aktivieren
# Als Site-Benutzer: su - <sitename> # Event Console aktivieren: omd config set MKEVENTD on omd restart mkeventd
Alternativ im Web-Interface: Setup → Events → Event Console → Enable Event Console.
11.2 SNMP-Trap-Receiver konfigurieren
# snmptrapd muss auf dem System laufen und Traps an die Event Console weiterleiten: sudo nano /etc/snmp/snmptrapd.conf
# Alle Traps annehmen: authCommunity log,execute,net public # Traps an Checkmk Event Console weiterleiten: traphandle default /omd/sites/<sitename>/bin/mkeventd_open514
# snmptrapd UDP 162 öffnen: sudo ufw allow 162/udp # snmptrapd starten: sudo systemctl enable snmptrapd sudo systemctl start snmptrapd
11.3 Event-Regel für Didactum-Traps anlegen
- Navigation: Setup → Events → Event Console → Event rules → Add rule.
- Folgende Parameter für Leckage-Traps eintragen:
- Description: Didactum Leckage-Alarm Trap
- Match syslog application / SNMP trap OID: 1.3.6.1.4.1.3854.1.7.2
- State: CRITICAL
- Service level: Gold
- Unter Actions:
- Create notification aktivieren
- Kontaktgruppe eintragen
- Speichern und aktivieren.
11.4 Wichtige Didactum Trap-OIDs für die Event Console
| Trap-OID | Ereignis | Empfohlener EC-Status |
|---|---|---|
| 1.3.6.1.4.1.3854.1.7.1 | Temperatur-Alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.2 | Leckage-Alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.3 | Luftfeuchtigkeits-Alarm | WARNING oder CRITICAL |
| 1.3.6.1.4.1.3854.1.7.4 | Spannungs-Alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.10 | Türkontakt geöffnet | WARNING |
| 1.3.6.1.4.1.3854.1.7.14 | Rauchmelder-Alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.99 | Gerät-Neustart | WARNING |
12. Fehlerbehebung (Troubleshooting)
| Problem | Mögliche Ursache / Lösung |
|---|---|
| Host zeigt PEND / keine Checks | SNMP-Community falsch oder UDP 161 blockiert. Test: cmk --snmpwalk didactum-rack01. Korrekte SNMP-Einstellung am Host prüfen. |
| Service Discovery findet keine Didactum-Services | Kein passendes Check-Plugin installiert. Eigenes Plugin unter ~/local/lib/check_mk/base/plugins/agent_based/ ablegen. SNMP Walk prüfen: cmk --snmpwalk didactum-rack01. |
| Falscher Temperaturwert (z. B. 235 statt 23,5) | Im Python-Plugin Rohwert durch 10 dividieren: temp_celsius = raw_value / 10.0. Bei manuellen SNMP-Checks entsprechende Schwellwerte × 10 angeben. |
| Plugin-Fehler beim Laden | Python-Syntax prüfen: python3 didactum_sensors.py. Importfehler prüfen: cmk -v --detect-plugins=didactum_temperature didactum-rack01. Checkmk-Version kompatibel? |
| Änderungen werden nicht übernommen | Activate changes im Web-Interface ausführen (gelbe Schaltfläche). Oder: cmk -O als Site-Benutzer. |
| SNMP Walk schlägt fehl / leere Ergebnisse | Community-String prüfen. Allowed Managers am Didactum-Gerät: IP des Checkmk-Servers eingetragen? Firewall-Regel: ufw allow from 192.168.1.60 to any port 161 proto udp. |
| Traps kommen nicht in der Event Console an | snmptrapd läuft? UDP 162 auf dem Checkmk-Server freigegeben? Event Console aktiviert (omd config)? Trap-OID in der EC-Regel korrekt? |
| Keine Benachrichtigungen trotz CRIT-Status | Benachrichtigungsregel auf den richtigen Host/Service angewendet? Kontakt hat gültige E-Mail-Adresse? Notification-Logdatei prüfen: tail -f ~/var/log/notify.log. |
Diagnose-Befehle Übersicht
# Als Site-Benutzer einloggen: su - <sitename> # SNMP Walk für Didactum-Gerät durchführen: cmk --snmpwalk didactum-rack01 # SNMP Walk-Cache anzeigen: cat ~/var/check_mk/snmp_cache/didactum-rack01 # Service Discovery ausführen: cmk -I didactum-rack01 # Alle Services des Hosts prüfen: cmk -v didactum-rack01 # Einzelnen Check debuggen: cmk -v --detect-plugins=didactum_temperature didactum-rack01 # Checkmk-Konfiguration neu laden (nach Änderungen): cmk -O # Alle Änderungen aktivieren (Kommandozeile): cmk -R # SNMP-Erreichbarkeit direkt testen: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Einzelne OID abfragen: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # Event Console Logs prüfen: tail -f ~/var/log/mkeventd.log # Benachrichtigungs-Log prüfen: tail -f ~/var/log/notify.log # Checkmk Haupt-Log: tail -f ~/var/log/cmc.log # CMC (Standard/Managed Edition) tail -f ~/var/log/nagios.log # Nagios-Core (Raw Edition) # Site-Status prüfen: omd status # Site neu starten: omd restart
Anhang: Checkmk-Konfiguration Schnell-Referenz
| Aufgabe | Web-Interface Navigationspfad |
|---|---|
| Host anlegen | Setup → Hosts → Add host |
| SNMP-Community konfigurieren | Setup → Hosts → Rulesets → SNMP credentials |
| Service Discovery starten | Setup → Hosts → <host> → Run service discovery |
| Periodische Discovery | Setup → Hosts → Rulesets → Periodic service discovery |
| SNMP Custom Checks | Setup → Service monitoring rules → SNMP checks for custom values |
| Schwellwerte anpassen | Setup → Service monitoring rules → <Plugin-Name> |
| Benachrichtigungsregel | Setup → Events → Notifications → Add rule |
| Event Console | Setup → Events → Event Console → Event rules |
| Änderungen aktivieren | Gelbe Schaltfläche oben rechts → Activate changes |
| MIB-Dateien verwalten | ~/local/share/check_mk/mibs/ (Kommandozeile) |
| Eigene Plugins ablegen | ~/local/lib/check_mk/base/plugins/agent_based/ |
| Wartungsfenster | Monitor → Schedule downtimes |
Für firmware-spezifische OIDs und unterstützte Sensortypen immer die aktuelle Didactum-Gerätedokumentation konsultieren.