From c4d6144bb9103c47b4ada00d0512c1235336e6ac Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Thu, 11 Jan 2024 12:02:15 +0200 Subject: [PATCH] Add metrics-exposure support for Dendrite --- group_vars/matrix_servers | 9 +++++ .../custom/matrix-dendrite/defaults/main.yml | 20 +++++++++- .../matrix-dendrite/templates/labels.j2 | 38 +++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/group_vars/matrix_servers b/group_vars/matrix_servers index ab1443a4c..17e8ab282 100755 --- a/group_vars/matrix_servers +++ b/group_vars/matrix_servers @@ -4828,8 +4828,17 @@ matrix_dendrite_container_labels_client_root_redirection_url: "{{ (('https://' i matrix_dendrite_container_labels_federation_api_traefik_entrypoints: "{{ matrix_federation_traefik_entrypoint }}" +matrix_dendrite_container_labels_metrics_middleware_basic_auth_enabled: "{{ matrix_metrics_exposure_http_basic_auth_enabled }}" +matrix_dendrite_container_labels_metrics_middleware_basic_auth_users: "{{ matrix_metrics_exposure_http_basic_auth_users }}" + matrix_dendrite_container_extra_arguments_auto: "{{ matrix_homeserver_container_extra_arguments_auto }}" +matrix_dendrite_metrics_enabled: "{{ prometheus_enabled }}" + +matrix_dendrite_metrics_proxying_enabled: "{{ matrix_dendrite_metrics_enabled and matrix_metrics_exposure_enabled }}" +matrix_dendrite_metrics_proxying_hostname: "{{ matrix_metrics_exposure_hostname }}" +matrix_dendrite_metrics_proxying_path_prefix: "{{ matrix_metrics_exposure_path_prefix }}/dendrite" + matrix_dendrite_client_api_registration_shared_secret: "{{ '%s' | format(matrix_homeserver_generic_secret_key) | password_hash('sha512', 'dendrite.rss', rounds=655555) | to_uuid }}" matrix_dendrite_database_hostname: "{{ devture_postgres_connection_hostname if devture_postgres_enabled else '' }}" diff --git a/roles/custom/matrix-dendrite/defaults/main.yml b/roles/custom/matrix-dendrite/defaults/main.yml index 5b6b8ae98..3e36c812b 100644 --- a/roles/custom/matrix-dendrite/defaults/main.yml +++ b/roles/custom/matrix-dendrite/defaults/main.yml @@ -124,6 +124,17 @@ matrix_dendrite_container_labels_federation_api_traefik_entrypoints: '' matrix_dendrite_container_labels_federation_api_traefik_tls: "{{ matrix_dendrite_container_labels_federation_api_traefik_entrypoints != 'web' }}" matrix_dendrite_container_labels_federation_api_traefik_tls_certResolver: "{{ matrix_dendrite_container_labels_traefik_tls_certResolver }}" # noqa var-naming +# Controls whether labels will be added that expose mautrix-facebook's metrics +matrix_dendrite_container_labels_metrics_enabled: "{{ matrix_dendrite_metrics_enabled and matrix_dendrite_metrics_proxying_enabled }}" +matrix_dendrite_container_labels_metrics_traefik_rule: "Host(`{{ matrix_dendrite_metrics_proxying_hostname }}`) && PathPrefix(`{{ matrix_dendrite_metrics_proxying_path_prefix }}`)" +matrix_dendrite_container_labels_metrics_traefik_priority: 0 +matrix_dendrite_container_labels_metrics_traefik_entrypoints: "{{ matrix_dendrite_container_labels_traefik_entrypoints }}" +matrix_dendrite_container_labels_metrics_traefik_tls: "{{ matrix_dendrite_container_labels_metrics_traefik_entrypoints != 'web' }}" +matrix_dendrite_container_labels_metrics_traefik_tls_certResolver: "{{ matrix_dendrite_container_labels_traefik_tls_certResolver }}" # noqa var-naming +matrix_dendrite_container_labels_metrics_middleware_basic_auth_enabled: false +# See: https://doc.traefik.io/traefik/middlewares/http/basicauth/#users +matrix_dendrite_container_labels_metrics_middleware_basic_auth_users: '' + # matrix_dendrite_container_labels_additional_labels contains a multiline string with additional labels to add to the container label file. # See `../templates/labels.j2` for details. # @@ -230,8 +241,13 @@ matrix_dendrite_app_service_config_files_final: "{{ matrix_dendrite_app_service_ # Enable exposure of metrics matrix_dendrite_metrics_enabled: false -matrix_dendrite_metrics_username: "metrics" -matrix_dendrite_metrics_password: "metrics" +matrix_dendrite_metrics_username: "" +matrix_dendrite_metrics_password: "" + +# Controls whether metrics should be exposed on a public URL. +matrix_dendrite_metrics_proxying_enabled: false +matrix_dendrite_metrics_proxying_hostname: "{{ matrix_dendrite_hostname }}" +matrix_dendrite_metrics_proxying_path_prefix: /metrics/dendrite # Postgres database information matrix_dendrite_database_str: "postgresql://{{ matrix_dendrite_database_user }}:{{ matrix_dendrite_database_password }}@{{ matrix_dendrite_database_hostname }}" diff --git a/roles/custom/matrix-dendrite/templates/labels.j2 b/roles/custom/matrix-dendrite/templates/labels.j2 index 82d6d863f..ea5945826 100644 --- a/roles/custom/matrix-dendrite/templates/labels.j2 +++ b/roles/custom/matrix-dendrite/templates/labels.j2 @@ -142,6 +142,44 @@ traefik.http.routers.matrix-dendrite-federation-api.tls.certResolver={{ matrix_d /Federation-API (/_matrix) #} + +{# + Metrics +#} +{% if matrix_dendrite_container_labels_metrics_enabled %} + +{% set metrics_middlewares = [] %} + +{% if matrix_dendrite_container_labels_metrics_middleware_basic_auth_enabled %} +{% set metrics_middlewares = metrics_middlewares + ['matrix-dendrite-metrics-basic-auth'] %} +traefik.http.middlewares.matrix-dendrite-metrics-basic-auth.basicauth.users={{ matrix_dendrite_container_labels_metrics_middleware_basic_auth_users }} +{% endif %} + +{% set metrics_middlewares = metrics_middlewares + ['matrix-dendrite-metrics-replacepath'] %} +traefik.http.middlewares.matrix-dendrite-metrics-replacepath.replacepath.path=/metrics + +traefik.http.routers.matrix-dendrite-metrics.rule={{ matrix_dendrite_container_labels_metrics_traefik_rule }} + +{% if metrics_middlewares | length > 0 %} +traefik.http.routers.matrix-dendrite-metrics.middlewares={{ metrics_middlewares | join(',') }} +{% endif %} + +{% if matrix_dendrite_container_labels_metrics_traefik_priority | int > 0 %} +traefik.http.routers.matrix-dendrite-metrics.priority={{ matrix_dendrite_container_labels_metrics_traefik_priority }} +{% endif %} + +traefik.http.routers.matrix-dendrite-metrics.service=matrix-dendrite +traefik.http.routers.matrix-dendrite-metrics.entrypoints={{ matrix_dendrite_container_labels_metrics_traefik_entrypoints }} + +traefik.http.routers.matrix-dendrite-metrics.tls={{ matrix_dendrite_container_labels_metrics_traefik_tls | to_json }} +{% if matrix_dendrite_container_labels_metrics_traefik_tls %} +traefik.http.routers.matrix-dendrite-metrics.tls.certResolver={{ matrix_dendrite_container_labels_metrics_traefik_tls_certResolver }} +{% endif %} +{% endif %} +{# + /Metrics +#} + {% endif %} {{ matrix_dendrite_container_labels_additional_labels }}