A client had ten servers, two Hyper-V hosts, a switch, a firewall and Veeam backup — but zero visibility: they found out a disk was full when the app went down. We put everything under Checkmk, hosted on our Hetzner servers, with agents and alerts. Here is how.
The requirement: know before it falls
They wanted a single place to see the state of the whole infrastructure — CPU, RAM, disks, services, temperatures, backup and VM status — and to be alerted automatically before something failed, not after.
In short: one screen for everything that moves in the company; when something goes wrong, you get a message before the app stops.
Architecture
Checkmk runs on Cymmunity's Hetzner servers (we don't load the client's infrastructure). Each client server has an agent, the switch and firewall are read via SNMP, and Hyper-V, SQL and Veeam get dedicated plugins. The central site connects to each agent (pull mode, TLS on port 6556) and pulls the data every cycle; it also sends the alerts.
Installing Checkmk and the site
On the central Hetzner server we installed the Checkmk package and created a monitoring site with omd.
# Debian/Ubuntu — Checkmk Raw (free) or Enterprise
apt install ./check-mk-raw-2.3.0p*_0.bookworm_amd64.deb
omd create monitor # creates the 'monitor' site
omd config monitor set ADMIN_MAIL alerts@cymmunity.ro
omd start monitor # start; UI at https://server/monitor/
omd status monitor
The agents on the client servers
On each server we deployed the agent, registered with TLS and a certificate: no more open, unauthenticated port, and the central server pulls the data. On Linux it was:
# the agent (deb/rpm from UI: Setup > Agents)
dpkg -i check-mk-agent_2.3.0p*.deb
# encrypted registration to the central site
cmk-agent-ctl register --hostname web01 \
--server checkmk.cymmunity.ro --site monitor \
--user automation --password '***'
cmk-agent-ctl status # verify TLS + connectionOn Windows we installed check_mk_agent.msi and ran the same cmk-agent-ctl register. Then, from the UI, we ran discovery and activated the services:
cmk -vI web01 # discover services on the host
cmk -O # activate changes (reload monitor)
Special monitoring: Hyper-V, SQL, Veeam, network
This is the value: not just CPU/disk, but the things that matter. Agent plugins add specific states.
# Hyper-V (Windows agent): VM state, checkpoints, replication
# MSSQL: sessions, jobs, space, backup age
# Veeam: last backup job result (OK / warning / failed)
# switch + firewall via SNMP:
cmk -v --snmpwalk sw01
cmk -vI sw01 # ports, temperature, uptime, trafficIn short: you also get alerted if the last backup failed or a VM's replication fell behind — exactly what you can't see with the naked eye.
Alerts + dashboards + API
Email and Telegram alerts with escalation. Hosts can be added via the API too (handy for tens of servers).
# Telegram/email notifications by rules (Setup > Notifications)
# add host via REST API:
curl -X POST 'https://checkmk.cymmunity.ro/monitor/check_mk/api/1.0/domain-types/host_config/collections/all' \
-H "Authorization: Bearer automation ***" -H 'Content-Type: application/json' \
-d '{"folder":"/clients/acme","host_name":"db01","attributes":{"ipaddress":"10.0.0.9"}}'
curl -X POST '.../domain-types/activate_changes/actions/activate-changes/invoke' ...
Result
The client now has a single board with the whole infrastructure, green/amber/red, and gets alerted before anything falls — disk nearly full, failed backup, stopped VM, switch temperature. We keep Checkmk on our servers, update it and monitor it 24/7. When a new service appears, we add it via the API in seconds.