infra/ansible/roles/node_exporter/tasks/main.yml
Graham McIntire 922552059f
prom: add prometheus stack (prometheus, alertmanager, grafana, node_exporter)
Provisions prom.w5isp.com (10.0.15.31) as the home-cluster monitoring host.
Prometheus 3.6.0 scrapes the Talos cluster API/nodes/cAdvisor via an external
SA token; Grafana ships with the Prometheus datasource pre-provisioned.

host_vars opens 9090/9093/9100/3000 to 10.0.0.0/16 plus SSH from the home LAN
so the firewall role doesn't lock out admin access.
2026-05-08 09:50:31 -05:00

75 lines
2.4 KiB
YAML

---
# Installs Prometheus node_exporter from the upstream tarball and runs it under systemd.
- name: Create node_exporter group
ansible.builtin.group:
name: "{{ node_exporter_group }}"
system: true
state: present
- name: Create node_exporter user
ansible.builtin.user:
name: "{{ node_exporter_user }}"
group: "{{ node_exporter_group }}"
system: true
shell: /usr/sbin/nologin
home: /nonexistent
create_home: false
state: present
- name: Check installed node_exporter version
ansible.builtin.command: "{{ node_exporter_install_dir }}/node_exporter --version"
register: node_exporter_installed
changed_when: false
failed_when: false
- name: Set fact for installed version
ansible.builtin.set_fact:
node_exporter_needs_install: >-
{{
node_exporter_installed.rc != 0
or (node_exporter_version not in (node_exporter_installed.stderr | default('')))
and (node_exporter_version not in (node_exporter_installed.stdout | default('')))
}}
- name: Download node_exporter tarball
ansible.builtin.get_url:
url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-{{ node_exporter_arch }}.tar.gz"
dest: "/tmp/node_exporter-{{ node_exporter_version }}.tar.gz"
mode: "0644"
when: node_exporter_needs_install
- name: Extract node_exporter
ansible.builtin.unarchive:
src: "/tmp/node_exporter-{{ node_exporter_version }}.tar.gz"
dest: /tmp/
remote_src: true
creates: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ node_exporter_arch }}/node_exporter"
when: node_exporter_needs_install
- name: Install node_exporter binary
ansible.builtin.copy:
src: "/tmp/node_exporter-{{ node_exporter_version }}.linux-{{ node_exporter_arch }}/node_exporter"
dest: "{{ node_exporter_install_dir }}/node_exporter"
remote_src: true
owner: root
group: root
mode: "0755"
when: node_exporter_needs_install
notify: Restart node_exporter
- name: Install node_exporter systemd unit
ansible.builtin.template:
src: node_exporter.service.j2
dest: /etc/systemd/system/node_exporter.service
owner: root
group: root
mode: "0644"
notify: Restart node_exporter
- name: Enable and start node_exporter
ansible.builtin.systemd:
name: node_exporter
enabled: true
state: started
daemon_reload: true