pvv-nixos-config/hosts/ildkule/services/monitoring/grafana.nix

99 lines
3.0 KiB
Nix
Raw Normal View History

{ config, pkgs, values, ... }: let
2022-12-20 21:44:22 +01:00
cfg = config.services.grafana;
in {
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;
settings = let
# See https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#file-provider
secretFile = path: "$__file{${path}}";
in {
server = {
domain = "grafana.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
};
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;
}
{
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;
}
# 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;
# }
{
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;
'';
};
};
};
}