Didactum Monitoring Devices and Sensors – Integration into Checkmk
This guide describes the complete integration of Didactum monitoring devices into Checkmk (Raw Edition, Standard Edition, and Managed Services Edition). The objective is the centralized monitoring of all connected sensors - temperature, humidity, leakage, voltage, door contacts, and others - via SNMP, including automatic service discovery, alerting, and trend graphs.
1. Fundamentals and Architecture
Checkmk is a comprehensive monitoring platform with a strong focus on automatic configuration. Service discovery detects many services automatically – for SNMP devices like the Didactum via a walk of the device data. Manual configuration is only required for device-specific OIDs that are not included in the standard Checkmk plugins.
Checkmk Editions Comparison
| Edition | Abbreviation | Feature |
|---|---|---|
| Raw Edition | CRE | Free, open source, Nagios core, no agent bakery |
| Cloud Edition | CCE | SaaS-optimized, CMC (Checkmk Micro Core) |
| Standard Edition | CSE | Commercial, CMC, agent bakery, business intelligence |
| Managed Services Edition | CME | Multi-tenant, for MSPs and large environments |
This guide applies to all editions. Deviations are explicitly indicated.
Processing workflow for SNMP devices
- Host creation: The Didactum device is created as a host with SNMP parameters.
- SNMP walk: Checkmk performs a full SNMP walk and stores the results in the cache.
- Service discovery: Based on the data, Checkmk automatically detects available services.
- Active checks: The Checkmk agent queries the SNMP OIDs at configured intervals.
- Alerting: Notifications are triggered when thresholds are exceeded.
Important directories and files
| Path | Content |
|---|---|
| /omd/sites/<site>/ | Site directory (everything below belongs to the site) |
| /omd/sites/<site>/etc/check_mk/ | Site configuration files |
| /omd/sites/<site>/local/share/check_mk/checks/ | Custom/user-defined check plugins |
| /omd/sites/<site>/local/share/check_mk/mibs/ | Custom MIB files |
| /omd/sites/<site>/var/check_mk/snmp_cache/ | SNMP walk cache files |
| /omd/sites/<site>/var/log/ | Log files |
2. Prerequisites
- Checkmk 2.1.x or newer (Raw, Cloud, Standard, or Managed Edition)
- An active Checkmk site (omd create <sitename>)
- Linux server (Debian/Ubuntu or RHEL/CentOS) as Checkmk server
- Didactum monitoring device reachable in the network, SNMP enabled
- UDP port 161 open from the Checkmk server to the Didactum device
- UDP port 162 (for SNMP traps) open on the Checkmk server
- Known SNMP community string (default: public)
- Access to the Checkmk web interface as an administrator
Example network configuration
| Device | IP address | Role |
|---|---|---|
| Checkmk server | 192.168.1.60 | Monitoring server |
| Didactum Monitoring Unit | 192.168.1.100 | Monitored device (SNMP agent) |
3. SNMP preparation on the Didactum device
3.1 Enable SNMP
- Open the Didactum web interface: [http://192.168.1.100](http://192.168.1.100), log in with an admin account.
- Navigate: Settings → Network → SNMP.
- Set the following parameters:
- SNMP enabled: Yes
- SNMP version: v2c (recommended) or v3
- Community string: public (change in production)
- SNMP port: 161
- Allowed Managers: enter the Checkmk server IP (192.168.1.60)
- SNMP Trap Receiver: Checkmk server IP, port 162
- Save the settings.
Caution: Change the default community string public in production environments. Use the same string in the Checkmk SNMP rules.
3.2 Test reachability from the Checkmk server
# Log in as site user: su - <sitename> # SNMP walk from the Checkmk server: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Query temperature sensor 1 directly: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # Use Checkmk's own SNMP walk tool: cmk --snmpwalk 192.168.1.100
Note: Didactum returns temperature and voltage values multiplied by 10 (235 = 23.5°C). This is taken into account in the Checkmk threshold rules and check plugins.
3. SNMP Preparation on the Didactum Device
3.1 Enable SNMP
- Open the Didactum web interface: [http://192.168.1.100](http://192.168.1.100), log in with an admin account.
- Navigate: Settings → Network → SNMP.
- Set the following parameters:
- SNMP enabled: Yes
- SNMP version: v2c (recommended) or v3
- Community string: public (change in production)
- SNMP port: 161
- Allowed Managers: enter the Checkmk server IP (192.168.1.60)
- SNMP Trap Receiver: Checkmk server IP, port 162
- Save the settings.
Caution: Change the default community string public in production environments. Use the same string in the Checkmk SNMP rules.
3.2 Test reachability from the Checkmk server
# Log in as site user: su - <sitename> # SNMP walk from the Checkmk server: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Query temperature sensor 1 directly: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # Use Checkmk's own SNMP walk tool: cmk --snmpwalk 192.168.1.100
Note:
Didactum returns temperature and voltage values multiplied by 10 (235 = 23.5°C). This is taken into account in the Checkmk threshold rules and check plugins.
4. Set up the Didactum device as a host
4.1 Create host via the web interface
- Open the Checkmk web interface: [http://192.168.1.60/<](http://192.168.1.60/<);sitename>/.
- Navigate: Setup → Hosts → Add host.
- Fill in the following fields:
- Hostname: didactum-rack01
- IP address: 192.168.1.100
- Alias: Didactum Rack Monitoring – Server Room A
- Under Monitoring agents:
- Checkmk agent / API integrations: No API integrations, no Checkmk agent
- SNMP: select SNMP v2c
- SNMP credentials: enter the community string public
- Under Custom attributes:
- Labels: device_type:didactum, location:serverraum-a
- Click Save & run service discovery.
4.2 Recommended host tag and folder structure
- Navigate: Setup → Hosts → Folders → Add subfolder.
- Create folder: Rack-Monitoring / Didactum
- Set folder attribute: SNMP communities → public for all hosts in the folder.
- Place all Didactum hosts in this folder – SNMP settings are inherited.
4.3 Configure host for SNMP v3
- When creating the host, under SNMP: select SNMP v3.
- Additional fields:
- Security name: SNMP-v3 username from the Didactum device
- Authentication protocol: SHA
- Authentication password: authentication password
- Privacy protocol: AES
- Privacy password: encryption password
5. SNMP configuration in Checkmk
5.1 Store SNMP community globally or per host
Via Setup → Hosts → SNMP credentials of monitored hosts community strings can be stored for individual IPs or IP ranges without manually editing the host:
- Navigate: Setup → Global settings → SNMP → SNMP communities or Setup → Hosts → Rulesets → SNMP credentials.
- Create a new rule:
- Conditions → Explicit hosts: didactum-rack01
- SNMP community: public
- SNMP version: v2c
- Save and activate.
5.2 Enable SNMP bulk walk (performance optimization)
# In the site configuration: # Setup → Global settings → SNMP → Use SNMP bulk walk # Enable for better performance when handling many OIDs.
5.3 Integrate the Didactum MIB file into Checkmk
# As site user: su - <sitename> # Copy the MIB into the site MIB directory: cp DIDACTUM-RACKMONI2-MIB.mib ~/local/share/check_mk/mibs/ # Check the MIB directory: ls ~/local/share/check_mk/mibs/ # MIBs are used automatically in the next SNMP walk.
6. Automatic Service Detection (Service Discovery)
6.1 Start service discovery
- Navigate: Setup → Hosts → didactum-rack01 → Run service discovery.
- Checkmk performs an SNMP walk and displays all detected services.
- Typically detected standard services:
- SNMP Info (system description, uptime)
- Interface status (network interface)
- SNMP uptime
- Accept all desired services with Accept all.
- Activate changes: Activate changes (yellow button in the top right).
Note:
Didactum-specific sensor OIDs are only recognized by the automatic service discovery if a matching Checkmk plugin is available. For device-specific sensors, manual SNMP checks are required (see section 7).
6.2 Enable periodic service discovery
- Navigate: Setup → Hosts → Rulesets → Periodic service discovery.
- Create a new rule:
- Conditions: Label device_type:didactum
- Perform service discovery every: 4 hours
- Severity of unmonitored services: Warning
- Save – new sensors will be detected automatically as soon as they are connected.
7. Manually Configure SNMP Checks
For Didactum-specific OIDs that are not recognized by automatic discovery, Checkmk offers two approaches: the SNMP check via rules in the web interface or a custom check plugin written in Python.
7.1 Method 1: SNMP checks via the web interface (recommended for beginners)
- Navigate: Setup → Services → Service monitoring rules → SNMP checks or directly: Setup → Hosts → Rulesets → SNMP checks for custom values.
- Click Add rule.
- Enter the following parameters for temperature sensor 1:
- Service description: Temperature 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
- Under Conditions: restrict explicitly to didactum-rack01.
- Save and run service discovery again – the new service will appear.
7.2 Method 2: Custom Checkmk plugin in Python
For a clean, reusable integration a custom Checkmk plugin is recommended. Create it as a site user:
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 for Didactum monitoring devices
Monitors temperature, leak and humidity sensors via SNMP.
"""
from cmk.base.plugins.agent_based.agent_based_api.v1 import (
SNMPTree, OIDEnd, register, Service, Result, State,
check_levels, startswith, contains
)
# ── OID DEFINITIONS ───────────────────────────────────────────────────────────
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: TEMPERATURE ─────────────────────────────────────────────────
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: TEMPERATURE ────────────────────────────────────────────────────────
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 not found")
return
data = section[item]
raw_value = data["value"]
temp_celsius = raw_value / 10.0
status_code = data["status"]
# Evaluate device status:
status_map = {0: (State.OK, "OK"), 1: (State.WARN, "Warning"), 2: (State.CRIT, "Alarm")}
device_state, device_text = status_map.get(status_code, (State.UNKNOWN, "Unknown"))
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"Temperature {data['name']}",
render_func=lambda v: f"{v:.1f} °C",
)
if device_state != State.OK:
yield Result(state=device_state, summary=f"Device status: {device_text}")
register.check_plugin(
name="didactum_temperature",
service_name="Temperature %s",
discovery_function=discover_didactum_temperature,
check_function=check_didactum_temperature,
check_default_parameters={"warn": 30.0, "crit": 35.0},
)
# ── SNMP SECTION: LEAK ────────────────────────────────────────────────────────
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="Leak sensor not found")
return
data = section[item]
status = data["status"]
name = data["name"]
if status == 0:
yield Result(state=State.OK, summary=f"{name}: Dry (no water)")
else:
yield Result(state=State.CRIT, summary=f"LEAK DETECTED: {name}! Immediate action required!")
register.check_plugin(
name="didactum_leak",
service_name="Leak %s",
discovery_function=discover_didactum_leak,
check_function=check_didactum_leak,
check_default_parameters={},
)
# ── SNMP SECTION: HUMIDITY ────────────────────────────────────────────────────
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="Humidity sensor not found")
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"Humidity {data['name']}",
render_func=lambda v: f"{v:.0f} % rF",
)
register.check_plugin(
name="didactum_humidity",
service_name="Humidity %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 Activate and test the plugin
# As site user: su - <sitename> # Check plugin syntax: python3 ~/local/lib/check_mk/base/plugins/agent_based/didactum_sensors.py # Load and test the check plugin in Checkmk: cmk -v --detect-plugins=didactum_temperature didactum-rack01 # Run service discovery with the new plugin: cmk -I didactum-rack01 # Run the check directly: cmk -v didactum-rack01
7.4 SNMP check via ruleset for individual OIDs (without plugin)
As an alternative to the plugin, individual OIDs can be monitored via the SNMP checks for custom values ruleset:
# Navigation in the web interface: # Setup → Service monitoring rules → SNMP → SNMP checks for custom values # Example configuration for leak sensor 1: # Service description: Leak Sensor 1 – Floor area # OID: .1.3.6.1.4.1.3854.1.2.2.1.18.1.4.1 # Expected regex: ^0$ (only value 0 is OK) # Severity on failure: CRITICAL
8. OID Reference for Checkmk
All OIDs are based on the Didactum Enterprise OID root 1.3.6.1.4.1.3854. The placeholder {n} stands for the sensor index (1 = first sensor, etc.).
8.1 Temperature sensors
| OID | Description | Unit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.{n} | Temperature value 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} | Temperature status sensor n | Enum 0/1/2 | ≠ 0 | ≥ 2 |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.7.{n} | Upper threshold sensor n | °C × 10 | – | – |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.8.{n} | Lower threshold 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 Leak sensors
| OID | Description | Unit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.4.{n} | Leak status sensor n | 0=OK, 1=leak | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.3.{n} | Leak value sensor n | 0=dry | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.2.{n} | Sensor name n | Text | – | – |
8.3 Humidity sensors
| OID | Description | Unit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.3.{n} | Humidity value sensor n | % rF | 20–70 % (outside) | 10–80 % (outside) |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.4.{n} | Humidity status n | Enum 0/1/2 | ≠ 0 | ≥ 2 |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.7.{n} | Upper threshold sensor n | % rF | – | – |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.8.{n} | Lower threshold sensor n | % rF | – | – |
8.4 Additional sensors
| OID | Description | Unit | Checkmk Warning | Checkmk Critical |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.3.{n} | Voltage value sensor n | V × 10 | 2070–2530 (outside) | 1960–2600 (outside) |
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.4.{n} | Voltage status sensor n | Enum 0/1/2 | ≠ 0 | ≥ 2 |
| 1.3.6.1.4.1.3854.1.2.2.1.10.1.3.{n} | Door contact status n | 0=closed, 1=open | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.11.1.3.{n} | Shock/vibration n | 0=none, 1=alarm | – | ≥ 1 |
| 1.3.6.1.4.1.3854.1.2.2.1.14.1.3.{n} | Smoke detector status n | 0=OK, 1=alarm | – | ≥ 1 |
| 1.3.6.1.2.1.1.3.0 | System Uptime (sysUpTime) | Hundredths of a second | – | – |
9. Configure Thresholds and Rules
9.1 Define thresholds for the own plugin via ruleset
In order to maintain thresholds centrally via the web interface (instead of within the plugin code), a ruleset plugin is created:
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 temperature thresholds",
elements=[
("warn", Float(title="Warning level (°C)", default_value=30.0)),
("crit", Float(title="Critical level (°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 temperature sensor",
)
)9.2 Adjust thresholds via the web interface
- Navigate: Setup → Service monitoring rules → Didactum temperature sensor.
- Create a new rule:
- Warning level: 30.0 °C
- Critical level: 35.0 °C
- Conditions: Host label device_type:didactum
- Save and activate changes.
9.3 Recommended thresholds
| Sensor type | Warning | Critical | Standard |
|---|---|---|---|
| Temperature IT rack | 30.0 °C | 35.0 °C | ASHRAE A1: 15–32 °C |
| Temperature UPS room | 25.0 °C | 30.0 °C | Manufacturer specification |
| Humidity high | 70 % rF | 80 % rF | ASHRAE: 20–80 % rF |
| Humidity low | 20 % rF | 10 % rF | ASHRAE: 20–80 % rF |
| Leak | – | Value ≥ 1 | Immediate alarm |
| Voltage 230 V AC | 207–253 V (outside) | 196–260 V (outside) | EN 50160 ±10 % |
| Door contact / smoke | – | Value ≥ 1 | Policy‑dependent |
10. Alarms and Notifications
10.1 Create notification rule
- Navigate: Setup → Events → Notifications → Add rule.
- General settings:
- Rule description: Didactum sensor alarms
- Notification method: HTML email
- Under Conditions:
- Match host labels: device_type:didactum
- Service state: WARN, CRIT, UNKNOWN
- Notification type: Problem, Recovery
- Under Contacts:
- Select contacts or contact groups
- Save and activate.
10.2 Separate escalation rule for leak
- Create a new notification rule.
- Conditions → Match service groups: Leak sensors
- Conditions → Service state: CRIT only
- Notification method: HTML email + SMS via script
- Throttling: First notification immediately, repeat every 5 minutes
- Enter additional contacts (on‑call, management).
10.3 Maintenance window for Didactum devices
- Navigate: Monitor → Schedule downtimes.
- Select host didactum‑rack01, enter time range and comment.
- No alarms are triggered during the maintenance window.
10.4 Acknowledgements
Immediately acknowledge a leak alarm to pause further notifications:
- In the monitoring area: click the service.
- Click the Acknowledge button.
- Enter a comment (e.g., Technician alerted, en route on site).
- Pause notifications until the problem is resolved.
11. SNMP-Trap-Integration
Checkmk can receive and process SNMP traps via its built‑in Event Console (EC) module. The Event Console is a standalone component that evaluates traps as events and optionally converts them into Checkmk alerts.
11.1 Enable Event Console
# As site user: su - <sitename> # Enable Event Console: omd config set MKEVENTD on omd restart mkeventd
Alternatively in the web interface: Setup → Events → Event Console → Enable Event Console.
11.2 Configure SNMP trap receiver
# snmptrapd must run on the system and forward traps to the Event Console: sudo nano /etc/snmp/snmptrapd.conf
# Accept all traps: authCommunity log,execute,net public # Forward traps to Checkmk Event Console: traphandle default /omd/sites/<sitename>/bin/mkeventd_open514
# Open snmptrapd UDP port 162: sudo ufw allow 162/udp # Start snmptrapd: sudo systemctl enable snmptrapd sudo systemctl start snmptrapd
11.3 Create event rule for Didactum traps
- Navigate: Setup → Events → Event Console → Event rules → Add rule.
- Enter the following parameters for leak traps:
- Description: Didactum leak alarm trap
- Match syslog application / SNMP trap OID: 1.3.6.1.4.1.3854.1.7.2
- State: CRITICAL
- Service level: Gold
- Under Actions:
- Enable Create notification
- Enter contact group
- Save and activate.
11.4 Important Didactum trap OIDs for the Event Console
| Trap OID | Event | Recommended EC state |
|---|---|---|
| 1.3.6.1.4.1.3854.1.7.1 | Temperature alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.2 | Leak alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.3 | Humidity alarm | WARNING or CRITICAL |
| 1.3.6.1.4.1.3854.1.7.4 | Voltage alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.10 | Door contact opened | WARNING |
| 1.3.6.1.4.1.3854.1.7.14 | Smoke detector alarm | CRITICAL |
| 1.3.6.1.4.1.3854.1.7.99 | Device reboot | WARNING |
12. Troubleshooting
| Problem | Possible cause / solution |
|---|---|
| Host shows PEND / no checks | SNMP community wrong or UDP 161 blocked. Test: cmk --snmpwalk didactum‑rack01. Check correct SNMP settings on the host. |
| Service discovery finds no Didactum services | No matching check plugin installed. Place custom plugin under ~/local/lib/check_mk/base/plugins/agent_based/. Check SNMP walk: cmk --snmpwalk didactum‑rack01. |
| Wrong temperature value (e.g., 235 instead of 23.5) | In the Python plugin divide raw value by 10: temp_celsius = raw_value / 10.0. For manual SNMP checks, specify thresholds × 10 accordingly. |
| Plugin error when loading | Check Python syntax: python3 didactum_sensors.py. Check for import errors: cmk -v --detect-plugins=didactum_temperature didactum‑rack01. Is the Checkmk version compatible? |
| Changes are not applied | Run Activate changes in the web interface (yellow button). Or: cmk -O as site user. |
| SNMP walk fails / empty results | Check community string. Allowed Managers on the Didactum device: has the Checkmk server IP been entered? Firewall rule: ufw allow from 192.168.1.60 to any port 161 proto udp. |
| Traps do not appear in the Event Console | Is snmptrapd running? Is UDP 162 open on the Checkmk server? Is the Event Console enabled (omd config)? Is the trap OID correct in the EC rule? |
| No notifications despite CRIT status | Is the notification rule applied to the correct host/service? Does the contact have a valid email address? Check notification log: tail -f ~/var/log/notify.log. |
Overview of Diagnostic Commands
# Log in as site user: su - <sitename> # Perform SNMP walk for Didactum device: cmk --snmpwalk didactum-rack01 # Show SNMP walk cache: cat ~/var/check_mk/snmp_cache/didactum-rack01 # Run service discovery: cmk -I didactum-rack01 # Check all services of the host: cmk -v didactum-rack01 # Debug a single check: cmk -v --detect-plugins=didactum_temperature didactum-rack01 # Reload Checkmk configuration (after changes): cmk -O # Activate all changes (command line): cmk -R # Test SNMP reachability directly: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Query a single OID: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # Check Event Console logs: tail -f ~/var/log/mkeventd.log # Check notification log: tail -f ~/var/log/notify.log # Checkmk main log: tail -f ~/var/log/cmc.log # CMC (Standard/Managed Edition) tail -f ~/var/log/nagios.log # Nagios-Core (Raw Edition) # Check site status: omd status # Restart site: omd restart
Appendix: Checkmk Configuration Quick Reference
| Task | Web interface navigation path |
|---|---|
| Create host | Setup → Hosts → Add host |
| Configure SNMP community | Setup → Hosts → Rulesets → SNMP credentials |
| Start service discovery | Setup → Hosts → <host> → Run service discovery |
| Periodic discovery | Setup → Hosts → Rulesets → Periodic service discovery |
| SNMP custom checks | Setup → Service monitoring rules → SNMP checks for custom values |
| Adjust thresholds | Setup → Service monitoring rules → <Plugin‑Name> |
| Notification rule | Setup → Events → Notifications → Add rule |
| Event Console | Setup → Events → Event Console → Event rules |
| Activate changes | Yellow button in the top right → Activate changes |
| Manage MIB files | ~/local/share/check_mk/mibs/ (command line) |
| Place own plugins | ~/local/lib/check_mk/base/plugins/agent_based/ |
| Maintenance window | Monitor → Schedule downtimes |
Always consult the current Didactum device documentation for firmware‑specific OIDs and supported sensor types.