2 Commits

Author SHA1 Message Date
Michael Hollister
fdbc4d292e Renaming docker variables and moving synapse stats config location 2024-07-24 18:03:58 -05:00
Michael Hollister
e68175a3a2 Apply suggestions from code review
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
2024-07-24 17:49:21 -05:00
5 changed files with 32 additions and 20 deletions

View File

@@ -1,6 +1,15 @@
# Setting up synapse-usage-exporter (optional)
[synapse-usage-exporter](https://github.com/loelkes/synapse-usage-exporter) Allows you to export the usage statistics of a Synapse homeserver to this container service and be scraped by Prometheus. Synapse does not include usage statistics in its prometheus metrics. They can be reported to a HTTP PUT endpoint 5 minutes after startup and from then on at a fixed interval of once every three hours. This role integrates a simple Flask project that offers a HTTP PUT endpoint and holds the most recent received record available to be scraped py Prometheus.
[synapse-usage-exporter](https://github.com/loelkes/synapse-usage-exporter) allows you to export the usage statistics of a Synapse homeserver to this container service and for the collected metrics to later be scraped by Prometheus.
Synapse does not include usage statistics in its Prometheus metrics. They can be reported to an HTTP `PUT` endpoint 5 minutes after startup and from then on at a fixed interval of once every three hours. This role integrates a simple [Flask](https://flask.palletsprojects.com) project that offers an HTTP `PUT` endpoint and holds the most recent received record available to be scraped by Prometheus.
Enabling this service will automatically:
- install the synapse-usage-exporter service
- re-configure Synapse to push (via HTTP `PUT`) usage statistics information to synapse-usage-exporter
- re-configure [Prometheus](./configuring-playbook-prometheus-grafana.md) (if Grafana is enabled), to periodically scrape metrics from synapse-usage-exporter
- add a new [Grafana](./configuring-playbook-prometheus-grafana.md) dashboard (if Grafana is enabled) containing Synapse usage statistics
## Quickstart
@@ -9,6 +18,8 @@ Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.
```yaml
matrix_synapse_usage_exporter_enabled: true
# (optional) Expose endpoint if you want to collect statistics from other homeservers: `matrix.DOMAIN/report-usage-stats/push`
# (Optional) Expose endpoint if you want to collect statistics from outside (from other homeservers).
# If enabled, synapse-usage-exporter will be exposed publicly at `matrix.DOMAIN/report-usage-stats/push`.
# When collecting usage statistics for Synapse running on the same host, you don't need to enable this.
# matrix_synapse_usage_exporter_proxying_enabled: true
```

View File

@@ -4462,6 +4462,10 @@ matrix_synapse_app_service_config_files_auto: "{{ matrix_homeserver_app_service_
# Disable creation of media repository Synapse worker when using media-repo
matrix_synapse_ext_media_repo_enabled: "{{ matrix_media_repo_enabled }}"
# Enable Synapse statistics reporting when using synapse-usage-exporter
matrix_synapse_report_stats: "{{ matrix_synapse_usage_exporter_enabled }}"
matrix_synapse_report_stats_endpoint: "http://{{ matrix_synapse_usage_exporter_identifier }}:{{ matrix_synapse_usage_exporter_container_port | string }}/report-usage-stats/push"
######################################################################
#
# /matrix-synapse
@@ -4611,9 +4615,6 @@ matrix_synapse_usage_exporter_container_labels_traefik_docker_network: "{{ matri
matrix_synapse_usage_exporter_container_labels_traefik_entrypoints: "{{ devture_traefik_entrypoint_primary }}"
matrix_synapse_usage_exporter_container_labels_traefik_tls_certResolver: "{{ devture_traefik_certResolver_primary }}"
matrix_synapse_report_stats: "{{ true if matrix_synapse_usage_exporter_enabled else false }}"
matrix_synapse_report_stats_endpoint: "http://{{ matrix_synapse_usage_exporter_identifier }}:{{ matrix_synapse_usage_exporter_container_port | string }}/report-usage-stats/push"
######################################################################
#
# /matrix-synapse-usage-exporter

View File

@@ -1,7 +1,7 @@
---
# Synapse Usage Exporter
# Project source code URL: https://github.com/loelkes/synapse-usage-exporter/tree/main
# Project source code URL: https://github.com/loelkes/synapse-usage-exporter
matrix_synapse_usage_exporter_enabled: false
@@ -15,11 +15,11 @@ matrix_synapse_usage_exporter_container_port: 5000
matrix_synapse_usage_exporter_container_image_self_build: true
matrix_synapse_usage_exporter_container_image_self_build_repo: "https://github.com/loelkes/synapse-usage-exporter.git"
matrix_synapse_usage_exporter_docker_image_path: "loelkes/synapse-usage-exporter"
matrix_synapse_usage_exporter_docker_image: "{{ matrix_synapse_usage_exporter_docker_image_name_prefix }}{{ matrix_synapse_usage_exporter_docker_image_path }}:{{ matrix_synapse_usage_exporter_docker_image_tag }}"
matrix_synapse_usage_exporter_docker_image_name_prefix: "{{ 'localhost/' if matrix_synapse_usage_exporter_container_image_self_build else matrix_container_global_registry_prefix }}"
matrix_synapse_usage_exporter_docker_image_tag: "{{ 'main' if matrix_synapse_usage_exporter_container_image_self_build else 'latest' }}"
matrix_synapse_usage_exporter_docker_image_force_pull: "{{ matrix_synapse_usage_exporter_docker_image.endswith(':latest') }}"
matrix_synapse_usage_exporter_container_image_path: "loelkes/synapse-usage-exporter"
matrix_synapse_usage_exporter_container_image: "{{ matrix_synapse_usage_exporter_container_image_name_prefix }}{{ matrix_synapse_usage_exporter_container_image_path }}:{{ matrix_synapse_usage_exporter_container_image_tag }}"
matrix_synapse_usage_exporter_container_image_name_prefix: "{{ 'localhost/' if matrix_synapse_usage_exporter_container_image_self_build else matrix_container_global_registry_prefix }}"
matrix_synapse_usage_exporter_container_image_tag: "{{ 'main' if matrix_synapse_usage_exporter_container_image_self_build else 'latest' }}"
matrix_synapse_usage_exporter_container_image_force_pull: "{{ matrix_synapse_usage_exporter_container_image.endswith(':latest') }}"
matrix_synapse_usage_exporter_base_path: "{{ matrix_base_data_path }}/{{ matrix_synapse_usage_exporter_identifier }}"
matrix_synapse_usage_exporter_docker_src_files_path: "{{ matrix_synapse_usage_exporter_base_path }}/docker-src"

View File

@@ -27,10 +27,10 @@
- name: Ensure synapse-usage-exporter Docker image is pulled
community.docker.docker_image:
name: "{{ matrix_synapse_usage_exporter_docker_image }}"
name: "{{ matrix_synapse_usage_exporter_container_image }}"
source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
force_source: "{{ matrix_synapse_usage_exporter_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_synapse_usage_exporter_docker_image_force_pull }}"
force_source: "{{ matrix_synapse_usage_exporter_container_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_synapse_usage_exporter_container_image_force_pull }}"
when: "not matrix_synapse_usage_exporter_container_image_self_build | bool"
register: result
retries: "{{ devture_playbook_help_container_retries_count }}"
@@ -43,15 +43,15 @@
ansible.builtin.git:
repo: "{{ matrix_synapse_usage_exporter_container_image_self_build_repo }}"
dest: "{{ matrix_synapse_usage_exporter_docker_src_files_path }}"
version: "{{ matrix_synapse_usage_exporter_docker_image.split(':')[1] }}"
version: "{{ matrix_synapse_usage_exporter_container_image.split(':')[1] }}"
force: "yes"
become: true
become_user: "{{ matrix_user_username }}"
register: matrix_synapse_usage_exporter_git_pull_results
- name: Check if synapse-usage-exporter Docker image exists
ansible.builtin.command: "{{ devture_systemd_docker_base_host_command_docker }} images --quiet --filter 'reference={{ matrix_synapse_usage_exporter_docker_image }}'"
register: matrix_synapse_usage_exporter_docker_image_check_result
ansible.builtin.command: "{{ devture_systemd_docker_base_host_command_docker }} images --quiet --filter 'reference={{ matrix_synapse_usage_exporter_container_image }}'"
register: matrix_synapse_usage_exporter_container_image_check_result
changed_when: false
# Invoking the `docker build` command here, instead of calling the `docker_image` Ansible module,
@@ -59,11 +59,11 @@
# See: https://github.com/ansible-collections/community.general/issues/514
- name: Ensure synapse-usage-exporter Docker image is built
ansible.builtin.command:
cmd: "{{ devture_systemd_docker_base_host_command_docker }} build -t {{ matrix_synapse_usage_exporter_docker_image }} -f {{ matrix_synapse_usage_exporter_docker_src_files_path }}/docker/Dockerfile {{ matrix_synapse_usage_exporter_docker_src_files_path }}"
cmd: "{{ devture_systemd_docker_base_host_command_docker }} build -t {{ matrix_synapse_usage_exporter_container_image }} -f {{ matrix_synapse_usage_exporter_docker_src_files_path }}/docker/Dockerfile {{ matrix_synapse_usage_exporter_docker_src_files_path }}"
environment:
DOCKER_BUILDKIT: 1
changed_when: true
when: "matrix_synapse_usage_exporter_git_pull_results.changed | bool or matrix_synapse_usage_exporter_docker_image_check_result.stdout == ''"
when: "matrix_synapse_usage_exporter_git_pull_results.changed | bool or matrix_synapse_usage_exporter_container_image_check_result.stdout == ''"
- name: Ensure synapse-usage-exporter container network is created
community.general.docker_network:

View File

@@ -28,7 +28,7 @@ ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} create \
{% for arg in matrix_synapse_usage_exporter_container_extra_arguments %}
{{ arg }} \
{% endfor %}
{{ matrix_synapse_usage_exporter_docker_image }}
{{ matrix_synapse_usage_exporter_container_image }}
{% for network in matrix_synapse_usage_exporter_container_additional_networks %}
ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} network connect {{ network }} {{ matrix_synapse_usage_exporter_identifier }}