summaryrefslogtreecommitdiff
path: root/roles
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2021-09-24 22:33:33 +0200
committerChristian Pointner <equinox@spreadspace.org>2021-09-24 22:33:33 +0200
commit2316917055ec9399966033cc4944f5e5662c0136 (patch)
tree1a4368c6e8dcbd847eae7e2865764f24bf84610d /roles
parentrefactor textfile collector script handling (diff)
add prometheus exporter IPMI
Diffstat (limited to 'roles')
-rw-r--r--roles/monitoring/prometheus/exporter/TODO4
-rw-r--r--roles/monitoring/prometheus/exporter/blackbox/tasks/main.yml2
-rw-r--r--roles/monitoring/prometheus/exporter/ipmi/defaults/main.yml25
-rw-r--r--roles/monitoring/prometheus/exporter/ipmi/handlers/main.yml16
-rw-r--r--roles/monitoring/prometheus/exporter/ipmi/tasks/main.yml47
-rw-r--r--roles/monitoring/prometheus/exporter/ipmi/templates/config.yml.j24
-rw-r--r--roles/monitoring/prometheus/exporter/ipmi/templates/service.j232
7 files changed, 125 insertions, 5 deletions
diff --git a/roles/monitoring/prometheus/exporter/TODO b/roles/monitoring/prometheus/exporter/TODO
index 79ff8721..57179464 100644
--- a/roles/monitoring/prometheus/exporter/TODO
+++ b/roles/monitoring/prometheus/exporter/TODO
@@ -1,7 +1,3 @@
-IPMI Exporter:
- - https://github.com/soundcloud/ipmi_exporter
- - https://packages.debian.org/bullseye/prometheus-ipmi-exporter
-
Postfix Exporter:
- https://github.com/kumina/postfix_exporter
- https://packages.debian.org/bullseye/prometheus-postfix-exporter
diff --git a/roles/monitoring/prometheus/exporter/blackbox/tasks/main.yml b/roles/monitoring/prometheus/exporter/blackbox/tasks/main.yml
index cab521cc..782c3561 100644
--- a/roles/monitoring/prometheus/exporter/blackbox/tasks/main.yml
+++ b/roles/monitoring/prometheus/exporter/blackbox/tasks/main.yml
@@ -35,6 +35,6 @@
method: http
http:
port: 9115
- path: '/probe'
+ path: /probe
dest: /etc/prometheus/exporter/exporter/blackbox.yml
notify: reload prometheus-exporter-exporter
diff --git a/roles/monitoring/prometheus/exporter/ipmi/defaults/main.yml b/roles/monitoring/prometheus/exporter/ipmi/defaults/main.yml
new file mode 100644
index 00000000..9b99f9a5
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/ipmi/defaults/main.yml
@@ -0,0 +1,25 @@
+---
+prometheus_exporter_ipmi_modules:
+ default: {}
+ # collectors:
+ # - bmc
+ # - ipmi
+ # - chassis
+ # - dcmi
+ # - sel
+ # - sm-lan-mode
+ # exclude_sensor_ids:
+ # - 2
+ # - 29
+ # - 32
+ # thatspecialhost:
+ # user: "some_user"
+ # pass: "secret_pw"
+ # privilege: "admin"
+ # driver: "LAN"
+ # collectors:
+ # - ipmi
+ # - sel
+ # custom_args:
+ # ipmi:
+ # - "--bridge-sensors"
diff --git a/roles/monitoring/prometheus/exporter/ipmi/handlers/main.yml b/roles/monitoring/prometheus/exporter/ipmi/handlers/main.yml
new file mode 100644
index 00000000..40a945ae
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/ipmi/handlers/main.yml
@@ -0,0 +1,16 @@
+---
+- name: restart prometheus-ipmi-exporter
+ service:
+ name: prometheus-ipmi-exporter
+ state: restarted
+
+- name: reload prometheus-ipmi-exporter
+ service:
+ name: prometheus-ipmi-exporter
+ state: reloaded
+
+- name: reload prometheus-exporter-exporter
+ service:
+ name: prometheus-exporter-exporter
+ ## TODO: implement reload once exporter_exporter supports this...
+ state: restarted
diff --git a/roles/monitoring/prometheus/exporter/ipmi/tasks/main.yml b/roles/monitoring/prometheus/exporter/ipmi/tasks/main.yml
new file mode 100644
index 00000000..9e63f692
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/ipmi/tasks/main.yml
@@ -0,0 +1,47 @@
+---
+ ## TODO: pin version
+- name: install apt packages
+ apt:
+ name: prom-exporter-ipmi
+ state: present
+
+- name: create config directory
+ file:
+ path: /etc/prometheus/exporter/ipmi
+ state: directory
+
+- name: generate configuration
+ template:
+ src: config.yml.j2
+ dest: /etc/prometheus/exporter/ipmi/config.yml
+ notify: reload prometheus-ipmi-exporter
+
+- name: generate systemd service unit
+ template:
+ src: service.j2
+ dest: /etc/systemd/system/prometheus-ipmi-exporter.service
+ notify: restart prometheus-ipmi-exporter
+
+- name: make sure prometheus-ipmi-exporter is enabled and started
+ systemd:
+ name: prometheus-ipmi-exporter.service
+ daemon_reload: yes
+ state: started
+ enabled: yes
+
+- name: register exporter
+ loop:
+ - name: local
+ path: /metrics
+ - name: remote
+ path: /ipmi
+ loop_control:
+ label: "{{ item.name }}"
+ copy:
+ content: |
+ method: http
+ http:
+ port: 9290
+ path: {{ item.path }}
+ dest: "/etc/prometheus/exporter/exporter/ipmi-{{ item.name }}.yml"
+ notify: reload prometheus-exporter-exporter
diff --git a/roles/monitoring/prometheus/exporter/ipmi/templates/config.yml.j2 b/roles/monitoring/prometheus/exporter/ipmi/templates/config.yml.j2
new file mode 100644
index 00000000..32d0b34a
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/ipmi/templates/config.yml.j2
@@ -0,0 +1,4 @@
+# {{ ansible_managed }}
+
+modules:
+ {{ prometheus_exporter_ipmi_modules | to_nice_yaml(indent=2) | indent(2) }}
diff --git a/roles/monitoring/prometheus/exporter/ipmi/templates/service.j2 b/roles/monitoring/prometheus/exporter/ipmi/templates/service.j2
new file mode 100644
index 00000000..465215e8
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/ipmi/templates/service.j2
@@ -0,0 +1,32 @@
+[Unit]
+Description=Prometheus ipmi exporter
+
+[Service]
+Restart=always
+User=prometheus-exporter
+ExecStart=/usr/bin/prometheus-ipmi-exporter --web.listen-address="127.0.0.1:9290" --config.file=/etc/prometheus/exporter/ipmi/config.yml --freeipmi.path="/usr/sbin"
+ExecReload=/bin/kill -HUP $MAINPID
+
+{# TODO: test which hardening options need to be removed for IPMI to work... #}
+# systemd hardening-options
+AmbientCapabilities=
+CapabilityBoundingSet=
+DeviceAllow=/dev/null rw
+DevicePolicy=strict
+LockPersonality=true
+MemoryDenyWriteExecute=true
+NoNewPrivileges=true
+PrivateDevices=true
+PrivateTmp=true
+ProtectControlGroups=true
+ProtectHome=true
+ProtectKernelModules=true
+ProtectKernelTunables=true
+ProtectSystem=strict
+RemoveIPC=true
+RestrictNamespaces=true
+RestrictRealtime=true
+SystemCallArchitectures=native
+
+[Install]
+WantedBy=multi-user.target