145 lines
4.2 KiB
Nix
145 lines
4.2 KiB
Nix
{ config, pkgs, inputs, ... }:
|
|
let
|
|
promStateDir = "prometheus2";
|
|
grafanaDataDir = "grafana";
|
|
prometheusUid = "d8e758af-3f6b-4891-a855-1efe6cdec658";
|
|
blockyUrl = "10.10.10.53:4000";
|
|
prometheusPort = 9001;
|
|
grafanaPort = 9002;
|
|
|
|
secretCfg = {
|
|
sopsFile = inputs.self.secretsDir + /home-hypervisor/metrics.yaml;
|
|
owner = "grafana";
|
|
};
|
|
in
|
|
{
|
|
imports = [ inputs.ataraxiasjel-nur.nixosModules.prometheus-exporters ];
|
|
sops.secrets.grafana-oidc-id = secretCfg;
|
|
sops.secrets.grafana-oidc-secret = secretCfg;
|
|
|
|
services.prometheus = {
|
|
enable = true;
|
|
stateDir = promStateDir;
|
|
listenAddress = "127.0.0.1";
|
|
port = prometheusPort;
|
|
globalConfig.scrape_interval = "15s";
|
|
globalConfig.evaluation_interval = "15s";
|
|
exporters = {
|
|
podman = {
|
|
enable = true;
|
|
enabledCollectors = [ "enable-all" ];
|
|
port = 9012;
|
|
};
|
|
node = {
|
|
enable = true;
|
|
enabledCollectors = [ "systemd" ];
|
|
port = 9010;
|
|
};
|
|
zfs = {
|
|
enable = true;
|
|
port = 9011;
|
|
};
|
|
};
|
|
scrapeConfigs = [
|
|
{
|
|
job_name = "blocky";
|
|
static_configs = [ { targets = [ blockyUrl ]; } ];
|
|
}
|
|
{
|
|
job_name = "podman";
|
|
static_configs = [
|
|
{ targets = [ "localhost:${toString config.services.prometheus.exporters.podman.port}" ]; }
|
|
];
|
|
}
|
|
{
|
|
job_name = "node";
|
|
static_configs = [
|
|
{ targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ]; }
|
|
];
|
|
}
|
|
{
|
|
job_name = "zfs";
|
|
static_configs = [
|
|
{ targets = [ "localhost:${toString config.services.prometheus.exporters.zfs.port}" ]; }
|
|
];
|
|
}
|
|
];
|
|
};
|
|
services.grafana = {
|
|
enable = true;
|
|
dataDir = "/var/lib/${grafanaDataDir}";
|
|
declarativePlugins = with pkgs.grafanaPlugins; [ grafana-piechart-panel ];
|
|
settings = {
|
|
auth = {
|
|
signout_redirect_url = "https://auth.ataraxiadev.com/application/o/grafana/end-session/";
|
|
oauth_auto_login = true;
|
|
};
|
|
"auth.generic_oauth" = {
|
|
name = "authentik";
|
|
enabled = "true";
|
|
client_id = "$__file{${config.sops.secrets.grafana-oidc-id.path}}";
|
|
client_secret = "$__file{${config.sops.secrets.grafana-oidc-secret.path}}";
|
|
scopes = "openid email profile";
|
|
auth_url = "https://auth.ataraxiadev.com/application/o/authorize/";
|
|
token_url = "https://auth.ataraxiadev.com/application/o/token/";
|
|
api_url = "https://auth.ataraxiadev.com/application/o/userinfo/";
|
|
role_attribute_path = "contains(groups, 'grafanaAdmins') && 'Admin' || contains(groups, 'grafanaEditors') && 'Editor' || 'Viewer'";
|
|
};
|
|
users.auto_assign_org = true;
|
|
users.auto_assign_org_id = 1;
|
|
analytics.reporting_enabled = false;
|
|
server = {
|
|
domain = "stats.ataraxiadev.com";
|
|
http_addr = "127.0.0.1";
|
|
http_port = grafanaPort;
|
|
root_url = "https://%(domain)s/";
|
|
enable_gzip = true;
|
|
};
|
|
panels.disable_sanitize_html = true;
|
|
};
|
|
provision = {
|
|
enable = true;
|
|
datasources.settings = {
|
|
datasources = [
|
|
{
|
|
name = "Prometheus ${config.networking.hostName}";
|
|
type = "prometheus";
|
|
access = "proxy";
|
|
orgId = 1;
|
|
uid = prometheusUid;
|
|
url = "http://127.0.0.1:${toString config.services.prometheus.port}";
|
|
isDefault = true;
|
|
jsonData = {
|
|
httpMethod = "POST";
|
|
manageAlerts = true;
|
|
prometheusType = "Prometheus";
|
|
prometheusVersion = config.services.prometheus.package.version;
|
|
cacheLevel = "High";
|
|
};
|
|
editable = false;
|
|
}
|
|
];
|
|
};
|
|
dashboards = {
|
|
settings = {
|
|
providers = [
|
|
{
|
|
name = "Dashboards";
|
|
# folder = "Services";
|
|
options.path = import ./dashboards {
|
|
inherit pkgs prometheusUid;
|
|
blockyUrl = "http://${blockyUrl}";
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
persist.state.directories = [
|
|
"/var/lib/${promStateDir}"
|
|
"/var/lib/${grafanaDataDir}"
|
|
];
|
|
}
|