{ me, lib, pkgs, auxiliaryPkgs, ... }: let inherit (pkgs) victoriametrics grafana dockerTools; inherit (auxiliaryPkgs) common; victoriaLocalPort = 8428; grafanaLocalPort = 7181; monitoringDir = "/srv/monitoring"; victoriaDir = "${monitoringDir}/victoria"; grafanaDir = "${monitoringDir}/grafana"; victoriaImage = dockerTools.streamLayeredImage { name = "victoriametrics"; tag = victoriametrics.version; fromImage = common.alpine.base; contents = [ victoriametrics ]; }; grafanaImage = dockerTools.streamLayeredImage { name = "grafana"; tag = grafana.version; fromImage = common.alpine.base; contents = [ grafana ]; extraCommands = '' mkdir -p ./var/lib/grafana ln -fs ${grafana}/share/grafana/conf ./var/lib/grafana/ ln -fs ${grafana}/share/grafana/public ./var/lib/grafana/ ''; }; in { foundation.service.monitoring = { victoria = { image = victoriaImage; ports = [ (common.tailnetPort me victoriaLocalPort) ]; volumes = [ [ "${victoriaDir}" "/var/lib/victoria" ] ]; entrypoint = lib.getExe victoriametrics; cmd = [ "-storageDataPath=/var/lib/victoria" "-httpListenAddr=:${toString victoriaLocalPort}" ]; }; grafana = { image = grafanaImage; ports = [ [ grafanaLocalPort 3000 ] ]; volumes = [ [ "${monitoringDir}/grafana.ini" "/etc/grafana/grafana.ini" ] [ "${grafanaDir}/data" "/var/lib/grafana/data" ] [ "${grafanaDir}/plugins" "/var/lib/grafana/plugins" ] [ "${grafanaDir}/provision" "/var/lib/grafana/provision" ] ]; workdir = "/var/lib/grafana"; entrypoint = lib.getExe' grafana "grafana"; cmd = [ "server" "--homepath=/var/lib/grafana" "--config=/etc/grafana/grafana.ini" "--packaging=docker" ]; }; }; services.nginx.virtualHosts.renard.locations = { "/grafana" = { return = "301 $scheme://$host$request_uri/"; }; "/grafana/" = { proxyPass = "http://127.0.0.1:${toString grafanaLocalPort}/grafana/"; recommendedProxySettings = true; proxyWebsockets = true; }; }; }