From cb121c5369195e59d3107342a3e2628030c9dcf6 Mon Sep 17 00:00:00 2001 From: eyjhb Date: Fri, 14 Mar 2025 16:45:42 +0100 Subject: [PATCH] monitoring: added services --- machines/gerd/services/monitoring/default.nix | 11 ++++++ .../gerd/services/monitoring/mon-authelia.nix | 23 +++++++++++++ .../gerd/services/monitoring/mon-forgejo.nix | 14 ++++++++ .../gerd/services/monitoring/mon-hedgedoc.nix | 18 ++++++++++ .../monitoring/mon-matrix-synapse.nix | 27 +++++++++++++++ .../gerd/services/monitoring/mon-miniflux.nix | 16 +++++++++ .../gerd/services/monitoring/mon-postgres.nix | 34 +++++++++++++++++++ .../gerd/services/monitoring/mon-searx.nix | 16 +++++++++ .../gerd/services/monitoring/mon-stalwart.nix | 22 ++++++++++++ .../services/monitoring/mon-uptime-kuma.nix | 12 +++++++ machines/gerd/services/monitoring/mon-zfs.nix | 19 +++++++++++ machines/gerd/services/uptime-kuma.nix | 16 +++++++++ 12 files changed, 228 insertions(+) create mode 100644 machines/gerd/services/monitoring/mon-authelia.nix create mode 100644 machines/gerd/services/monitoring/mon-forgejo.nix create mode 100644 machines/gerd/services/monitoring/mon-hedgedoc.nix create mode 100644 machines/gerd/services/monitoring/mon-matrix-synapse.nix create mode 100644 machines/gerd/services/monitoring/mon-miniflux.nix create mode 100644 machines/gerd/services/monitoring/mon-postgres.nix create mode 100644 machines/gerd/services/monitoring/mon-searx.nix create mode 100644 machines/gerd/services/monitoring/mon-stalwart.nix create mode 100644 machines/gerd/services/monitoring/mon-uptime-kuma.nix create mode 100644 machines/gerd/services/monitoring/mon-zfs.nix diff --git a/machines/gerd/services/monitoring/default.nix b/machines/gerd/services/monitoring/default.nix index aea5039..bfa3f65 100644 --- a/machines/gerd/services/monitoring/default.nix +++ b/machines/gerd/services/monitoring/default.nix @@ -2,5 +2,16 @@ imports = [ ./grafana.nix ./prometheus.nix + + ./mon-postgres.nix + ./mon-stalwart.nix + ./mon-authelia.nix + ./mon-matrix-synapse.nix + ./mon-zfs.nix + ./mon-miniflux.nix + ./mon-hedgedoc.nix + ./mon-forgejo.nix + ./mon-uptime-kuma.nix + ./mon-searx.nix ]; } diff --git a/machines/gerd/services/monitoring/mon-authelia.nix b/machines/gerd/services/monitoring/mon-authelia.nix new file mode 100644 index 0000000..fa1bf3d --- /dev/null +++ b/machines/gerd/services/monitoring/mon-authelia.nix @@ -0,0 +1,23 @@ +{ config, lib, ... }: + +{ + services.authelia.instances.main.settings = { + telemetry.metrics = { + enabled = true; + }; + }; + + services.prometheus.scrapeConfigs = [ + { + job_name = "authelia"; + static_configs = [{ + targets = [ (lib.removePrefix "tcp://" config.services.authelia.instances.main.settings.telemetry.metrics.address) ]; + }]; + metric_relabel_configs = [{ + source_labels = [ "__name__" ]; + target_label = "__name__"; + replacement = "authelia_$1"; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-forgejo.nix b/machines/gerd/services/monitoring/mon-forgejo.nix new file mode 100644 index 0000000..abd8214 --- /dev/null +++ b/machines/gerd/services/monitoring/mon-forgejo.nix @@ -0,0 +1,14 @@ +{ config, ... }: + +{ + services.forgejo.settings.metrics.ENABLED = true; + + services.prometheus.scrapeConfigs = [ + { + job_name = "forgejo"; + static_configs = [{ + targets = [ "localhost:${builtins.toString config.services.forgejo.settings.server.HTTPPORT}" ]; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-hedgedoc.nix b/machines/gerd/services/monitoring/mon-hedgedoc.nix new file mode 100644 index 0000000..d9de0f7 --- /dev/null +++ b/machines/gerd/services/monitoring/mon-hedgedoc.nix @@ -0,0 +1,18 @@ +{ config, ... }: + +{ + services.hedgedoc.settings = { + # enabled by default anyways + # TODO(eyJhb): disable exposing this to the WORLD + enableStatsApi = true; + }; + + services.prometheus.scrapeConfigs = [ + { + job_name = "hedgedoc"; + static_configs = [{ + targets = [ "localhost:${builtins.toString config.services.hedgedoc.settings.port}"]; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-matrix-synapse.nix b/machines/gerd/services/monitoring/mon-matrix-synapse.nix new file mode 100644 index 0000000..d569554 --- /dev/null +++ b/machines/gerd/services/monitoring/mon-matrix-synapse.nix @@ -0,0 +1,27 @@ +let + metrics_port = 9734; +in { + services.matrix-synapse = { + settings = { + enable_metrics = true; + listeners = [ + { + port = metrics_port; + type = "metrics"; + bind_addresses = [ "localhost" ]; + tls = false; + resources = []; + } + ]; + }; + }; + + services.prometheus.scrapeConfigs = [ + { + job_name = "matrix-synapse"; + static_configs = [{ + targets = [ "localhost:${builtins.toString metrics_port}"]; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-miniflux.nix b/machines/gerd/services/monitoring/mon-miniflux.nix new file mode 100644 index 0000000..03642a4 --- /dev/null +++ b/machines/gerd/services/monitoring/mon-miniflux.nix @@ -0,0 +1,16 @@ +{ config, ... }: + +{ + services.miniflux.config = { + METRICS_COLLECTOR = 1; + }; + + services.prometheus.scrapeConfigs = [ + { + job_name = "miniflux"; + static_configs = [{ + targets = [ config.services.miniflux.config.LISTEN_ADDR ]; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-postgres.nix b/machines/gerd/services/monitoring/mon-postgres.nix new file mode 100644 index 0000000..8f307d5 --- /dev/null +++ b/machines/gerd/services/monitoring/mon-postgres.nix @@ -0,0 +1,34 @@ +{ config, pkgs, ... }: + +{ + services.prometheus.exporters.postgres = { + enable = true; + listenAddress = "localhost"; + runAsLocalSuperUser = true; + + extraFlags = let + extraQuery = pkgs.writeText "prometehus-postgres-query.yaml" '' + pg_database: + query: "SELECT pg_database.datname, pg_database_size(pg_database.datname) as size FROM pg_database" + metrics: + - datname: + usage: "LABEL" + description: "Name of the database" + - size: + usage: "GAUGE" + description: "Disk space used by the database" + ''; + in [ + "--extend.query-path=${extraQuery}" + ]; + }; + + services.prometheus.scrapeConfigs = [ + { + job_name = "postgres"; + static_configs = [{ + targets = [ "localhost:${toString config.services.prometheus.exporters.postgres.port}" ]; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-searx.nix b/machines/gerd/services/monitoring/mon-searx.nix new file mode 100644 index 0000000..5e8e0df --- /dev/null +++ b/machines/gerd/services/monitoring/mon-searx.nix @@ -0,0 +1,16 @@ +{ config, ... }: + +{ + services.searx.settings.general.open_metrics = "thisreallydoesnotmatterasitisnotaccessiblefromoutsideofthisserver"; + + services.prometheus.scrapeConfigs = [ + { + job_name = "searx"; + basic_auth.username = "canbeanything"; + basic_auth.password = config.services.searx.settings.general.open_metrics; + static_configs = [{ + targets = [ config.services.searx.uwsgiConfig.http ]; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-stalwart.nix b/machines/gerd/services/monitoring/mon-stalwart.nix new file mode 100644 index 0000000..fcf704d --- /dev/null +++ b/machines/gerd/services/monitoring/mon-stalwart.nix @@ -0,0 +1,22 @@ +{ config, ... }: + +{ + services.stalwart-mail.settings = { + metrics.prometheus.enable = true; + }; + + services.prometheus.scrapeConfigs = [ + { + job_name = "stalwart"; + metrics_path = "/metrics/prometheus"; + static_configs = [{ + targets = [ "localhost:${toString config.mine.shared.settings.mail.ports.http_management}" ]; + }]; + metric_relabel_configs = [{ + source_labels = [ "__name__" ]; + target_label = "__name__"; + replacement = "stalwart_$1"; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-uptime-kuma.nix b/machines/gerd/services/monitoring/mon-uptime-kuma.nix new file mode 100644 index 0000000..c6471e4 --- /dev/null +++ b/machines/gerd/services/monitoring/mon-uptime-kuma.nix @@ -0,0 +1,12 @@ +{ config, ... }: + +{ + services.prometheus.scrapeConfigs = [ + { + job_name = "uptime-kuma"; + static_configs = [{ + targets = [ "localhost:${builtins.toString config.services.uptime-kuma.settings.PORT}" ]; + }]; + } + ]; +} diff --git a/machines/gerd/services/monitoring/mon-zfs.nix b/machines/gerd/services/monitoring/mon-zfs.nix new file mode 100644 index 0000000..244d179 --- /dev/null +++ b/machines/gerd/services/monitoring/mon-zfs.nix @@ -0,0 +1,19 @@ +{ config, pkgs, ... }: + +{ + services.prometheus.exporters.zfs = { + enable = true; + listenAddress = "localhost"; + + extraFlags = [ "--collector.dataset-snapshot" ]; + }; + + services.prometheus.scrapeConfigs = [ + { + job_name = "zfs"; + static_configs = [{ + targets = [ "localhost:${toString config.services.prometheus.exporters.zfs.port}" ]; + }]; + } + ]; +} diff --git a/machines/gerd/services/uptime-kuma.nix b/machines/gerd/services/uptime-kuma.nix index db2b2bb..654bdc0 100644 --- a/machines/gerd/services/uptime-kuma.nix +++ b/machines/gerd/services/uptime-kuma.nix @@ -37,6 +37,22 @@ in { const Dialect = require("knex/lib/dialects/sqlite3/index.js"); '') + # TODO(eyJhb): do we really want this? + (pkgs.writeText "uptime-kuma-disable-metrics-auth.patch" '' + diff --git a/server/server.js b/server/server.js + index db58ae82..d650a42a 100644 + --- a/server/server.js + +++ b/server/server.js + @@ -292,7 +292,7 @@ let needSetup = false; + + // Prometheus API metrics /metrics + // With Basic Auth using the first user's username/password + - app.get("/metrics", apiAuth, prometheusAPIMetrics()); + + app.use("/metrics", prometheusAPIMetrics()); + + app.use("/", expressStaticGzip("dist", { + enableBrotli: true, + '') ]; }); };