% cat node_exporter.yml
---

  • name: Установка Prometheus Node Exporter из локального архива

hosts: all
become: yes
vars:
node_exporter_user: "node_exporter"
node_exporter_group: "node_exporter"
node_exporter_bin_path: "/usr/local/bin/node_exporter"
node_exporter_service_path: "/etc/systemd/system/node_exporter.service"
node_exporter_listen_address: "0.0.0.0:9100"

tasks:

  • name: Создаём системную группу для node_exporter

group:
name: "{{ node_exporter_group }}"
system: yes

  • name: Создаём системного пользователя для node_exporter

user:
name: "{{ node_exporter_user }}"
group: "{{ node_exporter_group }}"
shell: /sbin/nologin
system: yes
create_home: no

  • name: Копируем бинарник node_exporter в {{ node_exporter_bin_path }}

copy:
src: "file/node_exporter"
dest: "{{ node_exporter_bin_path }}"
mode: '0755'
owner: "{{ node_exporter_user }}"
group: "{{ node_exporter_group }}"

  • name: Создаём systemd unit файл для node_exporter

copy:
dest: "{{ node_exporter_service_path }}"
content: |
[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User={{ node_exporter_user }}
Group={{ node_exporter_group }}
Type=simple
ExecStart={{ node_exporter_bin_path }} --web.listen-address={{ node_exporter_listen_address }}
Restart=always

[Install]
WantedBy=multi-user.target
mode: '0644'
owner: root
group: root
notify:

  • Reload systemd
  • Restart node_exporter
  • name: Включаем автозапуск node_exporter

systemd:
name: node_exporter
enabled: yes

  • name: Проверяем статус firewalld

systemd:
name: firewalld
state: started
enabled: yes
register: firewalld_status
ignore_errors: yes # Игнорируем ошибку, если firewalld не запущен

  • name: Открываем порт 9100/tcp для node_exporter (постоянно)

command: firewall-cmd --zone=public --add-port=9100/tcp --permanent
when: firewalld_status.status.ActiveState == "active"
changed_when: yes # Всегда считаем, что команда что-то изменила, чтобы вызвать reload
notify: Reload firewalld

handlers:

  • name: Reload systemd

systemd:
daemon_reload: yes

  • name: Restart node_exporter

systemd:
name: node_exporter
state: restarted
enabled: yes

  • name: Reload firewalld

command: firewall-cmd --reload

[1] https://github.com/geerlingguy/ansible-role-node_exporter
[2] https://everythingcoding.in/node-exporter-setup-through-ansible/
[3] https://stackoverflow.com/questions/72449595/ansible-role-for-node-exporter-installation
[4] https://sitidy.id/use-ansible-to-deploy-prometheus-node-exporter-47d9bcec8896
[5] https://github.com/ajidiyantoro/ansible-playbook/blob/main/node-exporter.yaml
[6] https://blog.devops.dev/how-to-install-prometheus-and-node-exporter-using-an-ansible-role-b9ccd3d4bf3c
[7] https://developers.redhat.com/articles/2024/08/28/monitor-ansible-automation-platform-using-prometheus-node-exporter-and-grafana
[8] https://galaxy.ansible.com/ui/repo/published/libredevops/prometheus/content/role/node_exporter/

[file-name 000168_2025-07-09_19-53-42.txt]