diff options
author | Christian Pointner <equinox@spreadspace.org> | 2023-02-07 01:06:34 +0100 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2023-02-07 01:06:34 +0100 |
commit | 23f148576ac663c58fb98b2375c0601876b3850d (patch) | |
tree | 53d9aea7c274187d7ac2c638091475c72b336ca6 /roles/monitoring | |
parent | ch-equinox-*: install python3-impacket (diff) | |
parent | remove promzone-test (diff) |
Merge branch 'topic/prometheus-targets-refactoring'
Diffstat (limited to 'roles/monitoring')
14 files changed, 95 insertions, 69 deletions
diff --git a/roles/monitoring/prometheus/exporter/TODO b/roles/monitoring/prometheus/exporter/TODO index 53ded412..02917b6d 100644 --- a/roles/monitoring/prometheus/exporter/TODO +++ b/roles/monitoring/prometheus/exporter/TODO @@ -6,10 +6,6 @@ NGINX Exporter: - https://github.com/nginxinc/nginx-prometheus-exporter - https://packages.debian.org/bullseye/prometheus-nginx-exporter -Bind Exporter: - - https://github.com/prometheus-community/bind_exporter - - https://packages.debian.org/bullseye/prometheus-bind-exporter - MySQLd Exporter: - https://github.com/prometheus/mysqld_exporter - https://packages.debian.org/bullseye/prometheus-mysqld-exporter @@ -18,10 +14,6 @@ Postgres Exporter: - https://github.com/prometheus-community/postgres_exporter - https://packages.debian.org/bullseye/prometheus-postgres-exporter -SNMP Exporter: - - https://github.com/prometheus/snmp_exporter - - https://packages.debian.org/bullseye/prometheus-snmp-exporter - Process Exporter: - https://github.com/ncabatoff/process-exporter - https://packages.debian.org/bullseye/prometheus-process-exporter 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/defaults/main.yml b/roles/monitoring/prometheus/exporter/register/defaults/main.yml new file mode 100644 index 00000000..90e839ed --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/defaults/main.yml @@ -0,0 +1,6 @@ +--- +prometheus_target_labels_default: {} +# foo: bar + +prometheus_target_labels_extra: {} +# blub: huhu 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..e8067a72 --- /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(jobs, vars): + 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..519975d6 --- /dev/null +++ b/roles/monitoring/prometheus/exporter/register/tasks/main.yml @@ -0,0 +1,27 @@ +--- +- name: enable/disable job targets + vars: + job_targets: "{{ prometheus_server_jobs | prometheus_job_targets(hostvars[inventory_hostname]) }}" + prometheus_target_labels: "{{ prometheus_target_labels_default | combine(prometheus_target_labels_extra) }}" + 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/server/templates/targets/ssl/probe.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2 index 47e6dceb..3ecf129a 100644 --- a/roles/monitoring/prometheus/server/templates/targets/ssl/probe.yml.j2 +++ b/roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2 @@ -3,3 +3,6 @@ instance: '{{ target.instance }}' __param_target: '{{ target.config.target }}' __param_module: '{{ target.config.module }}' +{% for name, value in prometheus_target_labels.items() %} + {{ name }}: '{{ value }}' +{% endfor %} diff --git a/roles/monitoring/prometheus/server/templates/targets/generic.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/generic.yml.j2 index 341cb45a..f269cf3a 100644 --- a/roles/monitoring/prometheus/server/templates/targets/generic.yml.j2 +++ b/roles/monitoring/prometheus/exporter/register/templates/generic.yml.j2 @@ -1,3 +1,6 @@ - targets: [ '{{ (target.instance == prometheus_server) | ternary('127.0.0.1:9999', hostvars[target.instance].prometheus_scrape_endpoint) }}' ] labels: instance: '{{ target.instance }}' +{% for name, value in prometheus_target_labels.items() %} + {{ name }}: '{{ value }}' +{% endfor %} diff --git a/roles/monitoring/prometheus/server/templates/targets/ipmi/remote.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2 index 47e6dceb..3ecf129a 100644 --- a/roles/monitoring/prometheus/server/templates/targets/ipmi/remote.yml.j2 +++ b/roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2 @@ -3,3 +3,6 @@ instance: '{{ target.instance }}' __param_target: '{{ target.config.target }}' __param_module: '{{ target.config.module }}' +{% for name, value in prometheus_target_labels.items() %} + {{ name }}: '{{ value }}' +{% endfor %} diff --git a/roles/monitoring/prometheus/server/templates/targets/nut/ups.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j2 index a25cdfe5..5181f4e4 100644 --- a/roles/monitoring/prometheus/server/templates/targets/nut/ups.yml.j2 +++ b/roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j2 @@ -15,3 +15,6 @@ {% if 'statuses' in target.config %} __param_statuses: '{{ target.config.statuses }}' {% endif %} +{% for name, value in prometheus_target_labels.items() %} + {{ name }}: '{{ value }}' +{% endfor %} diff --git a/roles/monitoring/prometheus/server/templates/targets/blackbox/probe.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j2 index 47e6dceb..3ecf129a 100644 --- a/roles/monitoring/prometheus/server/templates/targets/blackbox/probe.yml.j2 +++ b/roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j2 @@ -3,3 +3,6 @@ instance: '{{ target.instance }}' __param_target: '{{ target.config.target }}' __param_module: '{{ target.config.module }}' +{% for name, value in prometheus_target_labels.items() %} + {{ name }}: '{{ value }}' +{% endfor %} diff --git a/roles/monitoring/prometheus/server/templates/targets/snmp/probe.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j2 index 47e6dceb..3ecf129a 100644 --- a/roles/monitoring/prometheus/server/templates/targets/snmp/probe.yml.j2 +++ b/roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j2 @@ -3,3 +3,6 @@ instance: '{{ target.instance }}' __param_target: '{{ target.config.target }}' __param_module: '{{ target.config.module }}' +{% for name, value in prometheus_target_labels.items() %} + {{ name }}: '{{ value }}' +{% endfor %} diff --git a/roles/monitoring/prometheus/server/filter_plugins/prometheus.py b/roles/monitoring/prometheus/server/filter_plugins/prometheus.py deleted file mode 100644 index d91ef619..00000000 --- a/roles/monitoring/prometheus/server/filter_plugins/prometheus.py +++ /dev/null @@ -1,37 +0,0 @@ -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -from functools import partial - -from ansible import errors - - -def prometheus_job_targets(hostvars, jobs, targets): - try: - result = [] - for job in jobs: - for target in targets: - multitarget_config_varname = 'prometheus_job_multitarget_' + job.replace('-', '_').replace('/', '__') - if multitarget_config_varname in hostvars[target]: - for exporter_hostname, configs in hostvars[target][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 hostvars[target]['prometheus_exporters_default'] or job in hostvars[target]['prometheus_exporters_extra'] - result.append({'job': job, 'instance': target, '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/server/tasks/main.yml b/roles/monitoring/prometheus/server/tasks/main.yml index fce41214..ad78ee24 100644 --- a/roles/monitoring/prometheus/server/tasks/main.yml +++ b/roles/monitoring/prometheus/server/tasks/main.yml @@ -66,30 +66,6 @@ path: "/etc/prometheus/targets/{{ item }}" state: directory -- name: enable/disable job targets - vars: - job_targets: "{{ hostvars | prometheus_job_targets(prometheus_server_jobs, prometheus_zone_targets) }}" - block: - - name: install files for enabled targets - loop: "{{ job_targets | selectattr('enabled') }}" - loop_control: - loop_var: target - label: "{{ target.job }} -> {{ target.instance }}" - template: - src: "{{ lookup('first_found', {'paths': ['templates/targets'], '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 }}" - file: - path: "/etc/prometheus/targets/{{ target.job }}/{{ target.instance }}.yml" - state: absent - notify: reload prometheus - - name: create sub-directories for all jobs in rules directory loop: "{{ prometheus_server_jobs | union(prometheus_server_federation | default({}) | dict2items | map(attribute='value.jobs') | flatten | unique) | select('match', '.*/.*') | map('dirname') | unique }}" file: |