diff options
| author | Mel <einebeere@gmail.com> | 2024-12-19 21:02:01 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2024-12-19 21:19:17 +0100 |
| commit | 52e20b282cbc817edcb6743bafc640c34ec1daa6 (patch) | |
| tree | 9fe4d8ced9faff72257a8eb5048eca417a2f61dd | |
| parent | 8951443e005295167d4cee4968a2c803dc07b430 (diff) | |
| download | network-52e20b282cbc817edcb6743bafc640c34ec1daa6.tar.zst network-52e20b282cbc817edcb6743bafc640c34ec1daa6.zip | |
Add monitoring services (Grafana + VictoriaMetrics)
Signed-off-by: Mel <einebeere@gmail.com>
| -rw-r--r-- | services/monitoring/default.nix | 93 |
1 files changed, 93 insertions, 0 deletions
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; + }; + }; +} |
