aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/monitoring.nix
blob: 247253ee5616f8bdf2d8b9023e2740cdcf0a969b (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
{ config, lib, pkgs, ... }:

with lib;

let

cnf = config.cynerd.monitoring;
hostName = config.networking.hostName;
isHost = cnf.host == hostName;

in {
  options.cynerd.monitoring = {
    enable = mkOption {
      type = types.bool;
      default = true;
      description = "If monitoring should be used";
    };
    hw = mkOption {
      type = types.bool;
      default = true;
      description = "If hardware should be reported";
    };

    host = mkOption {
      type = types.str;
      description = "Host name of the monitoring hosting system";
      readOnly = true;
    };
  };

  config = mkMerge [
    { cynerd.monitoring.host = "ridcully"; }
    (mkIf cnf.enable {
      # Telegraf configuration
      services.telegraf = {
        enable = true;
        environmentFiles = ["/run/secrets/telegraf.env"];
        extraConfig = {
          agent = {};
          outputs.influxdb_v2 = {
            urls = ["http://${cnf.host}:8086"];
            token = "$INFLUX_TOKEN";
            organization = "personal";
            bucket = "monitoring";
          };
          inputs = {
            cpu = {
              percpu = true;
              totalcpu = true;
            };
            disk = {
              ignore_fs = [
                "tmpfs" "devtmpfs" "devfs" "iso9660" "overlay" "aufs" "squashfs"
              ];
            };
            diskio = {};
            diskio = {};
            mem = {};
            net = {};
            processes = {};
            swap = {};
            system = {};
          } // (optionalAttrs cnf.hw {
            sensors = {};
            smart = {};
          });
        };
      };
      # TODO probably add this to the upstream configuration
      systemd.services.telegraf.path = with pkgs; [
      ] ++ (optionals cnf.hw [
        nvme-cli lm_sensors smartmontools
      ]);
    })
    (mkIf isHost {
      # InfluxDB
      services.influxdb2.enable = mkIf isHost true;
      # Grafana
      services.grafana = mkIf isHost {
        enable = true;
        settings = {
          users.allow_sign_up = false;
          security = {
            admin_user = "cynerd";
            admin_password = "$__file{/run/secrets/grafana.admin.pass}";
          };
        };
      };

    })
  ];
}