--- - name: Deploy Monitoring on general_server hosts: general_server become: yes vars_files: - group_vars/all/vars.yml - group_vars/all/vault.yml tasks: - name: Создание системного юзера ansible.builtin.user: name: metrics state: present shell: /usr/sbin/nologin - name: Создать директории для проекта ansible.builtin.file: path: "{{ item }}" state: directory mode: '0755' owner: metrics group: metrics loop: - "{{ monitoring_dir }}" - "{{ monitoring_dir }}/grafana_provisioning" - name: Устанавливаем Docker и утилиты apt: name: - docker.io - docker-compose - python3-pip - ufw - git - htop - rsync state: present update_cache: yes - name: Скопировать конфигурации сервисов ansible.builtin.template: src: "{{ item.src }}" dest: "{{ monitoring_dir }}/{{ item.dest }}" mode: '0644' owner: metrics group: metrics loop: - { src: "prometheus.yml.j2", dest: "prometheus.yml" } - { src: "prometheus-web.yml.j2", dest: "prometheus-web.yml" } - { src: "node-exporter-web.yml.j2", dest: "node-exporter-web.yml" } - { src: "grafana-datasource.yml.j2", dest: "grafana_provisioning/datasource.yml" } - { src: "docker-compose.yml.j2", dest: "docker-compose.yml" } notify: Restart docker-compose - name: Запустить Docker Compose community.docker.docker_compose_v2: project_src: "{{ monitoring_dir }}" state: present handlers: - name: Restart docker-compose community.docker.docker_compose_v2: project_src: "{{ monitoring_dir }}" state: restarted # ============================================================================================================== - name: Deploy Exporter on other servers hosts: all become: yes vars_files: - group_vars/all/vars.yml - group_vars/all/vault.yml tasks: - name: Создание системного юзера ansible.builtin.user: name: metrics state: present shell: /usr/sbin/nologin - name: Установить понятное имя хоста с индексом ansible.builtin.hostname: name: "node-{{ ansible_play_hosts.index(inventory_hostname) }}" when: ansible_play_hosts.index(inventory_hostname) > 0 notify: restart node-exporter - name: Создать директории для проекта ansible.builtin.file: path: "{{ monitoring_dir }}" state: directory mode: '0700' owner: metrics group: metrics - name: Устанавливаем Docker и утилиты apt: name: - python3-pip - ufw - git - htop - rsync state: present update_cache: yes - name: Создать системного пользователя для Node Exporter ansible.builtin.user: name: node_exporter shell: /usr/sbin/nologin system: true create_home: false - name: Создать директорию под конкретную версию ansible.builtin.file: path: "/opt/node_exporter-{{ node_exporter_version }}" state: directory owner: node_exporter group: node_exporter mode: '0700' - name: Скачать и распаковать архив экспортера ansible.builtin.unarchive: src: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-{{ node_exporter_arch }}.tar.gz" dest: "/opt/node_exporter-{{ node_exporter_version }}" remote_src: true extra_opts: - "--strip-components=1" creates: "/opt/node_exporter-{{ node_exporter_version }}/node_exporter" owner: node_exporter group: node_exporter - name: Создать симлинк на исполняемый файл ansible.builtin.file: src: "/opt/node_exporter-{{ node_exporter_version }}/node_exporter" dest: "/usr/local/bin/node_exporter" state: link force: true - name: Создать директорию для конфигурации экспортера ansible.builtin.file: path: /etc/node_exporter state: directory owner: node_exporter group: node_exporter mode: '0750' - name: Скопировать конфиг веб-авторизации для Node Exporter ansible.builtin.template: src: node-exporter-web.yml.j2 dest: /etc/node_exporter/web.yml owner: node_exporter group: node_exporter mode: '0600' - name: Создать 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: Включить автозапуск и запустить сервис ansible.builtin.systemd_service: name: node_exporter state: started enabled: true handlers: - name: restart node-exporter ansible.builtin.systemd_service: name: node_exporter state: restarted daemon_reload: true