diff --git a/roles/prometheus-node-exporter/files/apt-obsolete.sh b/roles/prometheus-node-exporter/files/apt-obsolete.sh new file mode 100755 index 0000000000000000000000000000000000000000..8c0e69d6abc2ed5af1d2dcb58749a0c9d3f872e3 --- /dev/null +++ b/roles/prometheus-node-exporter/files/apt-obsolete.sh @@ -0,0 +1,11 @@ +#!/bin/bash +obsolete="$(comm -23 \ + <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' \ + | grep '^.[^nc]' | cut -f2 | sort) \ + <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u) \ + | awk 'END{printf "apt_obsolete %d", NR}' +)" + +echo "# HELP apt_obsolete Apt obsolete package." +echo "# TYPE apt_obsolete gauge" +echo "$obsolete" diff --git a/roles/prometheus-node-exporter/files/apt.sh b/roles/prometheus-node-exporter/files/apt.sh old mode 100755 new mode 100644 index 7333a6746d7ec87c6fbaae3bea69f441d46f7172..f50f7f24930ab2aeb143e10aebe47f339b016582 --- a/roles/prometheus-node-exporter/files/apt.sh +++ b/roles/prometheus-node-exporter/files/apt.sh @@ -19,11 +19,11 @@ autoremove="$(/usr/bin/apt-get --just-print autoremove \ | /usr/bin/awk '/^Remv/{a++}END{printf "apt_autoremove_pending %d", a}' )" -orphans="$(comm -23 \ +obsolete="$(comm -23 \ <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' \ | grep '^.[^nc]' | cut -f2 | sort) \ <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u) \ - | awk 'END{printf "apt_orphans %d", NR}' + | awk 'END{printf "apt_obsolete %d", NR}' )" echo '# HELP apt_upgrades_pending Apt package pending updates by origin.' @@ -38,9 +38,9 @@ echo '# HELP apt_autoremove_pending Apt package pending autoremove.' echo '# TYPE apt_autoremove_pending gauge' echo "${autoremove}" -echo '# HELP apt_orphans Orphan apt package.' -echo '# TYPE apt_orphans gauge' -echo "${orphans}" +echo "# HELP apt_obsolete Apt obsolete package." +echo "# TYPE apt_obsolete gauge" +echo "$obsolete" echo '# HELP node_reboot_required Node reboot is required for software updates.' echo '# TYPE node_reboot_required gauge' diff --git a/roles/prometheus-node-exporter/tasks/main.yml b/roles/prometheus-node-exporter/tasks/main.yml index 198fc087159665a9def35c0cbff0353918f1bb42..f2752d2a272e549ceba4e053dfc6714159a2e16a 100644 --- a/roles/prometheus-node-exporter/tasks/main.yml +++ b/roles/prometheus-node-exporter/tasks/main.yml @@ -38,10 +38,32 @@ dest: /etc/systemd/system/prometheus-node-exporter.service.d/override.conf register: override +- name: Deploy APT obsolete collector + copy: + src: apt-obsolete.sh + dest: /usr/share/prometheus-node-exporter-collectors/apt-obsolete.sh + owner: root + group: root + mode: 0755 + when: ansible_distribution_release == "bullseye" + +- name: Create /etc/systemd/system/prometheus-node-exporter-apt.service.d/ + file: + path: /etc/systemd/system/prometheus-node-exporter-apt.service.d/ + state: directory + when: ansible_distribution_release == "bullseye" + +- name: Patch prometheus-node-exporter-apt service + template: + src: systemd/system/prometheus-node-exporter-apt.service.d/override.conf.j2 + dest: /etc/systemd/system/prometheus-node-exporter-apt.service.d/override.conf + register: apt_override + when: ansible_distribution_release == "bullseye" + - name: systemctl daemon-reload systemd: daemon_reload: true - when: override.changed + when: override.changed or ( apt_override is defined and apt_override.changed ) - name: Activate prometheus-node-exporter service systemd: diff --git a/roles/prometheus-node-exporter/templates/systemd/system/prometheus-node-exporter-apt.service.d/override.conf.j2 b/roles/prometheus-node-exporter/templates/systemd/system/prometheus-node-exporter-apt.service.d/override.conf.j2 new file mode 100644 index 0000000000000000000000000000000000000000..ca231172711af7afdd813e1d5a90579acc6049e6 --- /dev/null +++ b/roles/prometheus-node-exporter/templates/systemd/system/prometheus-node-exporter-apt.service.d/override.conf.j2 @@ -0,0 +1,3 @@ +[Service] +ExecStart= +ExecStart=/bin/bash -c "cat <(/usr/share/prometheus-node-exporter-collectors/apt.sh) <(/usr/share/prometheus-node-exporter-collectors/apt-obsolete.sh) | sponge /var/lib/prometheus/node-exporter/apt.prom"