- Создана система групповых переменных для настройки коллекторов - Добавлены группы: 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
294 lines
7.4 KiB
Markdown
294 lines
7.4 KiB
Markdown
# Гибкая конфигурация коллекторов через 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]` обеспечивает обратную совместимость с существующими скриптами.
|