Files
Sanders 465b27d673 ServerMonitor: Dockerized health-check service with Telegram alerts
- Pure stdlib Python (3.12), runs on python:3.12-alpine as non-root
- Checks: ping, HTTP (expected codes), TCP ports, Netdata alarms + metrics
- Netdata v2 compatible: system.cpu (no idle dim), system.ram, disk_space.* discovery
- AlertEngine dedup: first alert, reminders, recovery (only after real alert)
- Baseline first-run (no alert storm on deploy), atomic state file, --once mode
- 20 unit tests passing; verified live against 192.168.0.5
2026-08-05 22:28:20 +03:00

25 lines
1.1 KiB
JSON

{
"host": "192.168.0.5",
"check_interval_sec": 60,
"reminder_interval_sec": 1800,
"timeout_sec": 5,
"state_file": "/data/state.json",
"telegram": {"bot_token": "", "chat_id": ""},
"thresholds": {"cpu_percent": 90, "ram_avail_mb": 2048, "disk_percent": 90},
"ping": {"enabled": true},
"http_checks": [
{"name": "Gitea", "url": "http://192.168.0.5:3000/", "expected": [200]},
{"name": "Unraid WebUI", "url": "http://192.168.0.5/", "expected": [200, 301, 302, 307]},
{"name": "MetaCubeXD", "url": "http://192.168.0.5:9090/ui/", "expected": [200]},
{"name": "Netdata", "url": "http://192.168.0.5:19999/", "expected": [200]},
{"name": "Plex", "url": "http://192.168.0.5:32400/", "expected": [200, 401]},
{"name": "Nginx 8080", "url": "http://192.168.0.5:8080/", "expected": [200]}
],
"tcp_checks": [
{"name": "MySQL", "host": "192.168.0.5", "port": 3306},
{"name": "SMB", "host": "192.168.0.5", "port": 445},
{"name": "Proxy 1984", "host": "192.168.0.5", "port": 1984}
],
"netdata": {"base_url": "http://192.168.0.5:19999", "check_alarms": true, "check_metrics": true}
}