Checkmk is a comprehensive IT monitoring platform that combines infrastructure monitoring, alerting, and visualization. Its agent-based approach provides deep visibility into server health, including CPU, memory, disk, network, services, and application-level metrics. This guide covers deploying Checkmk for VPS monitoring.
Installation (Checkmk Raw Edition)
# Download and install
wget https://download.checkmk.com/checkmk/2.3.0/check-mk-raw-2.3.0_0.jammy_amd64.deb
sudo apt install ./check-mk-raw-2.3.0_0.jammy_amd64.deb
# Create a monitoring site
sudo omd create monitoring
sudo omd start monitoring
# Access web interface
# https://your-server/monitoring
# Default credentials: cmkadmin / (shown during omd create)
Installing Agents on Monitored Hosts
# Download agent from Checkmk server
wget https://your-checkmk-server/monitoring/check_mk/agents/check-mk-agent_2.3.0-1_all.deb
sudo dpkg -i check-mk-agent_2.3.0-1_all.deb
# Agent listens on port 6556 by default
# Test agent output
check_mk_agent | head -20
# Register with server (agent bakery for TLS)
sudo cmk-agent-ctl register --hostname myserver --server checkmk-server --site monitoring --user cmkadmin
Adding Hosts
# Via web interface:
# 1. Setup → Hosts → Add host
# 2. Enter hostname and IP address
# 3. Save and run service discovery
# 4. Accept discovered services
# 5. Activate changes
# Via CLI
sudo -u monitoring cmk -N myserver # Add host
sudo -u monitoring cmk -I myserver # Discover services
sudo -u monitoring cmk -O # Activate changes
Monitored Services (Auto-Discovered)
- CPU utilization and load
- Memory and swap usage
- Disk space and I/O
- Network interfaces and traffic
- Running processes and services
- System uptime
- NTP synchronization
- Docker containers (if Docker is installed)
- MySQL, PostgreSQL, MongoDB (with plugins)
- Nginx, Apache status
Custom Check Plugins
#!/bin/bash
# /usr/lib/check_mk_agent/local/check_disk_temperature
# Custom local check for disk temperature
TEMP=$(smartctl -A /dev/sda | grep Temperature_Celsius | awk '{print $10}')
if [ "$TEMP" -gt 50 ]; then
echo "2 Disk_Temperature temp=$TEMP;45;50 CRITICAL - Disk temperature ${TEMP}C"
elif [ "$TEMP" -gt 45 ]; then
echo "1 Disk_Temperature temp=$TEMP;45;50 WARNING - Disk temperature ${TEMP}C"
else
echo "0 Disk_Temperature temp=$TEMP;45;50 OK - Disk temperature ${TEMP}C"
fi
# Make executable
chmod +x /usr/lib/check_mk_agent/local/check_disk_temperature
Alerting
# Checkmk supports multiple notification channels:
# - Email (built-in)
# - Slack (webhook)
# - PagerDuty
# - Microsoft Teams
# - Custom scripts
# Configure in: Setup → Events → Notification rules
# Define: who to notify, for which hosts/services, and how
Best Practices
- Use agent bakery for automated agent deployment and updates
- Organize hosts into folders by environment (production, staging, development)
- Set up host and service groups for logical grouping
- Configure business intelligence (BI) aggregations for service-level views
- Use the REST API for automation and integration with CI/CD pipelines
- Enable TLS encryption for agent communication in production