diff --git a/playbook.yml b/playbook.yml index 6559fc6..4333911 100644 --- a/playbook.yml +++ b/playbook.yml @@ -3,161 +3,17 @@ hosts: general_server become: yes tasks: - - name: Создание системного юзера - ansible.builtin.user: - name: metrics - state: present - shell: /usr/sbin/nologin + - name: Deploy Prometheus and Grafana + ansible.builtin.include_role: + name: deploy_prometheus_and_grafana - - 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 tasks: - - name: Создание системного юзера - ansible.builtin.user: - name: metrics - state: present - shell: /usr/sbin/nologin - - - 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 + ansible.builtin.include_role: + name: deploy_exporters - - 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 \ No newline at end of file diff --git a/playbook.yml:Zone.Identifier b/playbook.yml:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/playbook.yml:Zone.Identifier differ diff --git a/roles/deploy_exporters/handlers/main.yml b/roles/deploy_exporters/handlers/main.yml new file mode 100644 index 0000000..8186061 --- /dev/null +++ b/roles/deploy_exporters/handlers/main.yml @@ -0,0 +1,5 @@ +- name: restart node-exporter + ansible.builtin.systemd_service: + name: node_exporter + state: restarted + daemon_reload: true \ No newline at end of file diff --git a/roles/deploy_exporters/handlers/main.yml:Zone.Identifier b/roles/deploy_exporters/handlers/main.yml:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/roles/deploy_exporters/handlers/main.yml:Zone.Identifier differ diff --git a/roles/deploy_exporters/tasks/create_user_node_exporter_and_dir.yml b/roles/deploy_exporters/tasks/create_user_node_exporter_and_dir.yml new file mode 100644 index 0000000..b4b723b --- /dev/null +++ b/roles/deploy_exporters/tasks/create_user_node_exporter_and_dir.yml @@ -0,0 +1,14 @@ +- 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' \ No newline at end of file diff --git a/roles/deploy_exporters/tasks/main.yml b/roles/deploy_exporters/tasks/main.yml new file mode 100644 index 0000000..b54532a --- /dev/null +++ b/roles/deploy_exporters/tasks/main.yml @@ -0,0 +1,55 @@ +- 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 + +- name: Создание пользователя и директорий для метрик + ansible.builtin.import_tasks: create_user_node_exporter_and_dir.yml + +- name: Подключение роли установки Docker + ansible.builtin.import_role: + name: install_Docker_and_utilities \ No newline at end of file diff --git a/roles/deploy_exporters/tasks/main.yml:Zone.Identifier b/roles/deploy_exporters/tasks/main.yml:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/roles/deploy_exporters/tasks/main.yml:Zone.Identifier differ diff --git a/roles/deploy_prometheus_and_grafana/handlers/main.yml b/roles/deploy_prometheus_and_grafana/handlers/main.yml new file mode 100644 index 0000000..e41ff96 --- /dev/null +++ b/roles/deploy_prometheus_and_grafana/handlers/main.yml @@ -0,0 +1,4 @@ +- name: Restart docker-compose + community.docker.docker_compose_v2: + project_src: "{{ monitoring_dir }}" + state: restarted \ No newline at end of file diff --git a/roles/deploy_prometheus_and_grafana/handlers/main.yml:Zone.Identifier b/roles/deploy_prometheus_and_grafana/handlers/main.yml:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/roles/deploy_prometheus_and_grafana/handlers/main.yml:Zone.Identifier differ diff --git a/roles/deploy_prometheus_and_grafana/tasks/create_user_metrics_and_dir.yml b/roles/deploy_prometheus_and_grafana/tasks/create_user_metrics_and_dir.yml new file mode 100644 index 0000000..0b40ed9 --- /dev/null +++ b/roles/deploy_prometheus_and_grafana/tasks/create_user_metrics_and_dir.yml @@ -0,0 +1,17 @@ +--- +- 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" diff --git a/roles/deploy_prometheus_and_grafana/tasks/main.yml b/roles/deploy_prometheus_and_grafana/tasks/main.yml new file mode 100644 index 0000000..1f06ec1 --- /dev/null +++ b/roles/deploy_prometheus_and_grafana/tasks/main.yml @@ -0,0 +1,27 @@ +- 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 + +- name: Создание пользователя и директорий для метрик + ansible.builtin.import_tasks: create_user_metrics_and_dir.yml + +- name: Подключение роли установки Docker + ansible.builtin.import_role: + name: install_Docker_and_utilities + diff --git a/roles/deploy_prometheus_and_grafana/tasks/main.yml:Zone.Identifier b/roles/deploy_prometheus_and_grafana/tasks/main.yml:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/roles/deploy_prometheus_and_grafana/tasks/main.yml:Zone.Identifier differ diff --git a/roles/install_Docker_and_utilities/tasks/main.yml b/roles/install_Docker_and_utilities/tasks/main.yml new file mode 100644 index 0000000..60a754e --- /dev/null +++ b/roles/install_Docker_and_utilities/tasks/main.yml @@ -0,0 +1,12 @@ +- name: Устанавливаем Docker и утилиты + ansible.builtin.apt: + name: + - docker.io + - docker-compose + - python3-pip + - ufw + - git + - htop + - rsync + state: present + update_cache: true diff --git a/terraform-infra/playbook.yml b/terraform-infra/playbook.yml new file mode 100644 index 0000000..d01408a --- /dev/null +++ b/terraform-infra/playbook.yml @@ -0,0 +1,33 @@ +--- +- name: Deploy Monitoring on general_server + hosts: general_server + become: yes + tasks: + - name: Создание системного юзера и папки проекта + ansible.builtin.import_tasks: tasks/create_user_and_dir.yml + + - name: install Docker and itilities... + ansible.builtin.include_role: + name: install_Docker_and_utilities + + - name: Deploy Prometheus and Grafana + ansible.builtin.include_role: + name: deploy_prometheus_and_grafana + +# =============================================== + +- name: Deploy Exporter on other servers + hosts: all + become: yes + tasks: + - name: install Docker and itilities... + ansible.builtin.include_role: + name: install_Docker_and_utilities + + - name: Создать системного пользователя для Node Exporter + ansible.builtin.import_tasks: tasks/create_user_node_exporter_and_dir.yml + + - name: Скачать и распаковать архив экспортера + ansible.builtin.include_role: + name: deploy_exporters + diff --git a/terraform-infra/playbook.yml:Zone.Identifier b/terraform-infra/playbook.yml:Zone.Identifier new file mode 100644 index 0000000..d6c1ec6 Binary files /dev/null and b/terraform-infra/playbook.yml:Zone.Identifier differ