Files
cyper-nix/nixos/roles/monitoring.nix
T

155 lines
3.9 KiB
Nix

{
config,
lib,
...
}:
let
serverIP = builtins.head (
builtins.match "([0-9.]+)/.*" config.systemd.network.networks."10-ethernet".networkConfig.Address
);
nodePort = toString config.services.prometheus.exporters.node.port;
mkNodeJob = name: ip: {
job_name = name;
static_configs = [ { targets = [ "${ip}:${nodePort}" ]; } ];
};
extraNodes = {
"cyper-desktop" = "192.168.2.40";
"cyper-node-1" = "192.168.2.30";
"cyper-node-2" = "192.168.2.31";
"cyper-proxy" = "178.254.8.35";
};
in
{
sops.secrets = {
grafana_secret_key = {
owner = "grafana";
group = "grafana";
};
kanidm_grafana_secret = {
owner = "grafana";
group = "grafana";
};
};
services = {
grafana = {
enable = true;
provision = {
enable = true;
datasources.settings = {
apiVersion = 1;
datasources = [
{
name = "Prometheus";
type = "prometheus";
url = "http://127.0.0.1:${toString config.services.prometheus.port}";
isDefault = true;
}
];
};
};
settings = {
server = {
domain = "www.cyperpunk.de"; # serverIP; # "grafana.cyperpunk.de";
http_port = 2342;
http_addr = "0.0.0.0";
root_url = "https://www.cyperpunk.de/grafana/";
serve_from_sub_path = true;
};
security = {
secret_key = "$__file{${config.sops.secrets.grafana_secret_key.path}}";
allow_embedding = true;
};
auth = {
disable_login_form = false;
oauth_allow_insecure_email_lookup = true;
};
"auth.generic_oauth" = {
enabled = true;
name = "Kanidm";
client_id = "grafana";
client_secret = "$__file{${config.sops.secrets.kanidm_grafana_secret.path}}";
scopes = "openid profile email";
auth_url = "https://auth.cyperpunk.de/ui/oauth2";
token_url = "https://auth.cyperpunk.de/oauth2/token";
api_url = "https://auth.cyperpunk.de/oauth2/openid/grafana/userinfo";
use_pkce = false;
allow_sign_up = true;
auto_assign_org = true;
auto_assign_org_id = 1;
auto_assign_org_role = "Admin";
skip_org_role_sync = true;
};
};
};
# TODO: Computers should register themselves
prometheus = {
enable = true;
port = 9001;
scrapeConfigs = [
(mkNodeJob config.networking.hostName serverIP)
{
job_name = "gitea";
static_configs = [
{
targets = [
"localhost:${toString config.services.gitea.settings.server.HTTP_PORT}"
];
}
];
metrics_path = "/metrics";
}
{
job_name = "synapse";
scrape_interval = "15s";
metrics_path = "/_synapse/metrics";
static_configs = [
{
targets = [ "100.109.10.91:9009" ];
labels = {
instance = "cyper-proxy";
job = "master";
index = "1";
};
}
];
}
{
job_name = "postgresql-replica";
static_configs = [
{
targets = [ "localhost:9188" ];
labels = {
instance = config.networking.hostName;
};
}
];
}
{
job_name = "postgresql-proxy";
static_configs = [
{
targets = [ "100.109.10.91:9188" ];
labels = {
instance = "cyper-proxy";
};
}
];
}
]
++ (lib.mapAttrsToList mkNodeJob extraNodes);
};
};
networking.firewall.allowedTCPPorts = [
2342
9001
3100
];
}