From 6aafd88ab17b8ac7a3462af935f02f67d91eff77 Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <ynerant@crans.org>
Date: Thu, 4 Aug 2022 10:36:44 +0200
Subject: [PATCH] [bird] Deploy prometheus-bird-exporter on routers to monitor
 routes

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
---
 group_vars/bird.yml                             |  3 +++
 host_vars/monitoring.adm.crans.org.yml          | 17 +++++++++++++++++
 plays/monitoring.yml                            |  7 +++++++
 .../prometheus-bird-exporter/handlers/main.yml  |  5 +++++
 roles/prometheus-bird-exporter/tasks/main.yml   | 16 ++++++++++++++++
 5 files changed, 48 insertions(+)
 create mode 100644 roles/prometheus-bird-exporter/handlers/main.yml
 create mode 100644 roles/prometheus-bird-exporter/tasks/main.yml

diff --git a/group_vars/bird.yml b/group_vars/bird.yml
index 640499de..e1d2e891 100644
--- a/group_vars/bird.yml
+++ b/group_vars/bird.yml
@@ -1,2 +1,5 @@
 ---
 glob_bird: {}
+
+glob_prometheus_bird_exporter:
+  listen_addr: "{{ query('ldap', 'ip', ansible_hostname, 'adm') | ansible.utils.ipv4 | first }}"
diff --git a/host_vars/monitoring.adm.crans.org.yml b/host_vars/monitoring.adm.crans.org.yml
index fc4f2a9b..0d75d169 100644
--- a/host_vars/monitoring.adm.crans.org.yml
+++ b/host_vars/monitoring.adm.crans.org.yml
@@ -98,6 +98,23 @@ loc_prometheus:
           - target_label: __address__
             replacement: 127.0.0.1:9115
 
+  bird:
+    file: targets_bird.json
+    targets: "{{ groups['bird'] | select('match', '^.*\\.adm\\.crans\\.org$')  | list | sort }}"
+    config:
+      - job_name: servers
+        file_sd_configs:
+          - files:
+              - '/etc/prometheus/targets_bird.json'
+        relabel_configs:
+          - source_labels: [__address__]
+            target_label: __param_target
+          - source_labels: [__param_target]
+            target_label: instance
+          - source_labels: [__param_target]
+            target_label: __address__
+            replacement: '$1:9324'
+
   mtail:
     file: targets_mtail.json
     targets:
diff --git a/plays/monitoring.yml b/plays/monitoring.yml
index 7704fe8b..a09218ad 100755
--- a/plays/monitoring.yml
+++ b/plays/monitoring.yml
@@ -46,6 +46,13 @@
   roles:
     - prometheus-nginx-exporter
 
+# Monitor Bird metrics
+- hosts: bird
+  vars:
+    prometheus_bird_exporter: "{{ glob_prometheus_bird_exporter | default({}) | combine(loc_prometheus_bird_exporter | default({})) }}"
+  roles:
+    - prometheus-bird-exporter
+
 # Monitor mailq with a special text exporter
 # - hosts: redisdead.adm.crans.org
 #   roles: ["prometheus-node-exporter-postfix"]
diff --git a/roles/prometheus-bird-exporter/handlers/main.yml b/roles/prometheus-bird-exporter/handlers/main.yml
new file mode 100644
index 00000000..b8912526
--- /dev/null
+++ b/roles/prometheus-bird-exporter/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: Restart prometheus-bird-exporter
+  service:
+    name: prometheus-bird-exporter
+    state: restarted
diff --git a/roles/prometheus-bird-exporter/tasks/main.yml b/roles/prometheus-bird-exporter/tasks/main.yml
new file mode 100644
index 00000000..effc17d5
--- /dev/null
+++ b/roles/prometheus-bird-exporter/tasks/main.yml
@@ -0,0 +1,16 @@
+---
+- name: Install Prometheus bird-exporter
+  apt:
+    update_cache: true
+    name: prometheus-bird-exporter
+  register: apt_result
+  retries: 3
+  until: apt_result is succeeded
+
+- name: Make Prometheus bird-exporter listen on adm only and use Bird v2
+  lineinfile:
+    path: /etc/default/prometheus-bird-exporter
+    regexp: ^ARGS=
+    line: |
+      ARGS="-format.new -bird.v2 -web.listen-address={{ prometheus_bird_exporter.listen_addr }}:9324"
+  notify: Restart prometheus-bird-exporter