nix-config/hosts/grafana/default.nix

119 lines
3.5 KiB
Nix

{ config, pkgs, ... }:
let
restartServices = [ "grafana" "influxdb" ];
in {
microvm.mem = 4096;
c3d2.deployment = {
server = "server10";
mounts = [ "etc" "home" "var"];
};
c3d2.isInHq = false;
services.openssh.enable = true;
networking.hostName = "grafana";
# http https influxdb
networking.firewall.allowedTCPPorts = [ 80 443 8086 ];
# collectd
networking.firewall.allowedUDPPorts = [ 25826 ];
services.nginx = {
enable = true;
virtualHosts = {
"grafana.hq.c3d2.de" = {
default = true;
enableACME = true;
forceSSL = true;
locations = { "/".proxyPass = "http://localhost:3000/"; };
};
};
};
services.grafana = {
enable = true;
provision = {
enable = true;
# curl https://root:SECRET@grafana.hq.c3d2.de/api/datasources | jq > hosts/grafana/datasources.json
datasources.settings.datasources = map (datasource: {
inherit (datasource) name type access orgId url password user database isDefault jsonData;
}) (with builtins; fromJSON (readFile ./datasources.json));
dashboards.settings.providers = [ {
settings = {
apiVersion = 1;
providers = [ {
name = "c3d2";
} ];
};
# for id in `curl https://root:SECRET@grafana.hq.c3d2.de/api/search | jq -j 'map(.uid) | join(" ")'`; do curl https://root:SECRET@grafana.hq.c3d2.de/api/dashboards/uid/$id | jq .dashboard > hosts/grafana/dashboards/$id.json;done
options.path = ./dashboards;
} ];
};
settings = {
"auth.anonymous" = {
enabled = false;
org_name = "Chaos";
};
security = {
admin_password = "$__file{${config.sops.secrets."grafana/admin-password".path}}";
secret_key = "$__file{${config.sops.secrets."grafana/secret-key".path}}";
};
server.domain = "grafana.hq.c3d2.de";
users.allow_sign_up = false;
};
};
services.influxdb = let
collectdTypes = pkgs.runCommand "collectd-types" {} ''
mkdir -p $out/share/collectd
cat ${pkgs.collectd-data}/share/collectd/types.db >> $out/share/collectd/types.db
echo "stations value:GAUGE:0:U" >> $out/share/collectd/types.db
'';
in {
enable = true;
extraConfig = {
logging.level = "debug";
collectd = [{
enabled = true;
database = "collectd";
typesdb = "${collectdTypes}/share/collectd/types.db";
# create retention policy "30d" on collectd duration 30d replication 1 default
retention-policy = "30d";
}];
};
};
systemd.services =
builtins.foldl' (services: service:
services // {
"${service}".serviceConfig = {
RestartSec = 60;
Restart = "always";
};
}
) {} restartServices
// {
# work around our slow storage that can't keep up
influxdb.serviceConfig.LimitNOFILE = "1048576:1048576";
influxdb.serviceConfig.TimeoutStartSec = "infinity";
};
environment.systemPackages = with pkgs; [ influxdb ];
sops = {
defaultSopsFile = ./secrets.yaml;
secrets = {
"grafana/admin-password" = {
group = config.systemd.services.grafana.serviceConfig.User;
owner = config.systemd.services.grafana.serviceConfig.User;
};
"grafana/secret-key" = {
group = config.systemd.services.grafana.serviceConfig.User;
owner = config.systemd.services.grafana.serviceConfig.User;
};
};
};
system.stateVersion = "22.05";
}