Skip to content

Курс "DevOps практики и инструменты". Настройка мониторинга

Notifications You must be signed in to change notification settings

avbesolov/monitoring-stack

Repository files navigation

Monitoring Stack

Проект для развертывания стека мониторинга на основе 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 - Управление командами

Ansible коллекции и роли:

Компонент Версия Описание
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+ Системные метрики

Установка компонентов

Ubuntu/Debian:

# 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 для Yandex Cloud

Настройка зеркала провайдера

Если доступ к официальному реестру 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

Развертывание

1. Подготовка

  1. Установите необходимые Ansible коллекции:
# Установка коллекции community.docker для работы с Docker Compose
ansible-galaxy collection install community.docker

Примечание: Эти команды устанавливают зависимости локально. В playbook есть pre_tasks, которые автоматически установят недостающую роль при запуске.

  1. Настройте доступ к Yandex Cloud:
# Создайте IAM токен в Yandex Cloud Console
# Скопируйте terraform.tfvars.example в terraform.tfvars
cp terraform/terraform.tfvars.example terraform/terraform.tfvars
# Отредактируйте terraform.tfvars с вашими данными
  1. Настройте SSH ключи:
# Убедитесь, что у вас есть SSH ключ
ls -la ~/.ssh/id_rsa.pub
# Если нет, создайте:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

2. Развертывание

# Показать справку
make help

# Полный деплой (инфраструктура + мониторинг)
make deploy-all

# Или пошагово:
make init      # Инициализировать Terraform
make plan      # Показать план
make apply     # Создать инфраструктуру
make deploy-monitoring  # Развернуть мониторинг

3. Доступ к сервисам

После успешного развертывания вы получите доступ к:

  • Grafana: http://YOUR_VM_IP:4000

    • Логин: admin
    • Пароль: admin
  • Prometheus: http://YOUR_VM_IP:9090

  • Node Exporter: http://YOUR_VM_IP:9100/metrics

4. Проверка статуса

make status

Мониторинг

Системные метрики

Проект собирает следующие системные метрики:

  • CPU Usage - использование процессора
  • Memory Usage - использование памяти
  • Disk Usage - использование дискового пространства
  • Network Traffic - сетевой трафик
  • Load Average - средняя нагрузка системы
  • Docker Containers - статус контейнеров
  • System Uptime - время работы системы

Дашборды Grafana

Рекомендуемые готовые дашборды

Для системного мониторинга рекомендуется использовать готовые дашборды с grafana.com:

  1. Node Exporter Dashboard (ID: 21959)

Как импортировать дашборды

  1. Откройте Grafana: http://YOUR_VM_IP:4000
  2. Войдите с логином admin / паролем admin
  3. Нажмите "+" в боковом меню
  4. Выберите "Import"
  5. Введите ID дашборда (21959)
  6. Нажмите "Load"
  7. Выберите источник данных "Prometheus"
  8. Нажмите "Import"

Ссылки на Grafana

После развертывания вы можете получить ссылки на 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 Интеграция

Проект включает полную интеграцию с GitLab CI/CD:

Этапы CI/CD

  1. validate - проверка синтаксиса Terraform
  2. plan - создание плана изменений
  3. apply - применение изменений (ручной запуск)
  4. deploy - развертывание мониторинга
  5. test - тестирование доступности сервисов

Переменные GitLab CI/CD

Для работы CI/CD необходимо настроить следующие переменные в GitLab:

  • TF_VAR_auth_token - IAM токен Yandex Cloud
  • TF_VAR_cloud_id - ID облака
  • TF_VAR_folder_id - ID папки
  • SSH_PRIVATE_KEY - приватный SSH ключ
  • SSH_KNOWN_HOSTS - известные SSH хосты

Автоматическое развертывание

  1. При коммите в main ветку:

    • Автоматически запускается валидация и планирование
    • Создается план изменений инфраструктуры
  2. Ручной запуск apply:

    • Применение изменений инфраструктуры
    • Создание/обновление ВМ в Yandex Cloud
  3. Автоматическое развертывание мониторинга:

    • Установка Docker и Docker Compose
    • Развертывание стека мониторинга
    • Проверка доступности сервисов

About

Курс "DevOps практики и инструменты". Настройка мониторинга

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published