From 26f683227569d1e30b392bbf92e795c757dede0c Mon Sep 17 00:00:00 2001 From: Freazzzing <ссс999.11@mail.ru> Date: Tue, 3 Feb 2026 04:43:05 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20Node=20Exporter=20=D0=BD=D0=B0=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=20=D1=85=D0=BE=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Создана роль node_exporter для установки на LXC контейнеры - Добавлен плейбук deploy_all_node_exporters.yml - Настроен ansible.cfg для правильного поиска ролей - Node Exporter успешно установлен на все 10 хостов - Prometheus собирает метрики со всех Node Exporters - Все 14 таргетов в состоянии UP --- ansible.cfg | 1 + .../monitoring/deploy_all_node_exporters.yml | 15 +++ roles/node_exporter/defaults/main.yml | 3 + roles/node_exporter/tasks/main.yml | 103 ++++++++++++++++++ .../templates/node_exporter.service.j2 | 30 +++++ 5 files changed, 152 insertions(+) create mode 100644 playbooks/monitoring/deploy_all_node_exporters.yml create mode 100644 roles/node_exporter/defaults/main.yml create mode 100644 roles/node_exporter/tasks/main.yml create mode 100644 roles/node_exporter/templates/node_exporter.service.j2 diff --git a/ansible.cfg b/ansible.cfg index 9a04cbd..93e2810 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -3,6 +3,7 @@ inventory = inventories/production/hosts host_key_checking = False interpreter_python = /usr/bin/python3 gathering = smart +roles_path = ./roles [ssh_connection] pipelining = True diff --git a/playbooks/monitoring/deploy_all_node_exporters.yml b/playbooks/monitoring/deploy_all_node_exporters.yml new file mode 100644 index 0000000..f81f09b --- /dev/null +++ b/playbooks/monitoring/deploy_all_node_exporters.yml @@ -0,0 +1,15 @@ +--- +- name: Deploy Node Exporter to ALL hosts + hosts: all + become: yes + gather_facts: yes + + pre_tasks: + - name: Update apt cache + apt: + update_cache: yes + when: ansible_os_family == 'Debian' + + roles: + - role: node_exporter + tags: node_exporter diff --git a/roles/node_exporter/defaults/main.yml b/roles/node_exporter/defaults/main.yml new file mode 100644 index 0000000..fea1425 --- /dev/null +++ b/roles/node_exporter/defaults/main.yml @@ -0,0 +1,3 @@ +--- +node_exporter_version: "1.7.0" +node_exporter_port: 9100 diff --git a/roles/node_exporter/tasks/main.yml b/roles/node_exporter/tasks/main.yml new file mode 100644 index 0000000..3408ae1 --- /dev/null +++ b/roles/node_exporter/tasks/main.yml @@ -0,0 +1,103 @@ +--- +- name: Install required packages + apt: + name: + - wget + - tar + state: present + update_cache: yes + tags: node_exporter + +- name: Create node_exporter user + user: + name: node_exporter + system: yes + shell: /bin/false + home: /nonexistent + comment: "Node Exporter Service User" + tags: node_exporter + +- name: Download Node Exporter + get_url: + url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz" + dest: "/tmp/node_exporter-{{ node_exporter_version }}.tar.gz" + timeout: 30 + validate_certs: no + tags: node_exporter + +- name: Extract Node Exporter + unarchive: + src: "/tmp/node_exporter-{{ node_exporter_version }}.tar.gz" + dest: "/tmp/" + remote_src: yes + creates: "/tmp/node_exporter-{{ node_exporter_version }}.linux-amd64" + tags: node_exporter + +- name: Install Node Exporter binary + copy: + src: "/tmp/node_exporter-{{ node_exporter_version }}.linux-amd64/node_exporter" + dest: "/usr/local/bin/node_exporter" + owner: node_exporter + group: node_exporter + mode: '0755' + remote_src: yes + tags: node_exporter + +- name: Create systemd service for LXC + template: + src: node_exporter.service.j2 + dest: /etc/systemd/system/node_exporter.service + owner: root + group: root + mode: '0644' + tags: node_exporter + +- name: Create textfile collector directory + file: + path: /var/lib/node_exporter/textfile_collector + state: directory + owner: node_exporter + group: node_exporter + mode: '0755' + tags: node_exporter + +- name: Clean up temp files + file: + path: "/tmp/node_exporter-{{ node_exporter_version }}.tar.gz" + state: absent + tags: node_exporter + +- name: Clean up extracted directory + file: + path: "/tmp/node_exporter-{{ node_exporter_version }}.linux-amd64" + state: absent + tags: node_exporter + +- name: Reload systemd + systemd: + daemon_reload: yes + tags: node_exporter + +- name: Enable and start Node Exporter + systemd: + name: node_exporter + enabled: yes + state: started + daemon_reload: yes + tags: node_exporter + +- name: Configure UFW for Node Exporter + ufw: + rule: allow + port: "{{ node_exporter_port }}" + proto: tcp + comment: "Node Exporter metrics" + tags: node_exporter + +- name: Verify Node Exporter is running + wait_for: + port: "{{ node_exporter_port }}" + host: "{{ ansible_host }}" + delay: 3 + timeout: 60 + tags: node_exporter diff --git a/roles/node_exporter/templates/node_exporter.service.j2 b/roles/node_exporter/templates/node_exporter.service.j2 new file mode 100644 index 0000000..69bad1e --- /dev/null +++ b/roles/node_exporter/templates/node_exporter.service.j2 @@ -0,0 +1,30 @@ +[Unit] +Description=Node Exporter +After=network.target +Wants=network.target + +[Service] +User=node_exporter +Group=node_exporter +Type=simple +ExecStart=/usr/local/bin/node_exporter \ + --collector.cpu \ + --collector.diskstats \ + --collector.filesystem \ + --collector.loadavg \ + --collector.meminfo \ + --collector.netdev \ + --collector.netstat \ + --collector.stat \ + --collector.time \ + --collector.uname \ + --collector.vmstat \ + --collector.systemd \ + --collector.textfile \ + --web.listen-address=:{{ node_exporter_port }} + +Restart=always +RestartSec=3 + +[Install] +WantedBy=multi-user.target