{ config, pkgs, ... }: let cfg = config.services.grafana; in { services.grafana = { enable = true; dataDir = "/tank/services/metrics/grafana"; # TODO: Migrate sqlite to postgres settings.server = { domain = "grafana.home.feal.no"; http_port = 2342; http_addr = "127.0.0.1"; }; provision = { enable = true; datasources.settings.datasources = [ { name = "Prometheus"; type = "prometheus"; uid = "prom1"; url = ("http://${config.services.prometheus.listenAddress}:${toString config.services.prometheus.port}"); isDefault = true; } { name = "Loki"; type = "loki"; url = ("http://${config.services.loki.configuration.server.http_listen_address}:${toString config.services.loki.configuration.server.http_listen_port}"); } ]; 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; } { name = "Synology NAS Details"; type = "file"; url = "https://grafana.com/api/dashboards/14284/revisions/9/download"; options.path = dashboards/synology-nas-details.json; } ]; }; }; services.nginx.virtualHosts.${cfg.settings.server.domain} = { locations = { "/" = { proxyPass = "http://127.0.0.1:${toString cfg.settings.server.http_port}"; proxyWebsockets = true; extraConfig = '' proxy_buffers 8 1024k; proxy_buffer_size 1024k; ''; }; }; }; }