LogNotes

2025-07-09 19:53:42
#ok Ниже приведён **полный Ansible playbook** для установки **node_exporter-1.9.1.linux-amd64.tar.gz**, который лежит локально в `/tmp` на управляющей машине. Playbook:

% 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/
← Previous Next →
Back to list