summary refs log tree commit diff
path: root/services/monitoring/default.nix
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-12-19 21:02:01 +0100
committerMel <einebeere@gmail.com>2024-12-19 21:19:17 +0100
commit52e20b282cbc817edcb6743bafc640c34ec1daa6 (patch)
tree9fe4d8ced9faff72257a8eb5048eca417a2f61dd /services/monitoring/default.nix
parent8951443e005295167d4cee4968a2c803dc07b430 (diff)
downloadnetwork-52e20b282cbc817edcb6743bafc640c34ec1daa6.tar.zst
network-52e20b282cbc817edcb6743bafc640c34ec1daa6.zip
Add monitoring services (Grafana + VictoriaMetrics)
Signed-off-by: Mel <einebeere@gmail.com>
Diffstat (limited to 'services/monitoring/default.nix')
-rw-r--r--services/monitoring/default.nix93
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;
+    };
+  };
+}