feat: add Node Exporter Full dashboard and auto-installation

- Add Node Exporter Full dashboard (ID: 1860) from Grafana.com
- Configure automatic dashboard installation in playbook.yml
- Add prometheus-node-exporter service installation and configuration
- Add port 9100 to UFW firewall rules
- Add dashboard verification tasks in playbook
- Configure Grafana variables for admin credentials
This commit is contained in:
2025-09-16 12:19:48 +03:00
parent 4eb21a7dbc
commit 0d5dc67eb9
2 changed files with 16184 additions and 0 deletions

View File

@@ -14,6 +14,9 @@
old_server: "root@77.223.98.129" old_server: "root@77.223.98.129"
# Опция: пересоздавать папку /home/prod (по умолчанию — нет) # Опция: пересоздавать папку /home/prod (по умолчанию — нет)
recreate_project: false recreate_project: false
# Grafana настройки
grafana_admin_user: "{{ lookup('env', 'GRAFANA_ADMIN_USER') | default('admin') }}"
grafana_admin_password: "{{ lookup('env', 'GRAFANA_ADMIN_PASSWORD') | default('admin') }}"
tasks: tasks:
- name: Обновить SSH host key для избежания ошибок при переустановке - name: Обновить SSH host key для избежания ошибок при переустановке
@@ -52,8 +55,33 @@
- iotop - iotop
- traceroute - traceroute
- ncdu - ncdu
- prometheus-node-exporter
state: present state: present
- name: Включить и запустить prometheus-node-exporter
systemd:
name: prometheus-node-exporter
enabled: yes
state: started
- name: Проверить статус prometheus-node-exporter
command: systemctl status prometheus-node-exporter
register: node_exporter_status
changed_when: false
- name: Показать статус prometheus-node-exporter
debug:
var: node_exporter_status.stdout_lines
- name: Проверить, что node_exporter слушает на порту 9100
command: netstat -tulpn | grep 9100
register: node_exporter_port
changed_when: false
- name: Показать информацию о порте 9100
debug:
var: node_exporter_port.stdout_lines
- name: Обновить Docker Compose до последней версии - name: Обновить Docker Compose до последней версии
get_url: get_url:
url: "https://github.com/docker/compose/releases/latest/download/docker-compose-{{ ansible_system }}-{{ ansible_architecture }}" url: "https://github.com/docker/compose/releases/latest/download/docker-compose-{{ ansible_system }}-{{ ansible_architecture }}"
@@ -92,6 +120,7 @@
- "8081" # AnonBot - "8081" # AnonBot
- "9090" # Prometheus - "9090" # Prometheus
- "3000" # Grafana - "3000" # Grafana
- "9100" # Node Exporter
- name: Проверить существование пользователя deploy - name: Проверить существование пользователя deploy
getent: getent:
@@ -387,6 +416,16 @@
recurse: yes recurse: yes
become: yes become: yes
- name: Убедиться, что дашборд Node Exporter Full скопирован
copy:
src: "{{ project_root }}/infra/grafana/provisioning/dashboards/node-exporter-full-dashboard.json"
dest: "{{ project_root }}/infra/grafana/provisioning/dashboards/node-exporter-full-dashboard.json"
owner: "{{ deploy_user }}"
group: "{{ deploy_user }}"
mode: '0644'
become: yes
become_user: "{{ deploy_user }}"
- name: Запустить ботов через make up - name: Запустить ботов через make up
command: make up command: make up
args: args:
@@ -427,6 +466,37 @@
timeout: 30 timeout: 30
state: started state: started
- name: Проверить, что порт 9100 (Node Exporter) открыт
wait_for:
port: 9100
host: "{{ ansible_host }}"
timeout: 30
state: started
- name: Проверить доступность Grafana API
uri:
url: "http://{{ ansible_host }}:3000/api/health"
method: GET
status_code: 200
register: grafana_health
retries: 5
delay: 10
- name: Проверить, что дашборд Node Exporter загружен в Grafana
uri:
url: "http://{{ ansible_host }}:3000/api/search?query=Node%20Exporter%20Full"
method: GET
user: "{{ grafana_admin_user | default('admin') }}"
password: "{{ grafana_admin_password | default('admin') }}"
status_code: 200
register: dashboard_check
retries: 3
delay: 5
- name: Показать информацию о найденных дашбордах
debug:
var: dashboard_check.json
- name: Проверка запуска ботов завершена — всё работает 🟢 - name: Проверка запуска ботов завершена — всё работает 🟢
debug: debug:
msg: "Все сервисы запущены и слушают нужные порты." msg: "Все сервисы запущены и слушают нужные порты."

File diff suppressed because it is too large Load Diff