From 31d3ddfdd85dfe3f50c5e7bcaf19930bd55aca4d Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Tue, 9 Aug 2022 16:11:57 +0200 Subject: [PATCH] [postgres+mariadb] Add Prometheus exporter Signed-off-by: Yohann D'ANELLO --- group_vars/mariadb.yml | 3 ++ group_vars/postfix.yml | 3 ++ group_vars/postgres.yml | 3 ++ host_vars/fyre.adm.crans.org.yml | 30 +++++++++++++++++++ hosts | 3 ++ plays/monitoring.yml | 14 +++++++++ plays/zamok.yml | 1 + roles/mariadb/tasks/main.yml | 8 +++++ .../handlers/main.yml | 5 ++++ .../prometheus-mysqld-exporter/tasks/main.yml | 24 +++++++++++++++ .../handlers/main.yml | 5 ++++ .../tasks/main.yml | 24 +++++++++++++++ roles/zamok-tools/tasks/main.yml | 1 - 13 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 group_vars/mariadb.yml create mode 100644 group_vars/postfix.yml create mode 100644 roles/mariadb/tasks/main.yml create mode 100644 roles/prometheus-mysqld-exporter/handlers/main.yml create mode 100644 roles/prometheus-mysqld-exporter/tasks/main.yml create mode 100644 roles/prometheus-postgres-exporter/handlers/main.yml create mode 100644 roles/prometheus-postgres-exporter/tasks/main.yml diff --git a/group_vars/mariadb.yml b/group_vars/mariadb.yml new file mode 100644 index 00000000..ad2fe772 --- /dev/null +++ b/group_vars/mariadb.yml @@ -0,0 +1,3 @@ +--- +glob_prometheus_mysqld_exporter: + listen_addr: "{{ query('ldap', 'ip', ansible_hostname, 'adm') | ansible.utils.ipv4 | first }}" diff --git a/group_vars/postfix.yml b/group_vars/postfix.yml new file mode 100644 index 00000000..05713b64 --- /dev/null +++ b/group_vars/postfix.yml @@ -0,0 +1,3 @@ +--- +glob_prometheus_postfix_exporter: + listen_addr: "{{ query('ldap', 'ip', ansible_hostname, 'adm') | ansible.utils.ipv4 | first }}" diff --git a/group_vars/postgres.yml b/group_vars/postgres.yml index 41950e20..48bd5139 100644 --- a/group_vars/postgres.yml +++ b/group_vars/postgres.yml @@ -3,3 +3,6 @@ glob_postgres: subnets: - 172.16.10.0/24 - fd00:0:0:10::/64 + +glob_prometheus_postgres_exporter: + listen_addr: "{{ query('ldap', 'ip', ansible_hostname, 'adm') | ansible.utils.ipv4 | first }}" diff --git a/host_vars/fyre.adm.crans.org.yml b/host_vars/fyre.adm.crans.org.yml index 54e15472..9c4a6aa3 100644 --- a/host_vars/fyre.adm.crans.org.yml +++ b/host_vars/fyre.adm.crans.org.yml @@ -147,6 +147,36 @@ loc_prometheus: target_label: __address__ replacement: '$1:9154' + postgres: + config: + - job_name: postgres + file_sd_configs: + - files: + - '/etc/prometheus/targets_postgres.json' + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - source_labels: [__param_target] + target_label: __address__ + replacement: '$1:9187' + + mysql: + config: + - job_name: mysql + file_sd_configs: + - files: + - '/etc/prometheus/targets_mysql.json' + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - source_labels: [__param_target] + target_label: __address__ + replacement: '$1:9104' + mtail: config: - job_name: mtail diff --git a/hosts b/hosts index d1a3cf32..f5076045 100644 --- a/hosts +++ b/hosts @@ -131,6 +131,9 @@ routeur-sam.adm.crans.org [linx] linx.adm.crans.org +[mariadb] +zamok.adm.crans.org + [mailman] mailman.adm.crans.org diff --git a/plays/monitoring.yml b/plays/monitoring.yml index fe874070..073a50ce 100755 --- a/plays/monitoring.yml +++ b/plays/monitoring.yml @@ -76,6 +76,20 @@ roles: - prometheus-postfix-exporter +# Monitor PostgreSQL metrics +- hosts: postgres + vars: + prometheus_postgres_exporter: "{{ glob_prometheus_postgres_exporter | default({}) | combine(loc_prometheus_postgres_exporter | default({})) }}" + roles: + - prometheus-postgres-exporter + +# Monitor MySQL metrics +- hosts: mariadb + vars: + prometheus_mysqld_exporter: "{{ glob_prometheus_mysqld_exporter | default({}) | combine(loc_prometheus_mysqld_exporter | default({})) }}" + roles: + - prometheus-mysqld-exporter + # Monitor mailq with a special text exporter # - hosts: redisdead.adm.crans.org # roles: ["prometheus-node-exporter-postfix"] diff --git a/plays/zamok.yml b/plays/zamok.yml index c4bbfbe0..26b6ea62 100755 --- a/plays/zamok.yml +++ b/plays/zamok.yml @@ -7,5 +7,6 @@ adh: "{{ glob_adh | combine(loc_adh | default({}), recursive=True) }}" roles: - zamok-tools + - mariadb # - postfix - prometheus-node-exporter-postfix diff --git a/roles/mariadb/tasks/main.yml b/roles/mariadb/tasks/main.yml new file mode 100644 index 00000000..2d3eeb21 --- /dev/null +++ b/roles/mariadb/tasks/main.yml @@ -0,0 +1,8 @@ +--- +- name: Install MariaDB + apt: + update_cache: true + name: mariadb + register: apt_result + retries: 3 + until: apt_result is succeeded diff --git a/roles/prometheus-mysqld-exporter/handlers/main.yml b/roles/prometheus-mysqld-exporter/handlers/main.yml new file mode 100644 index 00000000..7b5dcd31 --- /dev/null +++ b/roles/prometheus-mysqld-exporter/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: Restart prometheus-mysqld-exporter + service: + name: prometheus-mysqld-exporter + state: restarted diff --git a/roles/prometheus-mysqld-exporter/tasks/main.yml b/roles/prometheus-mysqld-exporter/tasks/main.yml new file mode 100644 index 00000000..2e65342a --- /dev/null +++ b/roles/prometheus-mysqld-exporter/tasks/main.yml @@ -0,0 +1,24 @@ +--- +- name: Install Prometheus mysqld-exporter + apt: + update_cache: true + name: prometheus-mysqld-exporter + register: apt_result + retries: 3 + until: apt_result is succeeded + +- name: Make Prometheus mysqld-exporter listen on adm only + lineinfile: + path: /etc/default/prometheus-mysqld-exporter + regexp: ^ARGS= + line: | + ARGS="--web.listen-address={{ prometheus_mysqld_exporter.listen_addr }}:9104" + notify: Restart prometheus-mysqld-exporter + +# You need to create the prometheus account, RTFM. +- name: Configure MySQL connection + lineinfile: + path: /etc/default/prometheus-mysqld-exporter + regexp: DATA_SOURCE_NAME="prometheus@unix(/run/mysqld/mysqld.sock)/" + line: DATA_SOURCE_NAME="prometheus@unix(/run/mysqld/mysqld.sock)/" + notify: Restart prometheus-mysqld-exporter diff --git a/roles/prometheus-postgres-exporter/handlers/main.yml b/roles/prometheus-postgres-exporter/handlers/main.yml new file mode 100644 index 00000000..05837d1d --- /dev/null +++ b/roles/prometheus-postgres-exporter/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: Restart prometheus-postgres-exporter + service: + name: prometheus-postgres-exporter + state: restarted diff --git a/roles/prometheus-postgres-exporter/tasks/main.yml b/roles/prometheus-postgres-exporter/tasks/main.yml new file mode 100644 index 00000000..bd5991c4 --- /dev/null +++ b/roles/prometheus-postgres-exporter/tasks/main.yml @@ -0,0 +1,24 @@ +--- +- name: Install Prometheus postgres-exporter + apt: + update_cache: true + name: prometheus-postgres-exporter + register: apt_result + retries: 3 + until: apt_result is succeeded + +- name: Make Prometheus postgres-exporter listen on adm only + lineinfile: + path: /etc/default/prometheus-postgres-exporter + regexp: ^ARGS= + line: | + ARGS="--web.listen-address={{ prometheus_postgres_exporter.listen_addr }}:9187" + notify: Restart prometheus-postgres-exporter + +# You need to create the prometheus account, RTFM. +- name: Configure PostgreSQL connection + lineinfile: + path: /etc/default/prometheus-postgres-exporter + regexp: ^DATA_SOURCE_NAME= + line: DATA_SOURCE_NAME='user=prometheus host=/run/postgresql dbname=postgres' + notify: Restart prometheus-postgres-exporter diff --git a/roles/zamok-tools/tasks/main.yml b/roles/zamok-tools/tasks/main.yml index fbe6385f..f4435637 100644 --- a/roles/zamok-tools/tasks/main.yml +++ b/roles/zamok-tools/tasks/main.yml @@ -33,7 +33,6 @@ - libapache2-mod-wsgi-py3 - lua-cjson # Demande du 01/09/2017 18:50 sur #crans - lynx # Demande du 30/07/2017 sur nounou@ - - mariadb-server - moreutils # Ce package, c'est la vie ! - nyancat - octave # Demande irc #crans 28/02/2019 14h28