summaryrefslogtreecommitdiff
path: root/roles/monitoring/prometheus/exporter
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2023-02-07 01:06:34 +0100
committerChristian Pointner <equinox@spreadspace.org>2023-02-07 01:06:34 +0100
commit23f148576ac663c58fb98b2375c0601876b3850d (patch)
tree53d9aea7c274187d7ac2c638091475c72b336ca6 /roles/monitoring/prometheus/exporter
parentch-equinox-*: install python3-impacket (diff)
parentremove promzone-test (diff)
Merge branch 'topic/prometheus-targets-refactoring'
Diffstat (limited to 'roles/monitoring/prometheus/exporter')
-rw-r--r--roles/monitoring/prometheus/exporter/TODO8
-rw-r--r--roles/monitoring/prometheus/exporter/meta/main.yml1
-rw-r--r--roles/monitoring/prometheus/exporter/register/defaults/main.yml6
-rw-r--r--roles/monitoring/prometheus/exporter/register/filter_plugins/prometheus.py36
-rw-r--r--roles/monitoring/prometheus/exporter/register/handlers/main.yml7
-rw-r--r--roles/monitoring/prometheus/exporter/register/tasks/main.yml27
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j28
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/generic.yml.j26
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j28
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j220
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j28
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j28
12 files changed, 135 insertions, 8 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/exporter/register/templates/blackbox/probe.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2
new file mode 100644
index 00000000..3ecf129a
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j2
@@ -0,0 +1,8 @@
+- 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 }}'
+{% for name, value in prometheus_target_labels.items() %}
+ {{ name }}: '{{ value }}'
+{% endfor %}
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..f269cf3a
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/register/templates/generic.yml.j2
@@ -0,0 +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/exporter/register/templates/ipmi/remote.yml.j2 b/roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2
new file mode 100644
index 00000000..3ecf129a
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j2
@@ -0,0 +1,8 @@
+- 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 }}'
+{% for name, value in prometheus_target_labels.items() %}
+ {{ name }}: '{{ value }}'
+{% endfor %}
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..5181f4e4
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j2
@@ -0,0 +1,20 @@
+- 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 %}
+{% for name, value in prometheus_target_labels.items() %}
+ {{ name }}: '{{ value }}'
+{% endfor %}
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..3ecf129a
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j2
@@ -0,0 +1,8 @@
+- 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 }}'
+{% for name, value in prometheus_target_labels.items() %}
+ {{ name }}: '{{ value }}'
+{% endfor %}
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..3ecf129a
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j2
@@ -0,0 +1,8 @@
+- 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 }}'
+{% for name, value in prometheus_target_labels.items() %}
+ {{ name }}: '{{ value }}'
+{% endfor %}