From 4cef8cbb9f39dbb4be251c047394b4d69be66fba Mon Sep 17 00:00:00 2001 From: ginta1337 Date: Mon, 28 Oct 2024 04:38:01 +0300 Subject: [PATCH] Introduce matrix_prometheus_traefik_exporter_enabled variable --- ...configuring-playbook-prometheus-grafana.md | 5 +++-- group_vars/matrix_servers | 20 +++++++++++++++++++ .../defaults/main.yml | 20 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/docs/configuring-playbook-prometheus-grafana.md b/docs/configuring-playbook-prometheus-grafana.md index 440b9f224..e54a87135 100644 --- a/docs/configuring-playbook-prometheus-grafana.md +++ b/docs/configuring-playbook-prometheus-grafana.md @@ -16,7 +16,7 @@ prometheus_node_exporter_enabled: true prometheus_postgres_exporter_enabled: true # You can remove this, if unnecessary. -matrix_prometheus_nginxlog_exporter_enabled: true +matrix_prometheus_traefik_exporter_enabled: true grafana_enabled: true @@ -64,7 +64,7 @@ Name | Description `prometheus_enabled`|[Prometheus](https://prometheus.io) is a time series database. It holds all the data we're going to talk about. `prometheus_node_exporter_enabled`|[Node Exporter](https://prometheus.io/docs/guides/node-exporter/) is an addon of sorts to Prometheus that collects generic system information such as CPU, memory, filesystem, and even system temperatures `prometheus_postgres_exporter_enabled`|[Postgres Exporter](configuring-playbook-prometheus-postgres.md) is an addon of sorts to expose Postgres database metrics to Prometheus. -`matrix_prometheus_nginxlog_exporter_enabled`|[NGINX Log Exporter](configuring-playbook-prometheus-nginxlog.md) is an addon of sorts to expose NGINX logs to Prometheus. +`matrix_prometheus_traefik_exporter_enabled`|Export [Traefik metrics](https://doc.traefik.io/traefik/observability/metrics/prometheus) to Prometheus and add Grafana dashboard for them. `grafana_enabled`|[Grafana](https://grafana.com/) is the visual component. It shows (on the `stats.example.com` subdomain) the dashboards with the graphs that we're interested in `grafana_anonymous_access`|By default you need to log in to see graphs. If you want to publicly share your graphs (e.g. when asking for help in [`#synapse:matrix.org`](https://matrix.to/#/#synapse:matrix.org?via=matrix.org&via=privacytools.io&via=mozilla.org)) you'll want to enable this option. `grafana_default_admin_user`
`grafana_default_admin_password`|By default Grafana creates a user with `admin` as the username and password. If you feel this is insecure and you want to change it beforehand, you can do that here @@ -100,6 +100,7 @@ Name | Description `prometheus_node_exporter_container_labels_traefik_enabled`|Set this to `true` to expose the node (general system stats) metrics on `https://matrix.example.com/metrics/node-exporter`. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above. `prometheus_postgres_exporter_enabled`|Set this to `true` to enable the [Postgres exporter](configuring-playbook-prometheus-postgres.md) (locally, on the container network) `prometheus_postgres_exporter_container_labels_traefik_enabled`|Set this to `true` to expose the [Postgres exporter](configuring-playbook-prometheus-postgres.md) metrics on `https://matrix.example.com/metrics/postgres-exporter`. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above. +`matrix_prometheus_traefik_exporter_enabled`|Set this to `true` to export [Traefik metrics](https://doc.traefik.io/traefik/observability/metrics/prometheus) (locally, on the container network) and add Grafana dashboard for them. `matrix_prometheus_nginxlog_exporter_enabled`|Set this to `true` to enable the [NGINX Log exporter](configuring-playbook-prometheus-nginxlog.md) (locally, on the container network) `matrix_sliding_sync_metrics_enabled`|Set this to `true` to make [Sliding Sync](configuring-playbook-sliding-sync-proxy.md) expose metrics (locally, on the container network) `matrix_sliding_sync_metrics_proxying_enabled`|Set this to `true` to expose the [Sliding Sync](configuring-playbook-sliding-sync-proxy.md) metrics on `https://matrix.example.com/metrics/sliding-sync`. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above. diff --git a/group_vars/matrix_servers b/group_vars/matrix_servers index eecdf9264..621e8bfc8 100755 --- a/group_vars/matrix_servers +++ b/group_vars/matrix_servers @@ -5310,6 +5310,8 @@ prometheus_config_scrape_configs_auto: | (matrix_prometheus_services_connect_scraper_media_repo_scrape_configs if matrix_prometheus_services_connect_scraper_media_repo_enabled else []) + (matrix_prometheus_services_connect_scraper_synapse_usage_exporter_scrape_configs if matrix_prometheus_services_connect_scraper_synapse_usage_exporter_enabled else []) + + + (matrix_prometheus_services_connect_scraper_traefik_scrape_configs if matrix_prometheus_services_connect_scraper_traefik_enabled else []) }} ###################################################################### @@ -5345,6 +5347,9 @@ matrix_prometheus_services_connect_scraper_hookshot_static_configs_target: "{{ m matrix_prometheus_services_connect_scraper_nginxlog_enabled: "{{ matrix_prometheus_nginxlog_exporter_enabled }}" matrix_prometheus_services_connect_scraper_nginxlog_static_configs_target: "{{ matrix_prometheus_nginxlog_exporter_identifier }}:{{ matrix_prometheus_nginxlog_exporter_container_metrics_port | string }}" +matrix_prometheus_services_connect_scraper_traefik_enabled: "{{ matrix_prometheus_traefik_exporter_enabled }}" +matrix_prometheus_services_connect_scraper_traefik_static_configs_target: "{{ traefik_identifier }}:{{ traefik_config_entrypoint_metrics_port | string }}" + matrix_prometheus_services_connect_scraper_media_repo_enabled: "{{ matrix_media_repo_enabled and matrix_media_repo_metrics_enabled }}" matrix_prometheus_services_connect_scraper_media_repo_static_configs_target: "{{ matrix_media_repo_identifier }}:{{ matrix_media_repo_metrics_port }}" @@ -5419,6 +5424,8 @@ grafana_dashboard_download_urls: | (matrix_media_repo_dashboard_urls if matrix_media_repo_metrics_enabled else []) + (matrix_synapse_usage_exporter_dashboard_urls if matrix_synapse_usage_exporter_enabled else []) + + + (matrix_traefik_dashboard_download_urls if matrix_traefik_dashboard_download_enabled else []) }} grafana_provisioning_dashboard_template_files: | @@ -5932,6 +5939,9 @@ devture_container_socket_proxy_api_containers_enabled: true traefik_enabled: "{{ matrix_playbook_reverse_proxy_type == 'playbook-managed-traefik' }}" +# Controls whether Traefik prometheus exporter integration should be done +matrix_prometheus_traefik_exporter_enabled: false + traefik_identifier: matrix-traefik traefik_base_path: "{{ matrix_base_data_path }}/traefik" @@ -5951,6 +5961,8 @@ traefik_config_providers_docker_endpoint: "{{ devture_container_socket_proxy_end traefik_container_additional_networks_auto: | {{ ([devture_container_socket_proxy_container_network] if devture_container_socket_proxy_enabled else []) + + + ([matrix_monitoring_container_network] if matrix_prometheus_traefik_exporter_enabled else []) }} traefik_systemd_required_services_list: | @@ -5960,6 +5972,14 @@ traefik_systemd_required_services_list: | ([devture_container_socket_proxy_identifier + '.service'] if devture_container_socket_proxy_enabled else []) }} +traefik_config_metrics_prometheus_enabled: "{{ matrix_prometheus_traefik_exporter_enabled }}" +traefik_container_metrics_host_bind_port: "{{ '' if matrix_prometheus_traefik_exporter_enabled else (traefik_config_entrypoint_metrics_port if traefik_config_entrypoint_metrics_enabled else '') }}" + +# Controls whether the Traefik grafana dashboard shall be downloaded +matrix_traefik_dashboard_download_enabled: "{{ matrix_prometheus_traefik_exporter_enabled }}" +matrix_traefik_dashboard_download_download_tag: master +matrix_traefik_dashboard_download_urls: ["https://raw.githubusercontent.com/traefik/traefik/refs/heads/{{ matrix_traefik_dashboard_download_download_tag }}/contrib/grafana/traefik.json"] + ######################################################################## # # # /traefik # diff --git a/roles/custom/matrix-prometheus-services-connect/defaults/main.yml b/roles/custom/matrix-prometheus-services-connect/defaults/main.yml index f9d12e7f4..581d86d57 100644 --- a/roles/custom/matrix-prometheus-services-connect/defaults/main.yml +++ b/roles/custom/matrix-prometheus-services-connect/defaults/main.yml @@ -143,6 +143,26 @@ matrix_prometheus_services_connect_scraper_nginxlog_scrape_configs: | }] }} +# Controls whether Traefik shall be scraped +matrix_prometheus_services_connect_scraper_traefik_enabled: false +matrix_prometheus_services_connect_scraper_traefik_job_name: traefik +matrix_prometheus_services_connect_scraper_traefik_metrics_path: /metrics +matrix_prometheus_services_connect_scraper_traefik_scrape_interval: 15s +matrix_prometheus_services_connect_scraper_traefik_scrape_timeout: 10s +matrix_prometheus_services_connect_scraper_traefik_static_configs: "{{ [{'targets': [matrix_prometheus_services_connect_scraper_traefik_static_configs_target]}] }}" +matrix_prometheus_services_connect_scraper_traefik_static_configs_target: '' +# The final scrape config for the Traefik scraper +matrix_prometheus_services_connect_scraper_traefik_scrape_configs: | + {{ + [{ + 'job_name': matrix_prometheus_services_connect_scraper_traefik_job_name, + 'metrics_path': matrix_prometheus_services_connect_scraper_traefik_metrics_path, + 'scrape_interval': matrix_prometheus_services_connect_scraper_traefik_scrape_interval, + 'scrape_timeout': matrix_prometheus_services_connect_scraper_traefik_scrape_timeout, + 'static_configs': matrix_prometheus_services_connect_scraper_traefik_static_configs, + }] + }} + # Controls whether media-repo shall be scraped matrix_prometheus_services_connect_scraper_media_repo_enabled: false matrix_prometheus_services_connect_scraper_media_repo_job_name: media-repo