summaryrefslogtreecommitdiff
path: root/modules/xnet/monitoring/grafana.nix
blob: e95318d950a229fb728b0e2ba86a7a71290b36df (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
{ config, pkgs, lib, ... }:
let
  inherit (lib) mkOption mkIf types;

  inherit (config.xnet.monitoring)
    hostGrafana
    ;
in
{
  options.xnet.monitoring = {
    hostGrafana = mkOption {
      type = types.bool;
      default = false;
      description = "Scrape hosts and host the data.";
    };
  };

  config = mkIf hostGrafana {
    services.grafana.provision = {
      enable = true;
      datasources.settings.datasources = [{
        name = "Prometheus";
        type = "prometheus";
        url = "http://localhost:9090";
        access = "proxy";
        editable = false;
      }];

      dashboards.settings.providers = [{
        name = "Fetched Dashboards";
        options.path = "/etc/grafana/dashboards";
      }];
    };

    environment.etc = {
      "grafana/dashboards/node-exporter.json" = {
        user = "grafana";
        group = "grafana";
        source = pkgs.fetchurl {
          url = "https://grafana.com/api/dashboards/1860/revisions/37/download";
          hash = "sha256-1DE1aaanRHHeCOMWDGdOS1wBXxOF84UXAjJzT5Ek6mM=";
        };
      };
      "grafana/dashboards/smartctl-exporter.json" = {
        user = "grafana";
        group = "grafana";
        source = ./grafana.nix;
        # source = pkgs.fetchurl {
        #   url = "https://grafana.com/api/dashboards/22604/revisions/2/download";
        #   hash = "sha256-ci8WE23fZ+ltEKFoUdNNVXsUIV0jqtas79ia2lYIo88=";
        # };
      };
    };

    services.grafana = {
      enable = true;
      settings.server = {
        domain = "grafana.plaza.4kb.net";
        protocol = "socket";
      };
      settings."auth.anonymous" = {
        enabled = true;
        org_role = "Admin";
      };
    };

    users.groups.grafana.members = [ "nginx" ];
    systemd.services.nginx.serviceConfig.ProtectHome = false;

    services.nginx.virtualHosts."${config.services.grafana.settings.server.domain}" = {
      # useACMEHost = "4kb.net";
      # addSSL = true;
      locations."/" = {
        proxyPass = "http://unix:/${toString config.services.grafana.settings.server.socket}";
      };
    };
  };
}