2023-01-22 02:18:21 +01:00
|
|
|
{ config, pkgs, values, ... }: let
|
2022-12-20 21:44:22 +01:00
|
|
|
cfg = config.services.grafana;
|
|
|
|
in {
|
2023-01-22 02:18:21 +01:00
|
|
|
sops.secrets = let
|
|
|
|
owner = "grafana";
|
|
|
|
group = "grafana";
|
|
|
|
in {
|
|
|
|
"keys/grafana/secret_key" = { inherit owner group; };
|
|
|
|
"keys/grafana/admin_password" = { inherit owner group; };
|
|
|
|
};
|
|
|
|
|
2022-12-19 22:56:42 +01:00
|
|
|
services.grafana = {
|
|
|
|
enable = true;
|
2023-01-22 02:18:21 +01:00
|
|
|
|
|
|
|
settings = let
|
|
|
|
# See https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#file-provider
|
|
|
|
secretFile = path: "$__file{${path}}";
|
|
|
|
in {
|
|
|
|
server = {
|
|
|
|
domain = "ildkule.pvv.ntnu.no";
|
|
|
|
http_port = 2342;
|
|
|
|
http_addr = "127.0.0.1";
|
|
|
|
};
|
|
|
|
|
|
|
|
security = {
|
|
|
|
secret_key = secretFile config.sops.secrets."keys/grafana/secret_key".path;
|
|
|
|
admin_password = secretFile config.sops.secrets."keys/grafana/admin_password".path;
|
|
|
|
};
|
2022-12-19 22:56:42 +01:00
|
|
|
};
|
2023-01-22 02:18:21 +01:00
|
|
|
|
2022-12-20 00:26:29 +01:00
|
|
|
provision = {
|
|
|
|
enable = true;
|
|
|
|
datasources.settings.datasources = [
|
|
|
|
{
|
|
|
|
name = "Ildkule Prometheus";
|
|
|
|
type = "prometheus";
|
|
|
|
url = ("http://${config.services.prometheus.listenAddress}:${toString config.services.prometheus.port}");
|
|
|
|
isDefault = true;
|
|
|
|
}
|
2022-12-20 13:08:26 +01:00
|
|
|
{
|
|
|
|
name = "Ildkule loki";
|
|
|
|
type = "loki";
|
|
|
|
url = ("http://${config.services.loki.configuration.server.http_listen_address}:${toString config.services.loki.configuration.server.http_listen_port}");
|
|
|
|
}
|
2022-12-20 00:26:29 +01:00
|
|
|
];
|
2022-12-20 00:38:08 +01:00
|
|
|
dashboards.settings.providers = [
|
|
|
|
{
|
|
|
|
name = "Node Exporter Full";
|
|
|
|
type = "file";
|
|
|
|
url = "https://grafana.com/api/dashboards/1860/revisions/29/download";
|
|
|
|
options.path = dashboards/node-exporter-full.json;
|
|
|
|
}
|
2022-12-20 23:10:00 +01:00
|
|
|
{
|
|
|
|
name = "Matrix Synapse";
|
|
|
|
type = "file";
|
|
|
|
url = "https://raw.githubusercontent.com/matrix-org/synapse/develop/contrib/grafana/synapse.json";
|
|
|
|
options.path = dashboards/synapse.json;
|
|
|
|
}
|
2023-07-10 00:00:13 +02:00
|
|
|
# TODO: enable once https://github.com/NixOS/nixpkgs/pull/242365 gets merged
|
|
|
|
# {
|
|
|
|
# name = "MySQL";
|
|
|
|
# type = "file";
|
|
|
|
# url = "https://raw.githubusercontent.com/prometheus/mysqld_exporter/main/mysqld-mixin/dashboards/mysql-overview.json";
|
|
|
|
# options.path = dashboards/mysql.json;
|
|
|
|
# }
|
2023-01-22 02:28:19 +01:00
|
|
|
{
|
|
|
|
name = "Postgresql";
|
|
|
|
type = "file";
|
|
|
|
url = "https://grafana.com/api/dashboards/9628/revisions/7/download";
|
|
|
|
options.path = dashboards/postgres.json;
|
|
|
|
}
|
2023-01-23 14:48:21 +01:00
|
|
|
{
|
|
|
|
name = "Go Processes (gogs)";
|
|
|
|
type = "file";
|
|
|
|
url = "https://grafana.com/api/dashboards/240/revisions/3/download";
|
|
|
|
options.path = dashboards/go-processes.json;
|
|
|
|
}
|
2022-12-20 00:38:08 +01:00
|
|
|
];
|
|
|
|
|
2022-12-20 00:26:29 +01:00
|
|
|
};
|
2022-12-19 22:56:42 +01:00
|
|
|
};
|
|
|
|
|
2022-12-20 21:44:22 +01:00
|
|
|
services.nginx.virtualHosts.${cfg.settings.server.domain} = {
|
2022-12-20 15:58:12 +01:00
|
|
|
enableACME = true;
|
|
|
|
forceSSL = true;
|
2024-04-10 22:01:19 +02:00
|
|
|
kTLS = true;
|
2022-12-19 22:56:42 +01:00
|
|
|
locations = {
|
|
|
|
"/" = {
|
2022-12-20 21:44:22 +01:00
|
|
|
proxyPass = "http://127.0.0.1:${toString cfg.settings.server.http_port}";
|
2022-12-19 22:56:42 +01:00
|
|
|
proxyWebsockets = true;
|
|
|
|
extraConfig = ''
|
|
|
|
proxy_buffers 8 1024k;
|
|
|
|
proxy_buffer_size 1024k;
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|