From 31bfa9d94cf608921a2d4447ec68ad82a3c80537 Mon Sep 17 00:00:00 2001 From: Olivier Bourdon Date: Mon, 10 Jul 2017 10:01:46 +0200 Subject: [PATCH] Fix exporters configuration to be generic Change-Id: If5cf3662f96311a5f37055c0f62934ba5407a978 --- metadata/service/exporters/jmx.yml | 9 +++--- metadata/service/exporters/libvirt.yml | 9 +++--- prometheus/_exporters_config.sls | 42 ++++++++++++++++++++++++++ prometheus/exporters.sls | 1 - prometheus/map.jinja | 1 + prometheus/meta/salt.yml | 2 +- 6 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 prometheus/_exporters_config.sls diff --git a/metadata/service/exporters/jmx.yml b/metadata/service/exporters/jmx.yml index ba23709..50c8df8 100644 --- a/metadata/service/exporters/jmx.yml +++ b/metadata/service/exporters/jmx.yml @@ -6,9 +6,10 @@ parameters: prometheus: exporters: jmx: - enabled: true packages: - jmx-exporter - bind: - address: 0.0.0.0 - port: ${_param:prometheus_exporter_jmx_port} + services: + cassandra: + bind: + address: 0.0.0.0 + port: ${_param:prometheus_exporter_jmx_port} diff --git a/metadata/service/exporters/libvirt.yml b/metadata/service/exporters/libvirt.yml index 9f277ea..2c910bb 100644 --- a/metadata/service/exporters/libvirt.yml +++ b/metadata/service/exporters/libvirt.yml @@ -6,9 +6,10 @@ parameters: prometheus: exporters: libvirt: - enabled: true packages: - libvirt-exporter - bind: - address: 0.0.0.0 - port: ${_param:prometheus_exporter_libvirt_port} + services: + qemu: + bind: + address: 0.0.0.0 + port: ${_param:prometheus_exporter_libvirt_port} diff --git a/prometheus/_exporters_config.sls b/prometheus/_exporters_config.sls new file mode 100644 index 0000000..35b9ff7 --- /dev/null +++ b/prometheus/_exporters_config.sls @@ -0,0 +1,42 @@ + {%- if exporters is defined %} + {%- if new_exporters_cfg is defined %} + {%- do salt['defaults.merge'](exporters, new_exporters_cfg['exporters']) %} + {%- endif %} + {%- set host = grains.get('host', "") %} + {%- set host_ip_address = grains['fqdn_ip4'][0] %} + {%- load_yaml as svc_configs %} + {%- for exporter, parameters in exporters.iteritems() %} + {%- if parameters.get('enabled', False) %} + {%- for svc, svc_parameters in parameters.get('services', {}).iteritems() %} + {%- if svc_parameters.get('enabled', False) %} + {%- if svc_parameters.bind is defined %} + {%- if svc_parameters.bind.get('address', '0.0.0.0') == '0.0.0.0' %} + {%- set address = host_ip_address %} + {%- else %} + {%- set address = svc_parameters.bind.address %} + {%- endif %} + {%- endif %} + {%- endif %} + {%- if address is defined and svc_parameters.bind.port is defined %} + {{ exporter }}_{{ svc }}_exporter: + endpoint: + - address: {{ address }} + port: {{ svc_parameters.bind.port }} + {%- if host is defined and host|length > 0 %} + metric_relabel: + - regex: {{ address }}:{{ svc_parameters.bind.port }} + replacement: {{ host }} + source_labels: "instance" + target_label: "host" + {%- endif %} + {%- endif %} + {%- endfor %} + {%- endif %} + {%- endfor %} + {%- endload %} + {%- if svc_configs %} + target: + static: +{{ svc_configs|yaml(False)|indent(6, True) }} + {%- endif %} + {%- endif %} diff --git a/prometheus/exporters.sls b/prometheus/exporters.sls index 8baba39..c44126f 100644 --- a/prometheus/exporters.sls +++ b/prometheus/exporters.sls @@ -1,5 +1,4 @@ {% from "prometheus/map.jinja" import exporters with context %} - {%- for exporter, parameters in exporters.iteritems() %} {%- if parameters.get('enabled', False) %} {%- if parameters.get('packages', False) %} diff --git a/prometheus/map.jinja b/prometheus/map.jinja index 7b6887a..5a66470 100644 --- a/prometheus/map.jinja +++ b/prometheus/map.jinja @@ -16,3 +16,4 @@ 'default': { }, }, merge=salt['pillar.get']('prometheus:exporters')) %} +{%- do salt['defaults.merge'](exporters, grains.get('prometheus', {}).get('exporters', {})) %} diff --git a/prometheus/meta/salt.yml b/prometheus/meta/salt.yml index a886376..35c49b0 100644 --- a/prometheus/meta/salt.yml +++ b/prometheus/meta/salt.yml @@ -1,6 +1,6 @@ grain: {%- if pillar.get('prometheus', {}).get('collector') %} - {%- from "prometheus/map.jinja" import server as prometheus_server with context %} + {%- from "prometheus/map.jinja" import exporters,server as prometheus_server with context %} prometheus: {%- set service_grains = {'prometheus': {'server': {'alert': {}, 'recording': {}, 'target': {}}}} %} {%- for service_name, service in pillar.items() %}