Merge ~jacekn/prometheus-charm:blackbox-relation into prometheus-charm:master

Proposed by Jacek Nykis
Status: Merged
Merge reported by: Jamon Camisso
Merged at revision: 0e2729a7f9ebdcfddaaba6c3d3124f6b46af5388
Proposed branch: ~jacekn/prometheus-charm:blackbox-relation
Merge into: prometheus-charm:master
Diff against target: 86 lines (+28/-3)
3 files modified
config.yaml (+2/-1)
metadata.yaml (+2/-0)
reactive/prometheus.py (+24/-2)
Reviewer Review Type Date Requested Status
Prometheus Charmers Pending
Review via email: mp+326083@code.launchpad.net

Description of the change

Add blackbox-exporter relation support

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/config.yaml b/config.yaml
index 0cf42bb..c61f50a 100644
--- a/config.yaml
+++ b/config.yaml
@@ -55,7 +55,8 @@ options:
55 description: |55 description: |
56 Can be used to add custom scrape jobs, for example SNMP exporter config.56 Can be used to add custom scrape jobs, for example SNMP exporter config.
57 This will be parsed as YAML, format is a list of dicts as shown in the example.57 This will be parsed as YAML, format is a list of dicts as shown in the example.
58 For convenience "{{ snmp_exporter }}" will be replaced with SNMP exporter address.58 For convenience "{{ snmp_exporter }}" and "{{ blackbox_exporter }}" will be
59 replaced with SNMP and blackbox exporter addresses respectively.
59 Example:60 Example:
60 - job_name: 'snmp'61 - job_name: 'snmp'
61 scrape_interval: 1m62 scrape_interval: 1m
diff --git a/metadata.yaml b/metadata.yaml
index dc5d651..c06eee2 100644
--- a/metadata.yaml
+++ b/metadata.yaml
@@ -29,6 +29,8 @@ requires:
29 interface: http29 interface: http
30 snmp-exporter:30 snmp-exporter:
31 interface: http31 interface: http
32 blackbox-exporter:
33 interface: http
32storage:34storage:
33 metrics-filesystem:35 metrics-filesystem:
34 type: filesystem36 type: filesystem
diff --git a/reactive/prometheus.py b/reactive/prometheus.py
index 667158e..e56d5bf 100644
--- a/reactive/prometheus.py
+++ b/reactive/prometheus.py
@@ -276,8 +276,9 @@ def get_manual_jobs():
276 return None276 return None
277 else:277 else:
278 snmp_exporter = unitdata.kv().get('snmp_exporter_address', '127.0.0.1:9116')278 snmp_exporter = unitdata.kv().get('snmp_exporter_address', '127.0.0.1:9116')
279 blackbox_exporter = unitdata.kv().get('blackbox_exporter_address', '127.0.0.1:9115')
279 t = Template(config.get('scrape-jobs'))280 t = Template(config.get('scrape-jobs'))
280 return t.render(snmp_exporter=snmp_exporter)281 return t.render(snmp_exporter=snmp_exporter, blackbox_exporter=blackbox_exporter)
281282
282283
283@when('prometheus.do-reconfig-yml')284@when('prometheus.do-reconfig-yml')
@@ -287,7 +288,6 @@ def write_prometheus_config_yml():
287288
288 ver_major, ver_minor, ver_patch = get_version()289 ver_major, ver_minor, ver_patch = get_version()
289 target_jobs = unitdata.kv().get('target_jobs', [])290 target_jobs = unitdata.kv().get('target_jobs', [])
290 target_juju_units = unitdata.kv().get('target_juju_units', {})
291 scrape_jobs = unitdata.kv().get('scrape_jobs', [])291 scrape_jobs = unitdata.kv().get('scrape_jobs', [])
292 manual_jobs = get_manual_jobs()292 manual_jobs = get_manual_jobs()
293293
@@ -593,6 +593,13 @@ def update_prometheus_no_snmp_exporter():
593593
594594
595@when('prometheus.started')595@when('prometheus.started')
596@when_not('blackbox-exporter.available')
597def update_prometheus_no_blackbox_exporter():
598 unitdata.kv().unset('blackbox_exporter_address')
599 set_state('prometheus.do-check-reconfig')
600
601
602@when('prometheus.started')
596@when('snmp-exporter.available')603@when('snmp-exporter.available')
597def update_prometheus_snmp_exporter(snmp_exporter):604def update_prometheus_snmp_exporter(snmp_exporter):
598 services = snmp_exporter.services()605 services = snmp_exporter.services()
@@ -608,6 +615,21 @@ def update_prometheus_snmp_exporter(snmp_exporter):
608615
609616
610@when('prometheus.started')617@when('prometheus.started')
618@when('blackbox-exporter.available')
619def update_prometheus_blackbox_exporter(blackbox_exporter):
620 services = blackbox_exporter.services()
621 if not (data_changed('blackbox-exporter.related_services', services)):
622 return
623 # At this point we only support single blackbox exporter target
624 for service in services:
625 for unit in service['hosts']:
626 hookenv.log('{} has a unit {}:{}'.format(
627 service['service_name'], unit['hostname'], unit['port']))
628 unitdata.kv().set('blackbox_exporter_address', '{hostname}:{port}'.format(**unit))
629 set_state('prometheus.do-check-reconfig')
630
631
632@when('prometheus.started')
611@when('nrpe-external-master.available')633@when('nrpe-external-master.available')
612def update_nrpe_config(svc):634def update_nrpe_config(svc):
613 hostname = nrpe.get_nagios_hostname()635 hostname = nrpe.get_nagios_hostname()

Subscribers

People subscribed via source and target branches