summary refs log tree commit diff
path: root/services/monitoring/default.nix
blob: 60374b5197d282706d6dab42686cc4d9e1ac4e13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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;
    };
  };
}