From 4230515da784ed1e3b8f2bd4ea982c72b8339a4e Mon Sep 17 00:00:00 2001 From: thespad Date: Tue, 21 Oct 2025 11:53:33 +0100 Subject: [PATCH] Add prometheus exporter support --- readme-vars.yml | 5 +++++ .../s6-rc.d/svc-prom/dependencies.d/init-services | 0 root/etc/s6-overlay/s6-rc.d/svc-prom/notification-fd | 1 + root/etc/s6-overlay/s6-rc.d/svc-prom/run | 10 ++++++++++ root/etc/s6-overlay/s6-rc.d/svc-prom/type | 1 + root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-prom | 0 root/init-hook | 4 ++++ 7 files changed, 21 insertions(+) create mode 100644 root/etc/s6-overlay/s6-rc.d/svc-prom/dependencies.d/init-services create mode 100644 root/etc/s6-overlay/s6-rc.d/svc-prom/notification-fd create mode 100755 root/etc/s6-overlay/s6-rc.d/svc-prom/run create mode 100644 root/etc/s6-overlay/s6-rc.d/svc-prom/type create mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-prom diff --git a/readme-vars.yml b/readme-vars.yml index f422fb3..91f22d8 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -61,10 +61,14 @@ opt_param_env_vars: - {env_var: "SIDEKIQ_THREADS", env_value: "5", desc: "The number of threads for sidekiq to use. See [notes](https://docs.joinmastodon.org/admin/scaling/#sidekiq-threads)."} - {env_var: "DB_POOL", env_value: "5", desc: "The size of the DB connection pool, must be *at least* the same as `SIDEKIQ_THREADS`. See [notes](https://docs.joinmastodon.org/admin/scaling/#sidekiq-threads)."} - {env_var: "NO_CHOWN", env_value: "", desc: "Set to `true` to skip chown of /config on init. *READ THE APPLICATION NOTES BEFORE SETTING THIS*."} + - {env_var: "MASTODON_PROMETHEUS_EXPORTER_ENABLED", env_value: "", desc: "If set to `true`, Mastodon’s Ruby processes (web & Sidekiq) will enable the Prometheus instrumentation."} param_usage_include_ports: true param_ports: - {external_port: "80", internal_port: "80", port_desc: "Port for web frontend"} - {external_port: "443", internal_port: "443", port_desc: "Port for web frontend"} +opt_param_usage_include_ports: true +opt_param_ports: + - {external_port: "9394", internal_port: "9394", port_desc: "Port for Prometheus metrics"} param_usage_include_vols: true param_volumes: - {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Contains all relevant configuration files."} @@ -166,6 +170,7 @@ init_diagram: | "mastodon:develop" <- Base Images # changelog changelogs: + - {date: "21.10.25:", desc: "Add prometheus exporter support."} - {date: "20.10.25:", desc: "Add vips-heif."} - {date: "06.06.25:", desc: "Rebase to Alpine 3.22, replace deprecated imagemagick with vips."} - {date: "26.08.24:", desc: "Rebase to Alpine 3.20, enable [Active Record Encryption](https://github.com/mastodon/mastodon/pull/29831/files). Existing users should update their nginx confs to avoid http2 deprecation warnings."} diff --git a/root/etc/s6-overlay/s6-rc.d/svc-prom/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/svc-prom/dependencies.d/init-services new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-prom/notification-fd b/root/etc/s6-overlay/s6-rc.d/svc-prom/notification-fd new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-prom/notification-fd @@ -0,0 +1 @@ +5 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-prom/run b/root/etc/s6-overlay/s6-rc.d/svc-prom/run new file mode 100755 index 0000000..1dc567a --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-prom/run @@ -0,0 +1,10 @@ +#!/usr/bin/with-contenv bash +# shellcheck shell=bash + +export RAILS_ENV=production +export HOME=/config +export PATH="${PATH}:/app/www/bin" + +exec \ + s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost ${PROMETHEUS_EXPORTER_PORT:-9394}" \ + cd /app/www s6-setuidgid abc /app/www/bin/prometheus_exporter diff --git a/root/etc/s6-overlay/s6-rc.d/svc-prom/type b/root/etc/s6-overlay/s6-rc.d/svc-prom/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-prom/type @@ -0,0 +1 @@ +longrun diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-prom b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-prom new file mode 100644 index 0000000..e69de29 diff --git a/root/init-hook b/root/init-hook index 763833b..8ec44bd 100755 --- a/root/init-hook +++ b/root/init-hook @@ -3,6 +3,10 @@ # Disable the php-fpm service as the container doesn't use it rm /etc/s6-overlay/s6-rc.d/user/contents.d/svc-php-fpm +if [[ ${MASTODON_PROMETHEUS_EXPORTER_ENABLED,,} != "true" ]]; then + rm /etc/s6-overlay/s6-rc.d/user/contents.d/svc-prom +fi + if [[ ${SIDEKIQ_ONLY,,} == "true" ]]; then rm /etc/s6-overlay/s6-rc.d/user/contents.d/svc-mastodon rm /etc/s6-overlay/s6-rc.d/user/contents.d/svc-nginx