2023-02-24 16:16:15 +02:00
|
|
|
{ cluster, config, depot, lib, tools, ... }:
|
2022-05-15 01:34:09 +03:00
|
|
|
let
|
|
|
|
inherit (tools.meta) domain;
|
|
|
|
|
2022-06-18 03:44:51 +03:00
|
|
|
inherit (config) links;
|
2022-05-15 01:34:09 +03:00
|
|
|
|
2023-05-26 17:26:24 +03:00
|
|
|
inherit (cluster.config.links) loki-ingest prometheus-ingest;
|
2022-08-04 00:36:50 +03:00
|
|
|
|
2022-12-17 21:22:49 +02:00
|
|
|
iniList = lib.concatStringsSep " ";
|
2022-05-15 01:34:09 +03:00
|
|
|
|
|
|
|
login = x: "https://login.${domain}/auth/realms/master/protocol/openid-connect/${x}";
|
|
|
|
in
|
|
|
|
{
|
2023-05-10 01:16:56 +03:00
|
|
|
age.secrets = {
|
|
|
|
grafana-db-credentials = {
|
|
|
|
file = ./secrets/grafana-db-credentials.age;
|
|
|
|
owner = "grafana";
|
|
|
|
};
|
|
|
|
grafana-secrets.file = ./secrets/grafana-secrets.age;
|
2022-05-15 01:34:09 +03:00
|
|
|
};
|
|
|
|
|
2022-06-18 03:44:51 +03:00
|
|
|
links = {
|
|
|
|
grafana.protocol = "http";
|
|
|
|
};
|
2022-05-15 01:34:09 +03:00
|
|
|
services.grafana = {
|
|
|
|
enable = true;
|
2023-02-24 16:16:15 +02:00
|
|
|
package = depot.packages.grafana;
|
2022-05-15 01:34:09 +03:00
|
|
|
dataDir = "/srv/storage/private/grafana";
|
2022-12-17 21:22:49 +02:00
|
|
|
settings = {
|
2022-12-17 21:28:27 +02:00
|
|
|
server = {
|
|
|
|
root_url = "https://monitoring.${domain}/";
|
|
|
|
http_port = links.grafana.port;
|
|
|
|
};
|
2023-05-10 01:16:56 +03:00
|
|
|
database = {
|
|
|
|
type = "postgres";
|
|
|
|
host = cluster.config.links.patroni-pg-access.tuple;
|
|
|
|
user = "grafana";
|
|
|
|
password = "$__file{${config.age.secrets.grafana-db-credentials.path}}";
|
|
|
|
};
|
2022-12-17 21:28:27 +02:00
|
|
|
analytics.reporting_enabled = false;
|
2022-12-17 21:22:49 +02:00
|
|
|
"auth.generic_oauth" = {
|
2022-05-15 01:34:09 +03:00
|
|
|
enabled = true;
|
|
|
|
allow_sign_up = true;
|
|
|
|
client_id = "net.privatevoid.monitoring1";
|
|
|
|
auth_url = login "auth";
|
|
|
|
token_url = login "token";
|
|
|
|
api_url = login "userinfo";
|
2022-12-17 21:22:49 +02:00
|
|
|
scopes = iniList [ "openid" "profile" "email" "roles" ];
|
2022-05-15 01:34:09 +03:00
|
|
|
role_attribute_strict = true;
|
|
|
|
role_attribute_path = "resource_access.monitoring.roles[0]";
|
|
|
|
};
|
|
|
|
security = {
|
|
|
|
cookie_secure = true;
|
|
|
|
disable_gravatar = true;
|
|
|
|
};
|
2022-12-17 21:22:49 +02:00
|
|
|
feature_toggles.enable = iniList [
|
2022-06-18 23:33:30 +03:00
|
|
|
"tempoSearch"
|
|
|
|
"tempoBackendSearch"
|
|
|
|
"tempoServiceGraph"
|
|
|
|
];
|
2022-05-15 01:34:09 +03:00
|
|
|
};
|
|
|
|
provision = {
|
|
|
|
enable = true;
|
2022-12-17 21:03:51 +02:00
|
|
|
datasources.settings.datasources = [
|
2022-05-15 01:34:09 +03:00
|
|
|
{
|
|
|
|
name = "Prometheus";
|
2022-12-17 21:03:51 +02:00
|
|
|
uid = "PBFA97CFB590B2093";
|
2023-05-26 17:26:24 +03:00
|
|
|
inherit (prometheus-ingest) url;
|
2022-05-15 01:34:09 +03:00
|
|
|
type = "prometheus";
|
|
|
|
isDefault = true;
|
|
|
|
}
|
2022-05-16 01:09:07 +03:00
|
|
|
{
|
|
|
|
name = "Loki";
|
2022-12-17 21:03:51 +02:00
|
|
|
uid = "P8E80F9AEF21F6940";
|
2022-08-04 00:36:50 +03:00
|
|
|
inherit (loki-ingest) url;
|
2022-05-16 01:09:07 +03:00
|
|
|
type = "loki";
|
|
|
|
}
|
2022-05-15 01:34:09 +03:00
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
systemd.services.grafana.serviceConfig = {
|
|
|
|
EnvironmentFile = config.age.secrets.grafana-secrets.path;
|
|
|
|
};
|
|
|
|
|
2022-06-18 03:44:51 +03:00
|
|
|
services.nginx.virtualHosts."monitoring.${domain}" = lib.recursiveUpdate (tools.nginx.vhosts.proxy links.grafana.url) {
|
2022-05-16 01:11:36 +03:00
|
|
|
locations."/".proxyWebsockets = true;
|
|
|
|
};
|
2022-05-15 01:34:09 +03:00
|
|
|
|
|
|
|
services.prometheus = {
|
|
|
|
enable = true;
|
2023-05-26 17:26:24 +03:00
|
|
|
listenAddress = prometheus-ingest.ipv4;
|
|
|
|
inherit (prometheus-ingest) port;
|
2022-06-19 00:24:12 +03:00
|
|
|
extraFlags = [ "--enable-feature=remote-write-receiver" ];
|
2022-05-15 01:34:09 +03:00
|
|
|
globalConfig = {
|
|
|
|
scrape_interval = "60s";
|
|
|
|
};
|
2023-06-02 19:33:03 +03:00
|
|
|
scrapeConfigs = [ ];
|
2022-05-15 01:34:09 +03:00
|
|
|
};
|
2022-05-16 01:09:07 +03:00
|
|
|
|
2022-05-15 01:34:09 +03:00
|
|
|
}
|