summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
+ };
+ };
+}