- Add automatic SD image builds for Raspberry Pi via Forgejo Actions - Enable binfmt emulation on cryodev-main for aarch64 cross-builds - Add sd-image.nix module to cryodev-pi configuration - Create comprehensive docs/ structure with installation guides - Split installation docs into: first-install (server), reinstall, new-client (Pi) - Add lib/utils.nix and apps/rebuild from synix - Fix headplane module for new upstream API (tale/headplane) - Fix various module issues (mailserver stateVersion, option conflicts) - Add placeholder secrets.yaml files for both hosts - Remove old INSTRUCTIONS.md (content moved to docs/)
3.7 KiB
3.7 KiB
Netdata Monitoring
Netdata provides real-time performance monitoring with parent/child streaming.
Architecture
┌─────────────────┐ Stream over ┌─────────────────┐
│ cryodev-pi │ ───────────────────>│ cryodev-main │
│ (Child Node) │ Tailscale VPN │ (Parent Node) │
└─────────────────┘ └─────────────────┘
│
v
https://netdata.cryodev.xyz
References
Parent Node (cryodev-main)
DNS
Set a CNAME record for netdata.cryodev.xyz pointing to your main domain.
Generate Stream API Key
uuidgen
Configuration
# hosts/cryodev-main/services/netdata.nix
{ config, ... }:
{
sops.secrets."netdata/stream-api-key" = { };
sops.templates."netdata-stream.conf" = {
content = ''
[${config.sops.placeholder."netdata/stream-api-key"}]
enabled = yes
default history = 3600
default memory mode = ram
health enabled by default = auto
allow from = *
'';
owner = "netdata";
};
services.netdata = {
enable = true;
configDir."stream.conf" = config.sops.templates."netdata-stream.conf".path;
};
}
Child Node (cryodev-pi)
Generate Child UUID
uuidgen
Add to Secrets
sops hosts/cryodev-pi/secrets.yaml
netdata:
stream:
child-uuid: "your-generated-uuid"
Note: The stream API key must match the parent's key. You can either:
- Share the same secret between hosts (complex with SOPS)
- Hardcode a known API key in both configurations
Configuration
# hosts/cryodev-pi/services/netdata.nix
{ config, constants, ... }:
{
sops.secrets."netdata/stream/child-uuid" = { };
sops.templates."netdata-stream.conf" = {
content = ''
[stream]
enabled = yes
destination = ${constants.hosts.cryodev-main.ip}:19999
api key = YOUR_STREAM_API_KEY
send charts matching = *
'';
owner = "netdata";
};
services.netdata = {
enable = true;
configDir."stream.conf" = config.sops.templates."netdata-stream.conf".path;
};
}
Email Alerts
Configure Netdata to send alerts via the mailserver:
{
services.netdata.configDir."health_alarm_notify.conf" = pkgs.writeText "notify.conf" ''
SEND_EMAIL="YES"
EMAIL_SENDER="netdata@cryodev.xyz"
DEFAULT_RECIPIENT_EMAIL="admin@cryodev.xyz"
'';
}
Usage
Access Dashboard
Open https://netdata.cryodev.xyz in your browser.
View Child Nodes
Child nodes appear in the left sidebar under "Nodes".
Check Streaming Status
On parent:
curl -s http://localhost:19999/api/v1/info | jq '.hosts'
On child:
curl -s http://localhost:19999/api/v1/info | jq '.streaming'
Troubleshooting
Check Service Status
sudo systemctl status netdata
View Logs
sudo journalctl -u netdata -f
Child Not Streaming
-
Verify network connectivity:
tailscale ping cryodev-main nc -zv <parent-ip> 19999 -
Check API key matches between parent and child
-
Verify firewall allows port 19999 on parent
High Memory Usage
Adjust history settings in netdata.conf:
[global]
history = 1800 # seconds to retain
memory mode = ram