-
Me
The one who gets the alerts and has to believe them.
-
Discord channels
One channel per severity and another for recoveries.
-
Alerts room (Matrix)
High severity only, end-to-end encrypted.
-
Router
Watched by ping and HTTPS, with no admin credentials.
-
Internal door
The panel, only from home or the VPN with two-factor.
-
Hermes
Reads a status snapshot to answer questions.
-
Zabbix agent
In active mode: the agent is the one sending data. Passive listening only on loopback, with CPU capped at 10 %.
-
Encryption with its own key
Each agent has its pre-shared key. Without it, the server won't accept its data.
- Zabbix
- Linux / SSH hardening
-
Read-only collectors
Scripts that check ZFS, RAID, SMART without waking sleeping disks, and Docker health, leaving a JSON the agent reads.
-
No remote execution
The agent's remote commands are forbidden: compromising the monitoring server gives no control over the others.
-
Zabbix server
Receives, stores and evaluates. LTS release.
-
Problem rules
When a metric is a problem and when it stops being one. Almost all the noise lived here.
-
History
14 days of detail, 90 of trends and events.
-
Zabbix API
Only reachable from inside the container. Registering new hosts goes through the hypervisor.
-
Routing by severity
Each severity goes to its channel. Minor stuff doesn't reach the phone.
-
Email
High severity only, with verified TLS.
-
Chat
Discord from average up; Element only for high.
-
Recovery notice
Every problem also notifies when fixed. Without that you don't know if it's still going on.
-
Registration script
Adds a new container to Zabbix and Wazuh at once, with a new key, in a single command.
-
Keys in the vault
The script writes the agent's key straight into the encrypted Ansible vault.
-
Server firewall
Only accepts agents from known addresses. A new container has to be added here too.
-
This site
The lab's LEDs and availability come from here, as aggregates.