From 952ed76979d0f2d8c41609c866655436264b5757 Mon Sep 17 00:00:00 2001 From: Administrator Date: Thu, 13 Nov 2025 18:37:32 +0000 Subject: [PATCH] Update 4 files - /roles/grafana/tasks/main.yml - /roles/grafana/templates/docker-compose.yml.j2 - /roles/grafana/files/vmagent.yaml - /group_vars/all.yml --- group_vars/all.yml | 20 ++++++- roles/grafana/files/vmagent.yaml | 9 +++ roles/grafana/tasks/main.yml | 52 +++++++++++++++++ roles/grafana/templates/docker-compose.yml.j2 | 57 +++++++++++++++++++ 4 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 roles/grafana/files/vmagent.yaml create mode 100644 roles/grafana/tasks/main.yml create mode 100644 roles/grafana/templates/docker-compose.yml.j2 diff --git a/group_vars/all.yml b/group_vars/all.yml index 77c99d0..9f7a4ad 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -175,6 +175,20 @@ meshcentral_files_dir: "/mnt/mesh/meshcentral-files" meshcentral_backup_dir: "/mnt/mesh/meshcentral-backup" meshcentral_port: "45131" -grafana_base_dir: "/opt/grafana" -grafana_data_dir: "{{ grafana_base_dir }}/data" -grafana_port: "45132" \ No newline at end of file +# 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_vmagent_config: "{{ grafana_base_dir }}/vmagent/vmagent.yaml" + +grafana_port: 3000 +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 + diff --git a/roles/grafana/files/vmagent.yaml b/roles/grafana/files/vmagent.yaml new file mode 100644 index 0000000..7087436 --- /dev/null +++ b/roles/grafana/files/vmagent.yaml @@ -0,0 +1,9 @@ +global: + scrape_interval: 30s + +scrape_configs: + - job_name: 'node' + static_configs: +{%- for host in groups['all'] %} + - targets: ['{{ hostvars[host].int_ip }}:9100'] +{%- endfor %} \ No newline at end of file diff --git a/roles/grafana/tasks/main.yml b/roles/grafana/tasks/main.yml new file mode 100644 index 0000000..1bf527b --- /dev/null +++ b/roles/grafana/tasks/main.yml @@ -0,0 +1,52 @@ +--- +- name: Create Grafana directory structure + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: 472 + group: 472 + mode: '0755' + loop: + - "{{ grafana_base_dir }}" + - "{{ grafana_data_dir }}" + - "{{ grafana_config_dir }}" + - "{{ grafana_vm_data_dir }}" + - "{{ grafana_vmagent_tmp_dir | dirname }}" # создаёт /mnt/grafana/vmagent + +- name: Copy vmagent config + ansible.builtin.copy: + src: vmagent.yaml + dest: "{{ grafana_vmagent_config }}" + owner: root + group: root + mode: '0644' + +- name: Deploy Grafana docker-compose.yml + ansible.builtin.template: + src: docker-compose.yml.j2 + dest: "{{ grafana_base_dir }}/docker-compose.yml" + owner: root + group: root + mode: '0644' + +- name: Start Grafana services + ansible.builtin.shell: | + cd "{{ grafana_base_dir }}" + docker compose up -d + args: + executable: /bin/bash + register: grafana_up + changed_when: "'Started' in grafana_up.stdout or 'Recreated' in grafana_up.stdout" + +- name: Wait for services to start + ansible.builtin.pause: + seconds: 20 + +- name: Check Grafana container status + ansible.builtin.shell: docker ps --filter name=grafana + register: grafana_status + changed_when: false + +- name: Show Grafana status + ansible.builtin.debug: + var: grafana_status.stdout_lines \ No newline at end of file diff --git a/roles/grafana/templates/docker-compose.yml.j2 b/roles/grafana/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..955ad0f --- /dev/null +++ b/roles/grafana/templates/docker-compose.yml.j2 @@ -0,0 +1,57 @@ +version: '3.8' + +services: + victoriametrics: + image: victoriametrics/victoria-metrics:{{ victoriametrics_version }} + container_name: victoriametrics + restart: unless-stopped + command: + - '-storageDataPath=/storage' + - '-retentionPeriod={{ victoriametrics_retention_months }}' + - '-selfScrapeInterval=10s' + volumes: + - {{ grafana_vm_data_dir }}:/storage + ports: + - "{{ victoriametrics_port | default(8428) }}:8428" + networks: + - monitoring + + vmagent: + image: victoriametrics/vmagent:{{ victoriametrics_version }} + container_name: vmagent + restart: unless-stopped + command: + - '-promscrape.config=/config/vmagent.yaml' + - '-remoteWrite.tmpDataPath=/tmpData' + - '-remoteWrite.url=http://victoriametrics:8428/api/v1/write' + volumes: + - {{ grafana_vmagent_config }}:/config/vmagent.yaml:ro + - {{ grafana_vmagent_tmp_dir }}:/tmpData + depends_on: + - victoriametrics + networks: + - monitoring + + grafana: + image: grafana/grafana-oss:{{ grafana_version }} + container_name: grafana + restart: unless-stopped + user: "472" + environment: + - GF_SECURITY_ADMIN_USER={{ grafana_admin_user }} + - GF_SECURITY_ADMIN_PASSWORD={{ grafana_admin_password }} + - GF_USERS_ALLOW_SIGN_UP=false + - GF_SERVER_ROOT_URL={{ grafana_root_url }} + volumes: + - {{ grafana_data_dir }}:/var/lib/grafana + - {{ grafana_config_dir }}:/etc/grafana/provisioning + ports: + - "{{ grafana_port }}:3000" + depends_on: + - victoriametrics + networks: + - monitoring + +networks: + monitoring: + driver: bridge \ No newline at end of file