- 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
25 lines
1.1 KiB
JSON
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}
|
|
}
|