summaryrefslogtreecommitdiff
path: root/roles/monitoring/prometheus/exporter/register
diff options
context:
space:
mode:
Diffstat (limited to 'roles/monitoring/prometheus/exporter/register')
-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.yml67
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/blackbox/probe.yml.j25
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/generic.yml.j23
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/ipmi/remote.yml.j25
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/nut/ups.yml.j217
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/snmp/probe.yml.j25
-rw-r--r--roles/monitoring/prometheus/exporter/register/templates/ssl/probe.yml.j25
9 files changed, 150 insertions, 0 deletions
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 }}'