From 6927198e63cce9b8e789cacdccde16f08bd3b631 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 19 Nov 2025 12:47:30 +0000 Subject: [PATCH] Update 8 files - /roles/pve_monitoring/tasks/main.yml - /roles/pve_monitoring/templates/pve_exporter_config.yml.j2 - /roles/[delete]pve_monitoring/tasks/main.yml - /roles/[delete]pve_monitoring/templates/pve_exporter_config.yml.j2 - /roles/cadvisor/tasks/main.yml - /roles/cadvisor/templates/docker-compose.yml.j2 - /roles/grafana/files/vmagent.yaml - /group_vars/all.yml --- group_vars/all.yml | 65 +++++++++++++++---- .../tasks/main.yml | 0 .../templates/pve_exporter_config.yml.j2 | 0 roles/cadvisor/tasks/main.yml | 59 +++++++++++++++++ .../cadvisor/templates/docker-compose.yml.j2 | 29 +++++++++ roles/grafana/files/vmagent.yaml | 64 ++++++++++-------- 6 files changed, 180 insertions(+), 37 deletions(-) rename roles/{pve_monitoring => [delete]pve_monitoring}/tasks/main.yml (100%) rename roles/{pve_monitoring => [delete]pve_monitoring}/templates/pve_exporter_config.yml.j2 (100%) create mode 100644 roles/cadvisor/tasks/main.yml create mode 100644 roles/cadvisor/templates/docker-compose.yml.j2 diff --git a/group_vars/all.yml b/group_vars/all.yml index 2b0b3d4..521a53e 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -4,9 +4,45 @@ timezone: Asia/Yekaterinburg system_locale: ru_RU.UTF-8 x11_display_host: "192.168.1.101" +# ------------ Группы серверов для мониторинга ------------ +monitoring_groups: + # Все серверы с node_exporter + node_exporter_servers: + - "{{ server_ips.olimp }}" + - "{{ server_ips.gateway }}" + - "{{ server_ips.data }}" + - "{{ server_ips.media }}" + - "{{ server_ips.photo }}" + - "{{ server_ips.nextcloud }}" + - "{{ server_ips.talk }}" + - "{{ server_ips.games }}" + - "{{ server_ips.manage }}" + + # Серверы с Docker (cAdvisor) + cadvisor_servers: + - "{{ server_ips.gateway }}" + - "{{ server_ips.data }}" + - "{{ server_ips.media }}" + - "{{ server_ips.photo }}" + - "{{ server_ips.talk }}" + - "{{ server_ips.games }}" + - "{{ server_ips.manage }}" + + # Proxmox VE + proxmox_servers: + - "{{ server_ips.olimp }}" + +# ------------ Порты для сервисов мониторинга ------------ +monitoring_ports: + node_exporter: 9100 + cadvisor: 45133 + proxmox_exporter: 9223 + vmagent: 8429 + victoriametrics: 8428 + proxmox_node: "Olimp" admin_user: root -# Устанвливаем базовые пакеты + base_packages: - curl - wget @@ -48,6 +84,18 @@ pve_exporter_user: "pve_exporter@pve" pve_exporter_token_name: "grafana" pve_exporter_token_value: "ae683c34-c539-4b08-b539-6c9b7e570411" +# ------------ Мониторинг Docker ------------ +# cAdvisor на всех серверах с Docker +cadvisor_enabled: true +cadvisor_base_dir: "/opt/cadvisor" +cadvisor_config_dir: "{{ cadvisor_base_dir }}/config" +cadvisor_internal_port: 8080 + +# VictoriaMetrics & Grafana +victoriametrics_retention_months: 2 +victoriametrics_version: v1.101.0 +grafana_version: 11.2.0 + # ------------ gateway (192.168.1.201) ------------ npm_base_dir: "/opt/npm" npm_data_dir: "/opt/npm/data" @@ -188,18 +236,13 @@ meshcentral_port: "45131" # Grafana grafana_base_dir: /mnt/grafana -grafana_data_dir: "{{ grafana_base_dir }}/data" # Grafana DB, plugins, etc. -grafana_config_dir: "{{ grafana_base_dir }}/config" # provisioning (datasources, dashboards) -grafana_vm_data_dir: "{{ grafana_base_dir }}/victoriametrics" # VM data (TSDB) -grafana_vmagent_tmp_dir: "{{ grafana_base_dir }}/vmagent/tmp" # vmagent temp files +grafana_data_dir: "{{ grafana_base_dir }}/data" +grafana_config_dir: "{{ grafana_base_dir }}/config" +grafana_vm_data_dir: "{{ grafana_base_dir }}/victoriametrics" +grafana_vmagent_tmp_dir: "{{ grafana_base_dir }}/vmagent/tmp" grafana_vmagent_config: "{{ grafana_base_dir }}/vmagent/vmagent.yaml" grafana_port: 45132 grafana_admin_user: admin grafana_admin_password: 13qeadZC -grafana_root_url: https://mon.zailon.ru - -victoriametrics_retention_months: 2 -victoriametrics_version: v1.101.0 -grafana_version: 11.2.0 - +grafana_root_url: https://mon.zailon.ru \ No newline at end of file diff --git a/roles/pve_monitoring/tasks/main.yml b/roles/[delete]pve_monitoring/tasks/main.yml similarity index 100% rename from roles/pve_monitoring/tasks/main.yml rename to roles/[delete]pve_monitoring/tasks/main.yml diff --git a/roles/pve_monitoring/templates/pve_exporter_config.yml.j2 b/roles/[delete]pve_monitoring/templates/pve_exporter_config.yml.j2 similarity index 100% rename from roles/pve_monitoring/templates/pve_exporter_config.yml.j2 rename to roles/[delete]pve_monitoring/templates/pve_exporter_config.yml.j2 diff --git a/roles/cadvisor/tasks/main.yml b/roles/cadvisor/tasks/main.yml new file mode 100644 index 0000000..ba0e5e4 --- /dev/null +++ b/roles/cadvisor/tasks/main.yml @@ -0,0 +1,59 @@ +--- +- name: Check if Docker is installed + command: docker --version + register: docker_check + ignore_errors: yes + changed_when: false + +- name: Install cAdvisor (only on Docker hosts) + block: + - name: Create cAdvisor directories + file: + path: "{{ item }}" + state: directory + mode: '0755' + loop: + - "{{ cadvisor_base_dir }}" + - "{{ cadvisor_config_dir }}" + become: yes + + - name: Deploy cAdvisor docker-compose + template: + src: cadvisor-docker-compose.yml.j2 + dest: "{{ cadvisor_base_dir }}/docker-compose.yml" + owner: root + group: root + mode: '0644' + become: yes + + - name: Run cAdvisor container + docker_compose: + project_src: "{{ cadvisor_base_dir }}" + state: present + restart: yes + become: yes + + - name: Wait for cAdvisor to start + wait_for: + host: localhost + port: "{{ cadvisor_internal_port }}" + timeout: 30 + state: started + become: yes + + - name: Verify cAdvisor is responding + uri: + url: "http://localhost:{{ cadvisor_internal_port }}/metrics" + status_code: 200 + timeout: 10 + register: cadvisor_check + become: yes + + - name: Show cAdvisor status + debug: + msg: "cAdvisor is running and responding on port {{ cadvisor_internal_port }}" + when: cadvisor_check.status == 200 + + when: + - docker_check.rc == 0 + - cadvisor_enabled | default(true) \ No newline at end of file diff --git a/roles/cadvisor/templates/docker-compose.yml.j2 b/roles/cadvisor/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..bcec0b3 --- /dev/null +++ b/roles/cadvisor/templates/docker-compose.yml.j2 @@ -0,0 +1,29 @@ +version: '3.8' + +services: + cadvisor: + image: gcr.io/cadvisor/cadvisor:latest + container_name: cadvisor + restart: unless-stopped + privileged: true + devices: + - /dev/kmsg:/dev/kmsg + volumes: + - /:/rootfs:ro + - /var/run:/var/run:ro + - /sys:/sys:ro + - /var/lib/docker/:/var/lib/docker:ro + - /dev/disk/:/dev/disk:ro + - /cgroup:/cgroup:ro + ports: + - "{{ monitoring_ports.cadvisor }}:{{ cadvisor_internal_port }}" + command: + - --housekeeping_interval=30s + - --docker_only=true + - --port={{ cadvisor_internal_port }} + networks: + - monitoring + +networks: + monitoring: + driver: bridge \ No newline at end of file diff --git a/roles/grafana/files/vmagent.yaml b/roles/grafana/files/vmagent.yaml index cc5a4aa..e59268b 100644 --- a/roles/grafana/files/vmagent.yaml +++ b/roles/grafana/files/vmagent.yaml @@ -5,10 +5,42 @@ global: environment: 'production' scrape_configs: - # ========== Proxmox серверы ========== + # ========== Node Exporter со всех серверов ========== + - job_name: 'node' + static_configs: + - targets: + {% for server in monitoring_groups.node_exporter_servers %} + - '{{ server }}:{{ monitoring_ports.node_exporter }}' + {% endfor %} + scrape_interval: 30s + relabel_configs: + - source_labels: [__address__] + target_label: instance + regex: '(.*):{{ monitoring_ports.node_exporter }}' + replacement: '${1}' + + # ========== cAdvisor для мониторинга Docker на всех серверах ========== + - job_name: 'cadvisor' + static_configs: + - targets: + {% for server in monitoring_groups.cadvisor_servers %} + - '{{ server }}:{{ monitoring_ports.cadvisor }}' + {% endfor %} + scrape_interval: 30s + metrics_path: /metrics + relabel_configs: + - source_labels: [__address__] + target_label: instance + regex: '(.*):{{ monitoring_ports.cadvisor }}' + replacement: '${1}' + + # ========== Proxmox VE ========== - job_name: 'proxmox' static_configs: - - targets: ['192.168.1.200:9223'] + - targets: + {% for server in monitoring_groups.proxmox_servers %} + - '{{ server }}:{{ monitoring_ports.proxmox_exporter }}' + {% endfor %} metrics_path: /pve params: module: [default] @@ -16,42 +48,22 @@ scrape_configs: relabel_configs: - source_labels: [__address__] target_label: instance - replacement: '192.168.1.200:9223' - - # ========== Node Exporter со всех серверов ========== - - job_name: 'node' - static_configs: - - targets: - - '192.168.1.200:9100' # Proxmox - - '192.168.1.201:9100' # Gateway - - '192.168.1.202:9100' # Data - - '192.168.1.203:9100' # Media - - '192.168.1.204:9100' # Photo - - '192.168.1.205:9100' # Nextcloud - - '192.168.1.206:9100' # Talk - - '192.168.1.207:9100' # Games - - '192.168.1.228:9100' # Manage - scrape_interval: 30s - relabel_configs: - - source_labels: [__address__] - target_label: instance - regex: '(.*):9100' + regex: '(.*):{{ monitoring_ports.proxmox_exporter }}' replacement: '${1}' - # ========== Self-monitoring vmagent ========== + # ========== Self-monitoring ========== - job_name: 'vmagent' static_configs: - - targets: ['vmagent:8429'] + - targets: ['localhost:{{ monitoring_ports.vmagent }}'] scrape_interval: 30s relabel_configs: - source_labels: [__address__] target_label: instance replacement: 'vmagent' - # ========== VictoriaMetrics self-monitoring ========== - job_name: 'victoriametrics' static_configs: - - targets: ['victoriametrics:8428'] + - targets: ['localhost:{{ monitoring_ports.victoriametrics }}'] scrape_interval: 30s metrics_path: /metrics relabel_configs: