homelab/lxc-metrics.nix

137 lines
3.2 KiB
Nix
Raw Normal View History

2025-08-24 01:23:15 -05:00
{
config,
inputs,
pkgs,
lib,
...
}:
2025-08-23 23:14:40 -05:00
{
imports = [
./lxc-base.nix
];
config = {
my.vm = {
name = "metrics01";
ip4 = "192.168.0.6";
};
2025-08-24 01:23:15 -05:00
environment.systemPackages = with pkgs; [
grafana-to-ntfy
];
2025-08-23 23:14:40 -05:00
networking.extraHosts = ''
192.168.0.2 xalicas
192.168.0.3 proxmox
192.168.0.4 craft01
192.168.0.5 lab01
192.168.0.6 metrics01
192.168.0.100 unifi
'';
networking.firewall.allowedTCPPorts = [ 3000 ];
services.grafana = {
enable = true;
settings = {
server = {
http_addr = "0.0.0.0";
http_port = 3000;
enable_gzip = true;
enforce_domain = false;
domain = "metrics.rperce.net";
};
};
};
2025-08-24 01:23:15 -05:00
## grafana-to-ntfy config is broken in nixpkgs, so we hardcode our own
systemd.services.grafana-to-ntfy = {
wantedBy = [ "multi-user.target" ];
script = "exec ${lib.getExe pkgs.grafana-to-ntfy}";
environment = {
NTFY_URL = "https://ntfy.sh/99ecef2d-05c1-4e73-9cc5-c9a1e6d0adf0";
BAUTH_USER = "grafana";
BAUTH_PASS = "grafana";
};
serviceConfig = {
DynamicUser = true;
CapabilityBoundingSet = [ "" ];
DeviceAllow = "";
LockPersonality = true;
PrivateDevices = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
MemoryDenyWriteExecute = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
];
UMask = "0077";
};
};
2025-08-23 23:14:40 -05:00
services.prometheus = {
enable = true;
port = 9001;
scrapeConfigs = [
2025-08-24 01:23:15 -05:00
{
job_name = "nodes";
static_configs = [
{
targets = [
"xalicas:9100"
"proxmox:9100"
"craft01:9100"
"lab01:9100"
"127.0.0.1:9100"
"unifi:9100"
];
}
];
2025-08-23 23:14:40 -05:00
}
2025-08-25 12:05:19 -05:00
{ job_name = "nut";
metrics_path = "/ups_metrics";
params = { ups = [ "minirack-1500va" ]; };
static_configs = [{
targets = [
"127.0.0.1:9199"
];
labels = {
ups = "minirack-1500va";
};
}];
}
];
};
services.prometheus.exporters.nut = {
enable = true;
nutServer = "xalicas";
nutVariables = [
"battery.charge" "battery.charge.low" "battery.charge.warning"
"battery.runtime" "battery.runtime.low"
"ups.load" "ups.power" "ups.power.nominal" "ups.realpower"
"ups.realpower.nominal" "ups.status"
2025-08-23 23:14:40 -05:00
];
};
};
}