blob: 62ff1ea11500072879acbd0b055a55502b8220c1 (
plain) (
blame)
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
94
95
96
97
98
99
|
{ lib, config, ... }:
let
mkStringOption =
description:
lib.mkOption {
type = lib.types.str;
default = null;
description = description;
};
cfg = config.monitoring;
in
{
imports = [
# crutches due to nix limitations:
./crutches/synapse.nix
# modules
./system.nix
./postgres.nix
./synapse.nix
];
options.monitoring = {
monitorAll = lib.mkEnableOption "Monitor all services";
localPrometheus = lib.mkEnableOption "Local Prometheus";
exposePrometheus = lib.mkEnableOption "Expose Prometheus";
localGrafana = lib.mkEnableOption "Local Grafana";
exposeGrafana = lib.mkEnableOption "Expose Grafana";
nginxHost = mkStringOption "The virtual host name";
nginxSsl = lib.mkEnableOption "Enable SSL for Nginx";
prometheusScrapeInterval = lib.mkOption {
type = lib.types.int;
default = 1;
description = "Scrape interval for Prometheus";
};
};
config = lib.mkIf (cfg.monitorAll) {
services = {
prometheus = lib.mkIf (cfg.localPrometheus) {
enable = true;
listenAddress = "127.0.0.1";
extraFlags = [ "--storage.tsdb.wal-compression" ];
};
grafana = lib.mkIf (cfg.localGrafana) {
enable = true;
settings = {
server = {
domain = cfg.nginxHost;
enable_gzip = true;
protocol = "socket";
socket_mode = "0666";
};
};
provision = {
datasources.settings = {
apiVersion = 1;
datasources =
lib.map
(interval: {
name = "Prometheus-${toString interval}";
type = "prometheus";
access = "proxy";
url = "http://127.0.0.1:${toString config.services.prometheus.port}";
#isDefault = true;
jsonData.timeInterval = "${toString interval}s";
})
[
1
15
];
};
};
};
nginx.virtualHosts = {
"${cfg.nginxHost}" = {
enableACME = cfg.nginxSsl;
addSSL = cfg.nginxSsl;
http3 = cfg.nginxSsl;
http3_hq = cfg.nginxSsl;
kTLS = cfg.nginxSsl;
locations = {
"/" = if cfg.exposeGrafana then { proxyPass = "http://unix:${config.services.grafana.settings.server.socket}"; } else { return = "200 'OK'"; };
};
};
"prometheus.${cfg.nginxHost}" = lib.mkIf (cfg.exposePrometheus) {
enableACME = cfg.nginxSsl;
addSSL = cfg.nginxSsl;
http3 = cfg.nginxSsl;
http3_hq = cfg.nginxSsl;
kTLS = cfg.nginxSsl;
locations."/".proxyPass = "http://127.0.0.1:${toString config.services.prometheus.port}";
};
};
};
};
}
|