Add platform-specific notes: ZFS memory, user systemd, group name quoting
This commit is contained in:
@@ -183,6 +183,88 @@ systemctl daemon-reload
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Platform-specific notes
|
||||||
|
|
||||||
|
### ZFS servers (high memory usage)
|
||||||
|
|
||||||
|
ZFS uses all available RAM as disk cache (ARC) by design. This causes `/proc/meminfo`'s
|
||||||
|
`MemAvailable` to appear very low even when the system is healthy, triggering false
|
||||||
|
`degraded` or `offline` memory alerts.
|
||||||
|
|
||||||
|
**Fix:** raise the memory thresholds in `ethica-agent.yml` on ZFS hosts:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- type: system_memory
|
||||||
|
name: Memory
|
||||||
|
degrade_threshold: 97 # ZFS ARC fills all free RAM — not a real shortage
|
||||||
|
offline_threshold: 99
|
||||||
|
```
|
||||||
|
|
||||||
|
**Monitor ZFS pool health instead** using `custom_cmd` (see `widgets/custom-cmd.yml`):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- type: custom_cmd
|
||||||
|
name: rpool
|
||||||
|
kind: system
|
||||||
|
cmd: H=$(zpool list -H -o health rpool 2>/dev/null); C=$(zpool list -H -o cap rpool 2>/dev/null | tr -d %); [ "$H" = "ONLINE" ] || exit 2; [ "$C" -ge 90 ] && exit 2; [ "$C" -ge 75 ] && exit 1; exit 0
|
||||||
|
|
||||||
|
- type: custom_cmd
|
||||||
|
name: storage pool
|
||||||
|
kind: system
|
||||||
|
cmd: H=$(zpool list -H -o health data 2>/dev/null); C=$(zpool list -H -o cap data 2>/dev/null | tr -d %); [ "$H" = "ONLINE" ] || exit 2; [ "$C" -ge 90 ] && exit 2; [ "$C" -ge 75 ] && exit 1; exit 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Replace `rpool` / `data` with your actual pool names (`zpool list` to check).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Servers without sudo (user systemd service)
|
||||||
|
|
||||||
|
If the SSH user does not have sudo, use a user-level systemd service instead:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.config/systemd/user/
|
||||||
|
cat > ~/.config/systemd/user/ethica-agent.service << 'EOF'
|
||||||
|
[Unit]
|
||||||
|
Description=Ethica Agent
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/ethica-agent
|
||||||
|
EnvironmentFile=/opt/ethica-agent/.env
|
||||||
|
ExecStart=/usr/bin/python3 /opt/ethica-agent/ethica-agent.py --config /opt/ethica-agent/ethica-agent.yml
|
||||||
|
Restart=always
|
||||||
|
RestartSec=15
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable --now ethica-agent
|
||||||
|
systemctl --user status ethica-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
**Auto-start on boot** (requires root once):
|
||||||
|
```bash
|
||||||
|
sudo loginctl enable-linger $USER
|
||||||
|
```
|
||||||
|
|
||||||
|
Without `enable-linger`, the user service stops when the SSH session closes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Server groups with spaces in the name
|
||||||
|
|
||||||
|
When `ETHICA_GROUP` contains spaces, quote it in `.env`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ETHICA_GROUP="Mail Server" # correct
|
||||||
|
ETHICA_GROUP=Mail Server # wrong — bash splits on space
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Docker alternative
|
## Docker alternative
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Reference in New Issue
Block a user