summaryrefslogtreecommitdiff
path: root/modules/foundation/monitoring
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-12-22 22:41:25 +0100
committerMel <einebeere@gmail.com>2024-12-22 22:41:25 +0100
commit778e23735053e935c3af00490561fe65b8c7d02c (patch)
tree582e6a0a5c3a7d8490828db201e8aa98607db185 /modules/foundation/monitoring
parent6163fa5b5926dd4a456b9fd07e05f9ec1f49d613 (diff)
downloadnetwork-778e23735053e935c3af00490561fe65b8c7d02c.tar.zst
network-778e23735053e935c3af00490561fe65b8c7d02c.zip
Break up monitoring module
Signed-off-by: Mel <einebeere@gmail.com>
Diffstat (limited to 'modules/foundation/monitoring')
-rw-r--r--modules/foundation/monitoring/client.nix33
-rw-r--r--modules/foundation/monitoring/default.nix52
-rw-r--r--modules/foundation/monitoring/server.nix47
3 files changed, 132 insertions, 0 deletions
diff --git a/modules/foundation/monitoring/client.nix b/modules/foundation/monitoring/client.nix
new file mode 100644
index 0000000..f3f6873
--- /dev/null
+++ b/modules/foundation/monitoring/client.nix
@@ -0,0 +1,33 @@
+{
+ listenAddress,
+ nodeExporterPort,
+ nginxExporterPort,
+ cadvisorExporterPort,
+ ...
+}:
+
+{
+ services = {
+ prometheus.exporters = {
+ node = {
+ enable = true;
+ openFirewall = false;
+ port = nodeExporterPort;
+ inherit listenAddress;
+ };
+
+ nginx = {
+ enable = true;
+ openFirewall = false;
+ port = nginxExporterPort;
+ inherit listenAddress;
+ };
+ };
+
+ cadvisor = {
+ enable = true;
+ port = cadvisorExporterPort;
+ inherit listenAddress;
+ };
+ };
+}
diff --git a/modules/foundation/monitoring/default.nix b/modules/foundation/monitoring/default.nix
new file mode 100644
index 0000000..a7bc185
--- /dev/null
+++ b/modules/foundation/monitoring/default.nix
@@ -0,0 +1,52 @@
+{ me, config, lib, ... }:
+
+let
+ inherit (lib) mkOption mkEnableOption types;
+
+ cfg = config.foundation.monitoring;
+
+ ports = {
+ victoriaDefaultPort = 8428;
+ nodeExporterPort = 9001;
+ cadvisorExporterPort = 9002;
+ nginxExporterPort = 9113;
+ dockerExporterPort = 9323;
+ };
+
+ serverConfiguration = import ./server.nix ({
+ hosts = cfg.server.hosts;
+ victoriaAddress = me.tailscale.ip;
+ } // ports);
+
+ clientConfiguration = import ./client.nix ({
+ listenAddress = me.tailscale.ip;
+ } // ports);
+in
+{
+ imports = [ ../../../services/monitoring/wrapper.nix ];
+
+ options.foundation.monitoring = {
+ server = {
+ enable = mkEnableOption "monitoring server";
+
+ hosts = mkOption {
+ type = with types; listOf (submodule {
+ options = {
+ name = mkOption { type = str; };
+ ip = mkOption { type = str; };
+ };
+ });
+ default = [ ];
+ };
+ };
+
+ client = {
+ enable = mkEnableOption "monitoring client";
+ };
+ };
+
+ config = lib.mkMerge [
+ (lib.mkIf cfg.server.enable serverConfiguration)
+ (lib.mkIf (cfg.client.enable || cfg.server.enable) clientConfiguration)
+ ];
+}
diff --git a/modules/foundation/monitoring/server.nix b/modules/foundation/monitoring/server.nix
new file mode 100644
index 0000000..4c922b9
--- /dev/null
+++ b/modules/foundation/monitoring/server.nix
@@ -0,0 +1,47 @@
+{
+ hosts,
+ victoriaAddress,
+ victoriaDefaultPort,
+ nodeExporterPort,
+ dockerExporterPort,
+ cadvisorExporterPort,
+ nginxExporterPort,
+ ...
+}:
+
+{
+ foundation.internal.monitoringService = true;
+
+ services.vmagent = {
+ enable = true;
+ remoteWrite.url = "http://${victoriaAddress}:${toString victoriaDefaultPort}/api/v1/write";
+
+ prometheusConfig = {
+ global = {
+ scrape_interval = "15s";
+ };
+
+ scrape_configs =
+ let
+ exporter = job: port: {
+ job_name = job;
+ static_configs = map (
+ { name, ip }:
+ {
+ targets = [ "${ip}:${toString port}" ];
+ labels = {
+ instance = name;
+ };
+ }
+ ) hosts;
+ };
+ in
+ [
+ (exporter "node" nodeExporterPort)
+ (exporter "docker" dockerExporterPort)
+ (exporter "cadvisor" cadvisorExporterPort)
+ (exporter "nginx" nginxExporterPort)
+ ];
+ };
+ };
+}