development
parent
5f7ed722f6
commit
9ed2e04d80
@ -1,67 +0,0 @@
|
|||||||
---
|
|
||||||
# matrix-prometheus-node-exporter is an Prometheus exporter for machine metrics
|
|
||||||
# See: https://prometheus.io/docs/guides/node-exporter/
|
|
||||||
# Project source code URL: https://github.com/prometheus/node_exporter
|
|
||||||
|
|
||||||
matrix_prometheus_node_exporter_enabled: false
|
|
||||||
|
|
||||||
matrix_prometheus_node_exporter_version: v1.5.0
|
|
||||||
matrix_prometheus_node_exporter_docker_image: "{{ matrix_container_global_registry_prefix }}prom/node-exporter:{{ matrix_prometheus_node_exporter_version }}"
|
|
||||||
matrix_prometheus_node_exporter_docker_image_force_pull: "{{ matrix_prometheus_node_exporter_docker_image.endswith(':latest') }}"
|
|
||||||
|
|
||||||
# A list of extra arguments to pass to the container
|
|
||||||
matrix_prometheus_node_exporter_container_extra_arguments: []
|
|
||||||
|
|
||||||
# A list of extra arguments to pass to the node_exporter process
|
|
||||||
#
|
|
||||||
# Example:
|
|
||||||
# matrix_prometheus_node_exporter_process_extra_arguments:
|
|
||||||
# - "--collector.systemd"
|
|
||||||
# - "--collector.logind"
|
|
||||||
#
|
|
||||||
# Note: the above is just an example. Various collectors may require various tweaks to be able to run.
|
|
||||||
# Running the systemd collector requires the following `matrix_prometheus_node_exporter_container_extra_arguments`:
|
|
||||||
# - the socket to be mounted as well (`--mount type=bind,src=/var/run/dbus/system_bus_socket,dst=/var/run/dbus/system_bus_socket,ro,bind-propagation=rslave`)
|
|
||||||
# - (on AppArmor-based distros) disabling AppArmor protection (`--security-opt apparmor=unconfined`)
|
|
||||||
matrix_prometheus_node_exporter_process_extra_arguments: []
|
|
||||||
|
|
||||||
# List of systemd services that matrix-prometheus.service depends on
|
|
||||||
matrix_prometheus_node_exporter_systemd_required_services_list: ['docker.service']
|
|
||||||
|
|
||||||
# List of systemd services that matrix-prometheus.service wants
|
|
||||||
matrix_prometheus_node_exporter_systemd_wanted_services_list: []
|
|
||||||
|
|
||||||
# Controls whether node-exporter metrics should be proxied (exposed) on `matrix.DOMAIN/metrics/node-exporter`.
|
|
||||||
# This will only work take effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`.
|
|
||||||
# See the `matrix-nginx-proxy` role for details about enabling `matrix_nginx_proxy_proxy_matrix_metrics_enabled`.
|
|
||||||
matrix_prometheus_node_exporter_metrics_proxying_enabled: false
|
|
||||||
|
|
||||||
# Controls whether the matrix-prometheus container exposes its HTTP port (tcp/9100 in the container).
|
|
||||||
#
|
|
||||||
# Takes an "<ip>:<port>" value (e.g. "127.0.0.1:9100"), just a port number or empty string to not expose.
|
|
||||||
#
|
|
||||||
# You likely don't need to do this. See `matrix_prometheus_node_exporter_metrics_proxying_enabled`.
|
|
||||||
#
|
|
||||||
# Official recommendations are to run this container with `--net=host`,
|
|
||||||
# but we don't do that, since it:
|
|
||||||
# - likely exposes the metrics web server way too publicly (before applying https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/1008)
|
|
||||||
# - or listens on a loopback interface only (--net=host and 127.0.0.1:9100), which is not reachable from another container (like `matrix-prometheus`)
|
|
||||||
#
|
|
||||||
# Using `--net=host` and binding to Docker's `matrix` bridge network may be a solution to both,
|
|
||||||
# but that's trickier to accomplish and won't necessarily work (hasn't been tested).
|
|
||||||
#
|
|
||||||
# Not using `--net=host` means that our network statistic reports are likely broken (inaccurate),
|
|
||||||
# because node-exporter can't see all interfaces, etc.
|
|
||||||
# For now, we'll live with that, until someone develops a better solution.
|
|
||||||
matrix_prometheus_node_exporter_container_http_host_bind_port: ''
|
|
||||||
|
|
||||||
# If you are supplying your own NGINX proxy but want to use the provided exporters you will have to supply an "<ip>:<port>" value for the containers to bind to on your host.
|
|
||||||
# If matrix_prometheus_node_exporter_container_http_host_bind_port is set to just a port number, this will default to "127.0.0.1:<port>"
|
|
||||||
# If matrix_prometheus_node_exporter_container_http_host_bind_port is set to an IP that is not 0.0.0.0 and a port, that "<ip>:<port>" value will be used
|
|
||||||
# Otherwise this value will be empty and you will have to manually configure your NGINX config file. (If you are using the config files generated by this playbook, you will have to edit matrix-domain.conf)
|
|
||||||
matrix_prometheus_node_exporter_matrix_nginx_proxy_not_enabled_proxy_pass_host: "{{ '127.0.0.1' + matrix_prometheus_node_exporter_container_http_host_bind_port_number_raw if not ':' in matrix_prometheus_node_exporter_container_http_host_bind_port else (matrix_prometheus_node_exporter_container_http_host_bind_port if matrix_prometheus_node_exporter_container_http_host_bind_port.split(':')[0] != '0.0.0.0' else '') }}"
|
|
||||||
|
|
||||||
# matrix_prometheus_node_exporter_dashboard_urls contains a list of URLs with Grafana dashboard definitions.
|
|
||||||
# If the Grafana role is enabled, these dashboards will be downloaded.
|
|
||||||
matrix_prometheus_node_exporter_dashboard_urls:
|
|
||||||
- https://raw.githubusercontent.com/rfrail3/grafana-dashboards/master/prometheus/node-exporter-full.json
|
|
@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
- block:
|
|
||||||
- when: matrix_prometheus_node_exporter_enabled | bool and matrix_prometheus_node_exporter_metrics_proxying_enabled | bool
|
|
||||||
ansible.builtin.include_tasks: "{{ role_path }}/tasks/inject_into_nginx_proxy.yml"
|
|
||||||
tags:
|
|
||||||
- setup-all
|
|
||||||
- setup-nginx-proxy
|
|
||||||
- install-all
|
|
||||||
- install-nginx-proxy
|
|
||||||
|
|
||||||
- block:
|
|
||||||
- when: matrix_prometheus_node_exporter_enabled | bool
|
|
||||||
ansible.builtin.include_tasks: "{{ role_path }}/tasks/setup_install.yml"
|
|
||||||
tags:
|
|
||||||
- setup-all
|
|
||||||
- setup-prometheus-node-exporter
|
|
||||||
- install-all
|
|
||||||
- install-prometheus-node-exporter
|
|
||||||
|
|
||||||
- block:
|
|
||||||
- when: not matrix_prometheus_node_exporter_enabled | bool
|
|
||||||
ansible.builtin.include_tasks: "{{ role_path }}/tasks/setup_uninstall.yml"
|
|
||||||
tags:
|
|
||||||
- setup-all
|
|
||||||
- setup-prometheus-node-exporter
|
|
@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
- name: Ensure matrix-prometheus-node-exporter image is pulled
|
|
||||||
community.docker.docker_image:
|
|
||||||
name: "{{ matrix_prometheus_node_exporter_docker_image }}"
|
|
||||||
source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
|
|
||||||
force_source: "{{ matrix_prometheus_node_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_prometheus_node_exporter_docker_image_force_pull }}"
|
|
||||||
register: result
|
|
||||||
retries: "{{ devture_playbook_help_container_retries_count }}"
|
|
||||||
delay: "{{ devture_playbook_help_container_retries_delay }}"
|
|
||||||
until: result is not failed
|
|
||||||
|
|
||||||
- name: Ensure matrix-prometheus-node-exporter.service installed
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: "{{ role_path }}/templates/systemd/matrix-prometheus-node-exporter.service.j2"
|
|
||||||
dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-prometheus-node-exporter.service"
|
|
||||||
mode: 0644
|
|
||||||
register: matrix_prometheus_node_exporter_systemd_service_result
|
|
@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
- name: Check existence of matrix-prometheus-node-exporter service
|
|
||||||
ansible.builtin.stat:
|
|
||||||
path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-prometheus-node-exporter.service"
|
|
||||||
register: matrix_prometheus_node_exporter_service_stat
|
|
||||||
|
|
||||||
- when: matrix_prometheus_node_exporter_service_stat.stat.exists | bool
|
|
||||||
block:
|
|
||||||
- name: Ensure matrix-prometheus-node-exporter is stopped
|
|
||||||
ansible.builtin.service:
|
|
||||||
name: matrix-prometheus-node-exporter
|
|
||||||
state: stopped
|
|
||||||
enabled: false
|
|
||||||
daemon_reload: true
|
|
||||||
|
|
||||||
- name: Ensure matrix-prometheus-node-exporter.service doesn't exist
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-prometheus-node-exporter.service"
|
|
||||||
state: absent
|
|
@ -1,44 +0,0 @@
|
|||||||
#jinja2: lstrip_blocks: "True"
|
|
||||||
[Unit]
|
|
||||||
Description=matrix-prometheus-node-exporter
|
|
||||||
{% for service in matrix_prometheus_node_exporter_systemd_required_services_list %}
|
|
||||||
Requires={{ service }}
|
|
||||||
After={{ service }}
|
|
||||||
{% endfor %}
|
|
||||||
{% for service in matrix_prometheus_node_exporter_systemd_wanted_services_list %}
|
|
||||||
Wants={{ service }}
|
|
||||||
{% endfor %}
|
|
||||||
DefaultDependencies=no
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
Environment="HOME={{ devture_systemd_docker_base_systemd_unit_home_path }}"
|
|
||||||
ExecStartPre=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} kill matrix-prometheus-node-exporter 2>/dev/null || true'
|
|
||||||
ExecStartPre=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-prometheus-node-exporter 2>/dev/null || true'
|
|
||||||
|
|
||||||
|
|
||||||
ExecStart={{ devture_systemd_docker_base_host_command_docker }} run --rm --name matrix-prometheus-node-exporter \
|
|
||||||
--log-driver=none \
|
|
||||||
--user={{ matrix_user_uid }}:{{ matrix_user_gid }} \
|
|
||||||
--cap-drop=ALL \
|
|
||||||
--read-only \
|
|
||||||
{% for arg in matrix_prometheus_node_exporter_container_extra_arguments %}
|
|
||||||
{{ arg }} \
|
|
||||||
{% endfor %}
|
|
||||||
--network={{ matrix_docker_network }} \
|
|
||||||
{% if matrix_prometheus_node_exporter_container_http_host_bind_port %}
|
|
||||||
-p {{ matrix_prometheus_node_exporter_container_http_host_bind_port }}:9100 \
|
|
||||||
{% endif %}
|
|
||||||
--pid=host \
|
|
||||||
--mount type=bind,src=/,dst=/host,ro,bind-propagation=rslave \
|
|
||||||
{{ matrix_prometheus_node_exporter_docker_image }} \
|
|
||||||
--path.rootfs=/host {{ matrix_prometheus_node_exporter_process_extra_arguments|join(' ') }}
|
|
||||||
|
|
||||||
ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} kill matrix-prometheus-node-exporter 2>/dev/null || true'
|
|
||||||
ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-prometheus-node-exporter 2>/dev/null || true'
|
|
||||||
Restart=always
|
|
||||||
RestartSec=30
|
|
||||||
SyslogIdentifier=matrix-prometheus-node-exporter
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
# `matrix_prometheus_node_exporter_container_http_host_bind_port_number_raw` contains the raw port number extracted from `matrix_prometheus_node_exporter_container_http_host_bind_port`,
|
|
||||||
# which can contain values like this: ('1234', '127.0.0.1:1234', '0.0.0.0:1234')
|
|
||||||
matrix_prometheus_node_exporter_container_http_host_bind_port_number_raw: "{{ '' if matrix_prometheus_node_exporter_container_http_host_bind_port == '' else (matrix_prometheus_node_exporter_container_http_host_bind_port.split(':')[1] if ':' in matrix_prometheus_node_exporter_container_http_host_bind_port else matrix_prometheus_node_exporter_container_http_host_bind_port) }}"
|
|
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
# matrix-prometheus-services-proxy-connect is a role which helps integrate
|
||||||
|
# the various Prometheus roles, which may live outside this Matrix playbook, into it.
|
||||||
|
|
||||||
|
|
||||||
|
# Controls whether node-exporter metrics should be proxied (exposed) on `matrix.DOMAIN/metrics/node-exporter`.
|
||||||
|
# This will only work take effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`.
|
||||||
|
# See the `matrix-nginx-proxy` role for details about enabling `matrix_nginx_proxy_proxy_matrix_metrics_enabled`.
|
||||||
|
matrix_prometheus_services_proxy_connect_prometheus_node_exporter_metrics_proxying_enabled: false
|
||||||
|
|
||||||
|
# If you are supplying your own NGINX proxy but want to use the provided exporters you will have to supply an "<ip>:<port>" value for the containers to bind to on your host.
|
||||||
|
# If prometheus_node_exporter_container_http_host_bind_port is set to just a port number, this will default to "127.0.0.1:<port>"
|
||||||
|
# If prometheus_node_exporter_container_http_host_bind_port is set to an IP that is not 0.0.0.0 and a port, that "<ip>:<port>" value will be used
|
||||||
|
# Otherwise this value will be empty and you will have to manually configure your NGINX config file. (If you are using the config files generated by this playbook, you will have to edit matrix-domain.conf)
|
||||||
|
matrix_prometheus_services_proxy_connect_prometheus_node_exporter_matrix_nginx_proxy_not_enabled_proxy_pass_host: "{{ '127.0.0.1' + prometheus_node_exporter_container_http_host_bind_port_number_raw if not ':' in prometheus_node_exporter_container_http_host_bind_port else (prometheus_node_exporter_container_http_host_bind_port if prometheus_node_exporter_container_http_host_bind_port.split(':')[0] != '0.0.0.0' else '') }}"
|
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Fail if matrix-nginx-proxy role executed before matrix-prometheus-services-proxy-connect
|
||||||
|
ansible.builtin.fail:
|
||||||
|
msg: >-
|
||||||
|
Trying to append node-exporter's reverse-proxying configuration to matrix-nginx-proxy,
|
||||||
|
but it's pointless since the matrix-nginx-proxy role had already executed.
|
||||||
|
To fix this, please change the order of roles in your playbook,
|
||||||
|
so that the matrix-nginx-proxy role would run after the matrix-prometheus-services-proxy-connect role.
|
||||||
|
when: matrix_nginx_proxy_role_executed | default(False) | bool
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- when: prometheus_node_exporter_enabled | bool and matrix_prometheus_services_proxy_connect_prometheus_node_exporter_metrics_proxying_enabled | bool
|
||||||
|
ansible.builtin.include_tasks: "{{ role_path }}/tasks/prometheus-node-exporter/inject_into_nginx_proxy.yml"
|
||||||
|
tags:
|
||||||
|
- setup-all
|
||||||
|
- setup-nginx-proxy
|
||||||
|
- install-all
|
||||||
|
- install-nginx-proxy
|
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# Controls if (`matrix_prometheus_node_exporter` -> `prometheus_node_exporter`) validation will run.
|
||||||
|
matrix_playbook_migration_matrix_prometheus_node_exporter_migration_validation_enabled: true
|
Loading…
Reference in new issue