From 3b4c0a0cce803413d8465e0e32714924e8573897 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 5 Feb 2023 22:19:10 +0100 Subject: prometheus targets: some more refactoring - still not working... :( --- chaos-at-home/ch-testvm-phoebe.yml | 1 - chaos-at-home/ch-testvm-prometheus.yml | 3 +- roles/monitoring/prometheus/exporter/meta/main.yml | 1 + .../exporter/register/filter_plugins/prometheus.py | 36 ++++++++++++ .../prometheus/exporter/register/handlers/main.yml | 7 +++ .../prometheus/exporter/register/tasks/main.yml | 67 ++++++++++++++++++++++ .../register/templates/blackbox/probe.yml.j2 | 5 ++ .../exporter/register/templates/generic.yml.j2 | 3 + .../exporter/register/templates/ipmi/remote.yml.j2 | 5 ++ .../exporter/register/templates/nut/ups.yml.j2 | 17 ++++++ .../exporter/register/templates/snmp/probe.yml.j2 | 5 ++ .../exporter/register/templates/ssl/probe.yml.j2 | 5 ++ .../prometheus/target/filter_plugins/prometheus.py | 36 ------------ .../monitoring/prometheus/target/handlers/main.yml | 7 --- roles/monitoring/prometheus/target/tasks/main.yml | 26 --------- .../target/templates/blackbox/probe.yml.j2 | 5 -- .../prometheus/target/templates/generic.yml.j2 | 3 - .../prometheus/target/templates/ipmi/remote.yml.j2 | 5 -- .../prometheus/target/templates/nut/ups.yml.j2 | 17 ------ .../prometheus/target/templates/snmp/probe.yml.j2 | 5 -- .../prometheus/target/templates/ssl/probe.yml.j2 | 5 -- 21 files changed, 152 insertions(+), 112 deletions(-) create mode 100644 roles/monitoring/prometheus/exporter/register/filter_plugins/prometheus.py create mode 100644 roles/monitoring/prometheus/exporter/register/handlers/main.yml create mode 100644 roles/monitoring/prometheus/exporter/register/tasks/main.yml create mode 100644 roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2 create mode 100644 roles/monitoring/prometheus/exporter/register/templates/generic.yml.j2 create mode 100644 roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2 create mode 100644 roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j2 create mode 100644 roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j2 create mode 100644 roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j2 delete mode 100644 roles/monitoring/prometheus/target/filter_plugins/prometheus.py delete mode 100644 roles/monitoring/prometheus/target/handlers/main.yml delete mode 100644 roles/monitoring/prometheus/target/tasks/main.yml delete mode 100644 roles/monitoring/prometheus/target/templates/blackbox/probe.yml.j2 delete mode 100644 roles/monitoring/prometheus/target/templates/generic.yml.j2 delete mode 100644 roles/monitoring/prometheus/target/templates/ipmi/remote.yml.j2 delete mode 100644 roles/monitoring/prometheus/target/templates/nut/ups.yml.j2 delete mode 100644 roles/monitoring/prometheus/target/templates/snmp/probe.yml.j2 delete mode 100644 roles/monitoring/prometheus/target/templates/ssl/probe.yml.j2 diff --git a/chaos-at-home/ch-testvm-phoebe.yml b/chaos-at-home/ch-testvm-phoebe.yml index 284677f9..29b260c0 100644 --- a/chaos-at-home/ch-testvm-phoebe.yml +++ b/chaos-at-home/ch-testvm-phoebe.yml @@ -14,4 +14,3 @@ - role: apt-repo/spreadspace - role: nginx/base - role: monitoring/prometheus/exporter - - role: monitoring/prometheus/target diff --git a/chaos-at-home/ch-testvm-prometheus.yml b/chaos-at-home/ch-testvm-prometheus.yml index 29e1e706..2087cdb9 100644 --- a/chaos-at-home/ch-testvm-prometheus.yml +++ b/chaos-at-home/ch-testvm-prometheus.yml @@ -15,8 +15,7 @@ - role: nginx/base - role: monitoring/prometheus/ca - role: monitoring/prometheus/server + - role: monitoring/prometheus/exporter #- role: monitoring/prometheus/alertmanager #- role: monitoring/grafana - role: monitoring/landingpage - - role: monitoring/prometheus/exporter - - role: monitoring/prometheus/target diff --git a/roles/monitoring/prometheus/exporter/meta/main.yml b/roles/monitoring/prometheus/exporter/meta/main.yml index 21b43396..c0f6e02a 100644 --- a/roles/monitoring/prometheus/exporter/meta/main.yml +++ b/roles/monitoring/prometheus/exporter/meta/main.yml @@ -19,3 +19,4 @@ dependencies: when: "'bind' in (prometheus_exporters_default | union(prometheus_exporters_extra))" - role: monitoring/prometheus/exporter/snmp when: "'snmp' in (prometheus_exporters_default | union(prometheus_exporters_extra))" + - role: monitoring/prometheus/exporter/register diff --git a/roles/monitoring/prometheus/exporter/register/filter_plugins/prometheus.py b/roles/monitoring/prometheus/exporter/register/filter_plugins/prometheus.py new file mode 100644 index 00000000..c29bce81 --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/filter_plugins/prometheus.py @@ -0,0 +1,36 @@ +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from functools import partial + +from ansible import errors + + +def prometheus_job_targets(vars, jobs): + try: + result = [] + for job in jobs: + multitarget_config_varname = 'prometheus_job_multitarget_' + job.replace('-', '_').replace('/', '__') + if multitarget_config_varname in vars: + for exporter_hostname, configs in vars[multitarget_config_varname].items(): + for config in configs: + result.append({'job': job, 'instance': config['instance'], 'enabled': True, + 'exporter_hostname': exporter_hostname, 'config': config}) + + else: + enabled = job in vars['prometheus_exporters_default'] or job in vars['prometheus_exporters_extra'] + result.append({'job': job, 'instance': vars['inventory_hostname'], 'enabled': enabled}) + return result + except Exception as e: + raise errors.AnsibleFilterError("prometheus_job_targets(): %s" % str(e)) + + +class FilterModule(object): + + ''' prometheus filters ''' + filter_map = { + 'prometheus_job_targets': prometheus_job_targets, + } + + def filters(self): + return self.filter_map diff --git a/roles/monitoring/prometheus/exporter/register/handlers/main.yml b/roles/monitoring/prometheus/exporter/register/handlers/main.yml new file mode 100644 index 00000000..1d386481 --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/handlers/main.yml @@ -0,0 +1,7 @@ +--- +- name: reload prometheus + delegate_to: "{{ prometheus_server }}" + run_once: yes + service: + name: prometheus + state: reloaded diff --git a/roles/monitoring/prometheus/exporter/register/tasks/main.yml b/roles/monitoring/prometheus/exporter/register/tasks/main.yml new file mode 100644 index 00000000..efb24a0f --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/tasks/main.yml @@ -0,0 +1,67 @@ +--- +# - name: register simple targets +# loop: "{{ prometheus_server_jobs | select('in', prometheus_exporters_default+prometheus_exporters_extra) }}" +# delegate_to: "{{ prometheus_server }}" +# template: +# src: "{{ lookup('first_found', {'paths': ['templates'], 'files': [item + '.yml.j2', 'generic.yml.j2']}) }}" +# dest: "/etc/prometheus/targets/{{ item }}/{{ inventory_hostname }}.yml" +# notify: reload prometheus + + + + + + +# result = [] +# for job in jobs: +# multitarget_config_varname = 'prometheus_job_multitarget_' + job.replace('-', '_').replace('/', '__') +# if multitarget_config_varname in vars: +# for exporter_hostname, configs in vars[multitarget_config_varname].items(): +# for config in configs: +# result.append({'job': job, 'instance': config['instance'], 'enabled': True, +# 'exporter_hostname': exporter_hostname, 'config': config}) +# +# else: +# enabled = job in vars['prometheus_exporters_default'] or job in vars['prometheus_exporters_extra'] +# result.append({'job': job, 'instance': vars['inventory_hostname'], 'enabled': enabled}) +# return result + +# - loop: "{{ prometheus_server_jobs | replace('-', '_') | replace('/', '__') }}" +# when: "('prometheus_job_multitarget_' + item) in vars" +# vars: +# blub: "{{ vars[item] }}" +# debug: +# var: blub + + +# set_fact: +# "prometheus_job_multitarget_{{ item }}": "{{ vars[item] }}" +# prometheus_job_multitarget_blackbox__probe: "{{ prometheus_job_multitarget_blackbox__probe }}" +# prometheus_job_multitarget_ssl__probe: "{{ prometheus_job_multitarget_ssl__probe }}" + + +- name: enable/disable job targets + vars: + job_targets: "{{ vars | prometheus_job_targets(prometheus_server_jobs) }}" + block: + - name: install files for enabled targets + loop: "{{ job_targets | selectattr('enabled') }}" + loop_control: + loop_var: target + label: "{{ target.job }} -> {{ target.instance }}" + delegate_to: "{{ prometheus_server }}" + template: + src: "{{ lookup('first_found', {'paths': ['templates'], 'files': [target.job + '.yml.j2', 'generic.yml.j2']}) }}" + dest: "/etc/prometheus/targets/{{ target.job }}/{{ target.instance }}.yml" + notify: reload prometheus + + - name: remove files for disabled targets + loop: "{{ job_targets | rejectattr('enabled') }}" + loop_control: + loop_var: target + label: "{{ target.job }} -> {{ target.instance }}" + delegate_to: "{{ prometheus_server }}" + file: + path: "/etc/prometheus/targets/{{ target.job }}/{{ target.instance }}.yml" + state: absent + notify: reload prometheus diff --git a/roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2 new file mode 100644 index 00000000..47e6dceb --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2 @@ -0,0 +1,5 @@ +- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] + labels: + instance: '{{ target.instance }}' + __param_target: '{{ target.config.target }}' + __param_module: '{{ target.config.module }}' diff --git a/roles/monitoring/prometheus/exporter/register/templates/generic.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/generic.yml.j2 new file mode 100644 index 00000000..341cb45a --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/templates/generic.yml.j2 @@ -0,0 +1,3 @@ +- targets: [ '{{ (target.instance == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.instance].prometheus_scrape_endpoint) }}' ] + labels: + instance: '{{ target.instance }}' diff --git a/roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2 new file mode 100644 index 00000000..47e6dceb --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2 @@ -0,0 +1,5 @@ +- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] + labels: + instance: '{{ target.instance }}' + __param_target: '{{ target.config.target }}' + __param_module: '{{ target.config.module }}' diff --git a/roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j2 new file mode 100644 index 00000000..a25cdfe5 --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j2 @@ -0,0 +1,17 @@ +- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] + labels: + instance: '{{ target.instance }}' + __param_ups: '{{ target.config.ups }}' + __param_server: '{{ target.config.server | default('127.0.0.1') }}' +{% if 'username' in target.config %} + __param_username: '{{ target.config.username }}' +{% endif %} +{% if 'password' in target.config %} + __param_password: '{{ target.config.password }}' +{% endif %} +{% if 'variables' in target.config %} + __param_variables: '{{ target.config.variables }}' +{% endif %} +{% if 'statuses' in target.config %} + __param_statuses: '{{ target.config.statuses }}' +{% endif %} diff --git a/roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j2 new file mode 100644 index 00000000..47e6dceb --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j2 @@ -0,0 +1,5 @@ +- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] + labels: + instance: '{{ target.instance }}' + __param_target: '{{ target.config.target }}' + __param_module: '{{ target.config.module }}' diff --git a/roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j2 new file mode 100644 index 00000000..47e6dceb --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j2 @@ -0,0 +1,5 @@ +- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] + labels: + instance: '{{ target.instance }}' + __param_target: '{{ target.config.target }}' + __param_module: '{{ target.config.module }}' diff --git a/roles/monitoring/prometheus/target/filter_plugins/prometheus.py b/roles/monitoring/prometheus/target/filter_plugins/prometheus.py deleted file mode 100644 index c29bce81..00000000 --- a/roles/monitoring/prometheus/target/filter_plugins/prometheus.py +++ /dev/null @@ -1,36 +0,0 @@ -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -from functools import partial - -from ansible import errors - - -def prometheus_job_targets(vars, jobs): - try: - result = [] - for job in jobs: - multitarget_config_varname = 'prometheus_job_multitarget_' + job.replace('-', '_').replace('/', '__') - if multitarget_config_varname in vars: - for exporter_hostname, configs in vars[multitarget_config_varname].items(): - for config in configs: - result.append({'job': job, 'instance': config['instance'], 'enabled': True, - 'exporter_hostname': exporter_hostname, 'config': config}) - - else: - enabled = job in vars['prometheus_exporters_default'] or job in vars['prometheus_exporters_extra'] - result.append({'job': job, 'instance': vars['inventory_hostname'], 'enabled': enabled}) - return result - except Exception as e: - raise errors.AnsibleFilterError("prometheus_job_targets(): %s" % str(e)) - - -class FilterModule(object): - - ''' prometheus filters ''' - filter_map = { - 'prometheus_job_targets': prometheus_job_targets, - } - - def filters(self): - return self.filter_map diff --git a/roles/monitoring/prometheus/target/handlers/main.yml b/roles/monitoring/prometheus/target/handlers/main.yml deleted file mode 100644 index 1d386481..00000000 --- a/roles/monitoring/prometheus/target/handlers/main.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -- name: reload prometheus - delegate_to: "{{ prometheus_server }}" - run_once: yes - service: - name: prometheus - state: reloaded diff --git a/roles/monitoring/prometheus/target/tasks/main.yml b/roles/monitoring/prometheus/target/tasks/main.yml deleted file mode 100644 index 69ea94f2..00000000 --- a/roles/monitoring/prometheus/target/tasks/main.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -- name: enable/disable job targets - vars: - job_targets: "{{ vars | prometheus_job_targets(prometheus_server_jobs) }}" - block: - - name: install files for enabled targets - loop: "{{ job_targets | selectattr('enabled') }}" - loop_control: - loop_var: target - label: "{{ target.job }} -> {{ target.instance }}" - delegate_to: "{{ prometheus_server }}" - template: - src: "{{ lookup('first_found', {'paths': ['templates'], 'files': [target.job + '.yml.j2', 'generic.yml.j2']}) }}" - dest: "/etc/prometheus/targets/{{ target.job }}/{{ target.instance }}.yml" - notify: reload prometheus - - - name: remove files for disabled targets - loop: "{{ job_targets | rejectattr('enabled') }}" - loop_control: - loop_var: target - label: "{{ target.job }} -> {{ target.instance }}" - delegate_to: "{{ prometheus_server }}" - file: - path: "/etc/prometheus/targets/{{ target.job }}/{{ target.instance }}.yml" - state: absent - notify: reload prometheus diff --git a/roles/monitoring/prometheus/target/templates/blackbox/probe.yml.j2 b/roles/monitoring/prometheus/target/templates/blackbox/probe.yml.j2 deleted file mode 100644 index 47e6dceb..00000000 --- a/roles/monitoring/prometheus/target/templates/blackbox/probe.yml.j2 +++ /dev/null @@ -1,5 +0,0 @@ -- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] - labels: - instance: '{{ target.instance }}' - __param_target: '{{ target.config.target }}' - __param_module: '{{ target.config.module }}' diff --git a/roles/monitoring/prometheus/target/templates/generic.yml.j2 b/roles/monitoring/prometheus/target/templates/generic.yml.j2 deleted file mode 100644 index 341cb45a..00000000 --- a/roles/monitoring/prometheus/target/templates/generic.yml.j2 +++ /dev/null @@ -1,3 +0,0 @@ -- targets: [ '{{ (target.instance == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.instance].prometheus_scrape_endpoint) }}' ] - labels: - instance: '{{ target.instance }}' diff --git a/roles/monitoring/prometheus/target/templates/ipmi/remote.yml.j2 b/roles/monitoring/prometheus/target/templates/ipmi/remote.yml.j2 deleted file mode 100644 index 47e6dceb..00000000 --- a/roles/monitoring/prometheus/target/templates/ipmi/remote.yml.j2 +++ /dev/null @@ -1,5 +0,0 @@ -- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] - labels: - instance: '{{ target.instance }}' - __param_target: '{{ target.config.target }}' - __param_module: '{{ target.config.module }}' diff --git a/roles/monitoring/prometheus/target/templates/nut/ups.yml.j2 b/roles/monitoring/prometheus/target/templates/nut/ups.yml.j2 deleted file mode 100644 index a25cdfe5..00000000 --- a/roles/monitoring/prometheus/target/templates/nut/ups.yml.j2 +++ /dev/null @@ -1,17 +0,0 @@ -- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] - labels: - instance: '{{ target.instance }}' - __param_ups: '{{ target.config.ups }}' - __param_server: '{{ target.config.server | default('127.0.0.1') }}' -{% if 'username' in target.config %} - __param_username: '{{ target.config.username }}' -{% endif %} -{% if 'password' in target.config %} - __param_password: '{{ target.config.password }}' -{% endif %} -{% if 'variables' in target.config %} - __param_variables: '{{ target.config.variables }}' -{% endif %} -{% if 'statuses' in target.config %} - __param_statuses: '{{ target.config.statuses }}' -{% endif %} diff --git a/roles/monitoring/prometheus/target/templates/snmp/probe.yml.j2 b/roles/monitoring/prometheus/target/templates/snmp/probe.yml.j2 deleted file mode 100644 index 47e6dceb..00000000 --- a/roles/monitoring/prometheus/target/templates/snmp/probe.yml.j2 +++ /dev/null @@ -1,5 +0,0 @@ -- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] - labels: - instance: '{{ target.instance }}' - __param_target: '{{ target.config.target }}' - __param_module: '{{ target.config.module }}' diff --git a/roles/monitoring/prometheus/target/templates/ssl/probe.yml.j2 b/roles/monitoring/prometheus/target/templates/ssl/probe.yml.j2 deleted file mode 100644 index 47e6dceb..00000000 --- a/roles/monitoring/prometheus/target/templates/ssl/probe.yml.j2 +++ /dev/null @@ -1,5 +0,0 @@ -- targets: [ '{{ (target.exporter_hostname == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.exporter_hostname].prometheus_scrape_endpoint) }}' ] - labels: - instance: '{{ target.instance }}' - __param_target: '{{ target.config.target }}' - __param_module: '{{ target.config.module }}' -- cgit v1.2.3