From c5a54827d4692766d1776793d658dbfadd2ada4b Mon Sep 17 00:00:00 2001 From: uumas Date: Thu, 21 Dec 2023 01:32:53 +0200 Subject: [PATCH] prometheus: add blackbox exporter --- roles/prometheus/defaults/main.yml | 2 ++ roles/prometheus/meta/argument_specs.yml | 7 +++++ roles/prometheus/tasks/main.yml | 13 +++++++++ .../templates/blackbox_exporter.yml.j2 | 8 +++++ roles/prometheus/templates/prometheus.yml.j2 | 29 +++++++++++++++++++ 5 files changed, 59 insertions(+) create mode 100644 roles/prometheus/templates/blackbox_exporter.yml.j2 diff --git a/roles/prometheus/defaults/main.yml b/roles/prometheus/defaults/main.yml index 0e9134a..bd396dc 100644 --- a/roles/prometheus/defaults/main.yml +++ b/roles/prometheus/defaults/main.yml @@ -12,3 +12,5 @@ prometheus_install_webhook: false prometheus_install_grafana: false alertmanager_storage_retention: "{{ prometheus_storage_retention }}" + +prometheus_ping_hosts: [] diff --git a/roles/prometheus/meta/argument_specs.yml b/roles/prometheus/meta/argument_specs.yml index 0bca9f8..5896961 100644 --- a/roles/prometheus/meta/argument_specs.yml +++ b/roles/prometheus/meta/argument_specs.yml @@ -110,6 +110,13 @@ argument_specs: type: str required: true + prometheus_ping_hosts: + description: List of hosts to gather ping metrics for using prometheus blackbox exporter + type: list + required: false + default: [] + elements: str + # All options after this will be passed directly to the container role docker_service_suffix: description: "Passed to container role" diff --git a/roles/prometheus/tasks/main.yml b/roles/prometheus/tasks/main.yml index e0f7461..d3116b3 100644 --- a/roles/prometheus/tasks/main.yml +++ b/roles/prometheus/tasks/main.yml @@ -45,6 +45,19 @@ - name: prometheus when: prometheus_install_webhook +- name: Blackbox exporter for prometheus + include_role: + name: container + vars: + docker_service: blackbox_exporter + docker_image: prom/blackbox-exporter + reverse_proxy_type: none + docker_mounts: + - template: blackbox_exporter.yml + path: /etc/blackbox_exporter/config.yml + docker_networks: + - name: prometheus + - name: Grafana container for prometheus include_role: name: grafana diff --git a/roles/prometheus/templates/blackbox_exporter.yml.j2 b/roles/prometheus/templates/blackbox_exporter.yml.j2 new file mode 100644 index 0000000..a3764c3 --- /dev/null +++ b/roles/prometheus/templates/blackbox_exporter.yml.j2 @@ -0,0 +1,8 @@ +--- + +modules: + icmp: + prober: icmp + timeout: 5s + icmp: + preferred_ip_protocol: "ip4" diff --git a/roles/prometheus/templates/prometheus.yml.j2 b/roles/prometheus/templates/prometheus.yml.j2 index fafa33d..a968cf2 100644 --- a/roles/prometheus/templates/prometheus.yml.j2 +++ b/roles/prometheus/templates/prometheus.yml.j2 @@ -26,6 +26,35 @@ scrape_configs: static_configs: - targets: ["localhost:9090"] + - job_name: "blackbox" + static_configs: + - targets: ["blackbox_exporter:9115"] + +{% if prometheus_ping_hosts | length > 0 %} + - job_name: "icmp" + metrics_path: "/probe" + params: + module: ["icmp"] + static_configs: + - targets: +{% for host in prometheus_ping_hosts %} + - "{{ host.name }}::{{ host.type | default('monitored') }}" +{% endfor %} + relabel_configs: + - source_labels: [__address__] + regex: '(.+)::(.+)' + target_label: __param_target + replacement: '${1}' + - source_labels: [__address__] + regex: '(.+)::(.+)' + target_label: host_type + replacement: '${2}' + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: blackbox_exporter:9115 +{%- endif %} + {% if prometheus_hcloud_enabled %} - job_name: hcloud hetzner_sd_configs: