SensusAgent/docs/ansible_groups.md
Sergey Antropoff 7316b507ad feat: добавлена гибкая конфигурация коллекторов через Ansible группы
- Создана система групповых переменных для настройки коллекторов
- Добавлены группы: proxmox, proxvms, standalone
- Создан шаблон config.yaml.j2 для автоматической генерации конфигурации
- Обновлен Ansible playbook для использования шаблонов
- Добавлен скрипт тестирования генерации конфигурации
- Создана подробная документация по новой системе
- Обновлен inventory.ini с группировкой хостов

Группы коллекторов:
- proxmox: proxcluster, proxnode, proxvms, uptime
- proxvms: proxvmsystem, uptime
- standalone: system, hba, sensors, uptime

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-09-15 14:50:51 +03:00

294 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Гибкая конфигурация коллекторов через Ansible группы
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Обзор
Система позволяет гибко настраивать, какие коллекторы запускать на разных типах серверов через Ansible группы и переменные.
## Структура
```
runner/
├── group_vars/ # Переменные для групп хостов
│ ├── all.yml # Глобальные настройки
│ ├── proxmox.yml # Настройки для Proxmox нод
│ ├── proxvms.yml # Настройки для VM/контейнеров
│ └── standalone.yml # Настройки для автономных серверов
├── templates/
│ └── config.yaml.j2 # Шаблон конфигурации
└── inventory.ini # Группы хостов
```
## Группы хостов
### 1. **proxmox** - Proxmox ноды
**Коллекторы:** `proxcluster`, `proxnode`, `proxvms`, `uptime`
```ini
[proxmox]
pnode10 ansible_host=10.14.253.20 ansible_user=devops
```
**Назначение:** Сбор информации о Proxmox кластере, нодах и виртуальных машинах.
### 2. **proxvms** - VM и контейнеры Proxmox
**Коллекторы:** `proxvmsystem`, `uptime`
```ini
[proxvms]
kube-dbrain-node01 ansible_host=10.14.246.75 ansible_user=devops
kube-data ansible_host=10.14.246.150 ansible_user=devops
```
**Назначение:** Сбор системных метрик с уникальным `machine_uid` для идентификации.
### 3. **standalone** - Автономные серверы
**Коллекторы:** `system`, `hba`, `sensors`, `uptime`
```ini
[standalone]
server1 ansible_host=1.2.3.4 ansible_user=root
```
**Назначение:** Сбор системных метрик, информации о RAID/HBA и датчиках.
## Конфигурация групп
### Файл `group_vars/proxmox.yml`
```yaml
# Список коллекторов для группы proxmox
collectors_enabled:
- proxcluster
- proxnode
- proxvms
- uptime
# Дополнительные настройки
collectors_config:
proxcluster:
interval: "60s"
timeout: "30s"
proxnode:
interval: "30s"
timeout: "15s"
proxvms:
interval: "300s"
timeout: "60s"
uptime:
interval: "60s"
timeout: "5s"
```
### Файл `group_vars/proxvms.yml`
```yaml
# Список коллекторов для VM/контейнеров
collectors_enabled:
- proxvmsystem
- uptime
# Настройки
collectors_config:
proxvmsystem:
interval: "300s"
timeout: "60s"
uptime:
interval: "60s"
timeout: "5s"
```
### Файл `group_vars/standalone.yml`
```yaml
# Список коллекторов для автономных серверов
collectors_enabled:
- system
- hba
- sensors
- uptime
# Настройки
collectors_config:
system:
interval: "30s"
timeout: "8s"
hba:
interval: "300s"
timeout: "15s"
sensors:
interval: "60s"
timeout: "10s"
uptime:
interval: "60s"
timeout: "5s"
```
## Шаблон конфигурации
Файл `templates/config.yaml.j2` автоматически генерирует `config.yaml` на основе переменных групп:
```yaml
# Конфигурация SensusAgent
# Автоматически сгенерировано на основе групповых переменных
agent:
log_level: "{{ agent_log_level | default('info') }}"
kafka:
brokers: "{{ kafka_brokers | default('localhost:9092') }}"
topic: "{{ kafka_topic | default('sensus-metrics') }}"
collectors:
{% for collector_name in collectors_enabled %}
{{ collector_name }}:
enabled: true
type: exec
key: {{ collector_name }}
interval: "{{ collectors_config[collector_name].interval | default('60s') }}"
timeout: "{{ collectors_config[collector_name].timeout | default('30s') }}"
exec: "./collectors/{{ collector_name }}"
platforms: [{{ collectors_config[collector_name].platforms | default('linux') | join(', ') }}]
{% endfor %}
```
## Использование
### 1. Добавление нового хоста
```ini
# В inventory.ini
[proxmox]
new-pnode ansible_host=10.14.253.21 ansible_user=devops
```
### 2. Создание новой группы
1. **Добавить группу в `inventory.ini`:**
```ini
[new_group]
server1 ansible_host=1.2.3.4 ansible_user=root
```
2. **Создать файл `group_vars/new_group.yml`:**
```yaml
collectors_enabled:
- system
- uptime
collectors_config:
system:
interval: "60s"
timeout: "10s"
uptime:
interval: "120s"
timeout: "5s"
```
3. **Добавить в `[targets:children]`:**
```ini
[targets:children]
proxmox
proxvms
standalone
new_group
```
### 3. Изменение коллекторов для группы
Отредактируйте соответствующий файл в `group_vars/`:
```yaml
# Добавить новый коллектор
collectors_enabled:
- system
- gpu # Новый коллектор
- uptime
# Настроить параметры
collectors_config:
gpu:
interval: "300s"
timeout: "30s"
```
### 4. Тестирование конфигурации
```bash
# Запустить тест генерации конфигурации
./runner/test-config-generation.sh
# Развернуть на конкретной группе
ansible-playbook -i runner/inventory.ini runner/deploy-service-raw/playbook.yml --limit proxmox
```
## Примеры конфигураций
### Для Kubernetes нод
```yaml
# group_vars/kubernetes.yml
collectors_enabled:
- system
- kubernetes
- docker
- uptime
collectors_config:
system:
interval: "30s"
timeout: "8s"
kubernetes:
interval: "60s"
timeout: "30s"
docker:
interval: "120s"
timeout: "15s"
uptime:
interval: "60s"
timeout: "5s"
```
### Для GPU серверов
```yaml
# group_vars/gpu_servers.yml
collectors_enabled:
- system
- gpu
- sensors
- uptime
collectors_config:
system:
interval: "30s"
timeout: "8s"
gpu:
interval: "60s"
timeout: "30s"
sensors:
interval: "120s"
timeout: "10s"
uptime:
interval: "60s"
timeout: "5s"
```
## Преимущества
1. **Гибкость** - легко настраивать коллекторы для разных типов серверов
2. **Масштабируемость** - простое добавление новых групп и хостов
3. **Централизованное управление** - все настройки в одном месте
4. **Автоматизация** - автоматическая генерация конфигурации
5. **Совместимость** - работает с существующими playbook
## Совместимость
Система полностью совместима с существующими:
- Makefile командами (`make deploy-service`, `make delete-service`)
- Ansible playbook
- Структурой проекта
Группа `[targets:children]` обеспечивает обратную совместимость с существующими скриптами.