Проект для развертывания стека мониторинга на основе Prometheus + Grafana с поддержкой двух способов деплоя:
- 🐳 Kubernetes деплой - в существующий кластер
- 🏗️ Terraform + VM деплой - на отдельную виртуальную машину
📖 Подробная документация: DEPLOYMENT.md
Проект состоит из следующих компонентов:
- Terraform - создание инфраструктуры в Yandex Cloud
- Ansible - развертывание и настройка сервисов
- Docker Compose - оркестрация контейнеров мониторинга
- Prometheus - сбор и хранение метрик
- Grafana - визуализация метрик
- Node Exporter - системные метрики хоста
Микросервисы в проекте otus-app не экспортируют Prometheus метрики, поэтому дашборды показывают системные метрики узлов вместо application-specific данных.
monitoring-stack/
├── terraform/ # Terraform конфигурация
│ ├── main.tf # Основная конфигурация
│ ├── variables.tf # Переменные
│ ├── outputs.tf # Выходные значения
│ └── terraform.tfvars.example # Пример переменных
├── ansible/ # Ansible playbooks
│ ├── deploy-monitoring.yml # Основной playbook
│ ├── inventory/ # Инвентарь хостов
│ ├── group_vars/ # Переменные групп
│ └── templates/ # Шаблоны
├── docker-compose/ # Docker Compose файлы
│ ├── docker-compose.yml # Основной compose файл
│ ├── prometheus/ # Конфигурация Prometheus
│ └── grafana/ # Конфигурация Grafana
├── Makefile # Команды для управления
├── .gitlab-ci.yml # GitLab CI/CD конфигурация
└── README.md # ДокументацияДля работы проекта требуются следующие компоненты:
| Компонент | Версия | Описание |
|---|---|---|
| Terraform | 1.0+ | Создание инфраструктуры в Yandex Cloud |
| Ansible | 2.13+ | Автоматизация развертывания |
| Python | 3.8+ | Для работы Ansible |
| Git | 2.0+ | Управление версиями |
| SSH клиент | - | Подключение к ВМ |
| Make | - | Управление командами |
| Компонент | Версия | Описание |
|---|---|---|
| community.docker | 3.0+ | Работа с Docker и Docker Compose |
| Компонент | Версия | Описание |
|---|---|---|
| Ubuntu | 20.04+ | Операционная система |
| Docker | 20.10+ | Контейнеризация |
| Docker Compose | 2.18+ | Оркестрация контейнеров |
| Prometheus | 2.45+ | Сбор и хранение метрик |
| Grafana | 10.0+ | Визуализация метрик |
| Node Exporter | 1.6+ | Системные метрики |
# Terraform
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt update && sudo apt install terraform
# Ansible
sudo apt update && sudo apt install ansible
# Git
sudo apt install git
# Make
sudo apt install makeЕсли доступ к официальному реестру Terraform ограничен, настройте зеркало:
# Создайте файл конфигурации Terraform CLI
nano ~/.terraformrcДобавьте в него:
provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}В проекте настроен провайдер Yandex Cloud в файле terraform/provider.tf:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
required_version = ">= 0.10"
}
provider "yandex" {
token = var.auth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = var.zone
}# Проверить версии
terraform --version
ansible --version
git --version
make --version
# Проверить Ansible коллекции
ansible-galaxy collection list- Установите необходимые Ansible коллекции:
# Установка коллекции community.docker для работы с Docker Compose
ansible-galaxy collection install community.dockerПримечание: Эти команды устанавливают зависимости локально. В playbook есть pre_tasks, которые автоматически установят недостающую роль при запуске.
- Настройте доступ к Yandex Cloud:
# Создайте IAM токен в Yandex Cloud Console
# Скопируйте terraform.tfvars.example в terraform.tfvars
cp terraform/terraform.tfvars.example terraform/terraform.tfvars
# Отредактируйте terraform.tfvars с вашими данными- Настройте SSH ключи:
# Убедитесь, что у вас есть SSH ключ
ls -la ~/.ssh/id_rsa.pub
# Если нет, создайте:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"# Показать справку
make help
# Полный деплой (инфраструктура + мониторинг)
make deploy-all
# Или пошагово:
make init # Инициализировать Terraform
make plan # Показать план
make apply # Создать инфраструктуру
make deploy-monitoring # Развернуть мониторингПосле успешного развертывания вы получите доступ к:
-
Grafana: http://YOUR_VM_IP:4000
- Логин:
admin - Пароль:
admin
- Логин:
-
Prometheus: http://YOUR_VM_IP:9090
-
Node Exporter: http://YOUR_VM_IP:9100/metrics
make statusПроект собирает следующие системные метрики:
- CPU Usage - использование процессора
- Memory Usage - использование памяти
- Disk Usage - использование дискового пространства
- Network Traffic - сетевой трафик
- Load Average - средняя нагрузка системы
- Docker Containers - статус контейнеров
- System Uptime - время работы системы
Для системного мониторинга рекомендуется использовать готовые дашборды с grafana.com:
- Node Exporter Dashboard (ID: 21959)
- Простой и компактный дашборд
- Основные метрики: CPU, память, диск, сеть
- Ссылка на дашборд
- Откройте Grafana: http://YOUR_VM_IP:4000
- Войдите с логином
admin/ паролемadmin - Нажмите "+" в боковом меню
- Выберите "Import"
- Введите ID дашборда (21959)
- Нажмите "Load"
- Выберите источник данных "Prometheus"
- Нажмите "Import"
После развертывания вы можете получить ссылки на Grafana:
# Получить IP адрес ВМ
make get-outputs
# Или проверить статус
make statusОсновные URL для доступа:
-
Grafana Dashboard: http://YOUR_VM_IP:4000
- Логин:
admin - Пароль:
admin
- Логин:
-
Prometheus Targets: http://YOUR_VM_IP:9090/targets
-
Node Exporter Metrics: http://YOUR_VM_IP:9100/metrics
Проект включает полную интеграцию с GitLab CI/CD:
- validate - проверка синтаксиса Terraform
- plan - создание плана изменений
- apply - применение изменений (ручной запуск)
- deploy - развертывание мониторинга
- test - тестирование доступности сервисов
Для работы CI/CD необходимо настроить следующие переменные в GitLab:
TF_VAR_auth_token- IAM токен Yandex CloudTF_VAR_cloud_id- ID облакаTF_VAR_folder_id- ID папкиSSH_PRIVATE_KEY- приватный SSH ключSSH_KNOWN_HOSTS- известные SSH хосты
-
При коммите в main ветку:
- Автоматически запускается валидация и планирование
- Создается план изменений инфраструктуры
-
Ручной запуск apply:
- Применение изменений инфраструктуры
- Создание/обновление ВМ в Yandex Cloud
-
Автоматическое развертывание мониторинга:
- Установка Docker и Docker Compose
- Развертывание стека мониторинга
- Проверка доступности сервисов