64 lines
1.6 KiB
Nix
64 lines
1.6 KiB
Nix
{ depot, lib, ... }:
|
|
|
|
{
|
|
systemd.mounts = let
|
|
bindMount' = dir: {
|
|
unitConfig.RequiresMountsFor = dir;
|
|
options = "bind";
|
|
what = "/persist${dir}";
|
|
where = dir;
|
|
};
|
|
bindMountSvc = dir: svc: (bindMount' dir) // {
|
|
bindsTo = [svc];
|
|
partOf = [svc];
|
|
};
|
|
bindMount = dir: (bindMount' dir) // {
|
|
wantedBy = ["multi-user.target"];
|
|
};
|
|
in [
|
|
(bindMountSvc "/var/lib/prometheus" "prometheus.service")
|
|
(bindMountSvc "/var/lib/grafana" "grafana.service")
|
|
];
|
|
|
|
services.prometheus = {
|
|
enable = true;
|
|
stateDir = "prometheus";
|
|
globalConfig.scrape_interval = "1s";
|
|
scrapeConfigs = let
|
|
staticConfig = name: ip: {
|
|
targets = [ ip ];
|
|
labels.host = name;
|
|
};
|
|
workers = [
|
|
(staticConfig "worker1" "10.200.109.10")
|
|
(staticConfig "worker2" "10.200.109.11")
|
|
];
|
|
gameservers = [
|
|
(staticConfig "csgo1" "10.200.109.12")
|
|
(staticConfig "csgo2" "10.200.109.13")
|
|
];
|
|
allHosts = workers ++ gameservers;
|
|
withPort' = port: { targets, ... }@f: (f // {
|
|
targets = builtins.map (x: "${x}:${toString port}") f.targets;
|
|
});
|
|
withPort = port: cfgs: builtins.map (withPort' port) cfgs;
|
|
in [
|
|
{
|
|
job_name = "node_exporter";
|
|
static_configs = withPort 9100 allHosts;
|
|
}
|
|
{
|
|
job_name = "hl2prom";
|
|
static_configs = withPort 22000 gameservers;
|
|
scrape_interval = "1s";
|
|
}
|
|
];
|
|
};
|
|
|
|
services.grafana = {
|
|
addr = "0.0.0.0";
|
|
enable = true;
|
|
};
|
|
|
|
networking.firewall.allowedTCPPorts = lib.mkAfter [ 3000 ];
|
|
}
|