From 52e20b282cbc817edcb6743bafc640c34ec1daa6 Mon Sep 17 00:00:00 2001 From: Mel Date: Thu, 19 Dec 2024 21:02:01 +0100 Subject: Add monitoring services (Grafana + VictoriaMetrics) Signed-off-by: Mel --- services/monitoring/default.nix | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 services/monitoring/default.nix (limited to 'services') diff --git a/services/monitoring/default.nix b/services/monitoring/default.nix new file mode 100644 index 0000000..60374b5 --- /dev/null +++ b/services/monitoring/default.nix @@ -0,0 +1,93 @@ +{ 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 = [ 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" + "cfg:default.paths.logs=/var/log/grafana" + "cfg:default.paths.data=/var/lib/grafana/data" + "cfg:default.paths.plugins=/var/lib/grafana/plugins" + "cfg:default.paths.provisioning=/var/lib/grafana/provision" + ]; + }; + }; + + 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; + }; + }; +} -- cgit 1.4.1