feat: add demonstration 6.1
This commit is contained in:
1 parent
ee54718ba0
commit
b2713667e6
8 files changed
+824
No files matched your search
@@ -0,0 +1,182 @@
|
||||
---
|
||||
course_code: VKCLOUD-80
|
||||
artifact_type: PR
|
||||
module: 6
|
||||
task_code: 1
|
||||
task_title: Настройка мониторинга (Prometheus + Grafana)
|
||||
student_fio: Ремизов Кирилл Львович
|
||||
date: 2026-06-17
|
||||
source_docs:
|
||||
- 3-Конспект лекций - VK 1.md
|
||||
- 4-Практические работы - VK -1.md
|
||||
commands_used:
|
||||
- terraform init
|
||||
- terraform plan
|
||||
- terraform apply -auto-approve
|
||||
- openstack server list
|
||||
- curl http://localhost:9090
|
||||
- curl http://localhost:3000
|
||||
attached_files:
|
||||
- VKC_PR_M06_01_monitoring_tf_РемизовКЛ_20260617.log
|
||||
- VKC_PR_M06_01_monitoring_main_РемизовКЛ_20260617.tf
|
||||
- VKC_PR_M06_01_monitoring_VM_РемизовКЛ_20260617.png
|
||||
- VKC_PR_M06_01_monitoring_Prometeus_РемизовКЛ_20260617.png
|
||||
- VKC_PR_M06_01_monitoring_DS_РемизовКЛ_20260617.png
|
||||
- VKC_PR_M06_01_monitoring_dashboard_РемизовКЛ_20260617.png
|
||||
status: final
|
||||
---
|
||||
# Отчёт по практической демонстрации
|
||||
|
||||
## 1. Цель
|
||||
|
||||
Освоить настройку мониторинга виртуальных машин в облаке VK Cloud с использованием стека **Prometheus + Grafana**. Научиться:
|
||||
|
||||
- разворачивать инфраструктуру для мониторинга с помощью **Terraform**;
|
||||
- устанавливать и настраивать **Node Exporter** на целевых ВМ для сбора системных метрик;
|
||||
- развёртывать **Prometheus** как центральный сервер сбора метрик;
|
||||
- устанавливать и настраивать **Grafana** для визуализации метрик;
|
||||
- подключать **Grafana** к **Prometheus** в качестве источника данных;
|
||||
- импортировать готовый дашборд и убедиться в его работоспособности.
|
||||
|
||||
## 2. Что было прочитано перед выполнением
|
||||
|
||||
- **Документ:** 3-Конспект лекций - VK 1.md
|
||||
- **Раздел/тема:** Модуль 6 «Мониторинг, логирование и Observability», тема 6.1 «Стек мониторинга (Prometheus, Grafana)»
|
||||
- **Ключевые понятия:**
|
||||
- **Prometheus** — система сбора метрик с временными рядами, использующая подход pull (активный опрос экспортеров).
|
||||
- **Node Exporter** — агент, собирающий метрики хоста (CPU, RAM, Disk, Network) и предоставляющий их Prometheus через HTTP endpoint на порту 9100.
|
||||
- **Grafana** — платформа для визуализации данных, подключаемая к Prometheus как к источнику данных.
|
||||
- **PromQL** — язык запросов к метрикам Prometheus.
|
||||
- **Targets** — цели, с которых Prometheus собирает метрики (в данном случае — Node Exporter на каждой ВМ).
|
||||
|
||||
- **Дополнительно:** Документ 4-Практические работы - VK -1.md, демонстрация 6.1 «Настройка Prometheus и Grafana».
|
||||
|
||||
## 3. Ход выполнения
|
||||
|
||||
### Демонстрация 6.1: Настройка Prometheus и Grafana
|
||||
|
||||
#### Этап 0. Подготовка окружения
|
||||
|
||||
- Убедился, что Terraform установлен и настроен для работы с VK Cloud.
|
||||
- Создал директорию для проекта и подготовил файл `main.tf` с конфигурацией инфраструктуры.
|
||||
|
||||
#### Этап 1. Развертывание инфраструктуры с помощью Terraform
|
||||
|
||||
В файле `VKC_PR_M06_01_monitoring_main_РемизовКЛ_20260617.tf` описаны следующие ресурсы:
|
||||
|
||||
1. **Провайдер VKCS** — для взаимодействия с VK Cloud через OpenStack API.
|
||||
2. **Переменные** — внешняя сеть (`internet`), ID роутера, образ (`ubuntu-20-202602051631.gite7a38aaf`), flavour (`Basic-1-2-20`), зона доступности (`MS1`).
|
||||
3. **Data-источники** — для получения идентификаторов внешней сети, роутера, образа и flavour.
|
||||
4. **Внутренняя сеть** (`monitoring-internal-net`) с подсетью `192.168.200.0/24` и подключением к существующему роутеру для выхода в интернет.
|
||||
5. **Security Group** (`monitoring-sg`) с правилами для SSH (22), Grafana (3000), Prometheus (9090), Node Exporter (9100) — доступ разрешён с `0.0.0.0/0` (для демонстрации).
|
||||
6. **SSH-ключ** — `monitoring-key`, создаётся из публичного ключа `~/.ssh/id_rsa.pub`.
|
||||
7. **App-ВМ** (`app-vm-1`) — одна ВМ, на которую через `user_data` устанавливается **Node Exporter**.
|
||||
8. **Monitoring-ВМ** (`monitoring-vm`) — ВМ, на которую через `user_data` устанавливаются:
|
||||
- **Node Exporter** (для сбора метрик самой мониторинговой ВМ),
|
||||
- **Prometheus** (сервер сбора метрик, порт 9090),
|
||||
- **Grafana** (сервер визуализации, порт 3000).
|
||||
9. **Floating IP** — публичный IP для мониторинговой ВМ, который ассоциируется с ней.
|
||||
|
||||
**Выполнение Terraform:**
|
||||
|
||||
```bash
|
||||
terraform apply -auto-approve
|
||||
```
|
||||
|
||||
План показал создание 13 ресурсов (сеть, подсеть, интерфейс роутера, security group, правила, ключ, две ВМ, floating IP, ассоциация). Применение прошло успешно, все ресурсы созданы за ~2 минуты.
|
||||
|
||||
**Результат:**
|
||||
- `monitoring-vm` получила публичный IP: `95.163.215.1` (floating IP)
|
||||
- `app-vm-1` получила внутренний IP: `192.168.200.9` (доступ к ней осуществляется через мониторинговую ВМ или напрямую по публичному IP невозможен)
|
||||
- URL Prometheus: `http://95.163.215.1:9090`
|
||||
- URL Grafana: `http://95.163.215.1:3000`
|
||||
- Пароль для SSH (задан в `user_data`): `debian` (логин: `ubuntu`)
|
||||
|
||||
#### Этап 2. Настройка Prometheus
|
||||
|
||||
На мониторинговой ВМ был установлен Prometheus. В файле конфигурации `/opt/prometheus/prometheus.yml` необходимо было добавить цели (targets) для сбора метрик:
|
||||
|
||||
```yaml
|
||||
scrape_configs:
|
||||
- job_name: 'node'
|
||||
static_configs:
|
||||
- targets:
|
||||
- '192.168.200.9:9100' # app-vm-1 (внутренний IP)
|
||||
- '95.163.215.1:9100' # monitoring-vm (публичный IP, т.к. node_exporter установлен и на ней)
|
||||
```
|
||||
|
||||
После перезапуска Prometheus цели стали доступны для опроса. В веб-интерфейсе Prometheus (порт 9090) в разделе **Targets** обе цели отображаются в статусе **UP**.
|
||||
|
||||
#### Этап 3. Настройка Grafana
|
||||
|
||||
- Grafana установлена и запущена на порту 3000.
|
||||
- Первый вход выполнен с учётными данными по умолчанию: `admin` / `admin` (пароль был изменён при первом входе).
|
||||
- Добавлен **Data Source** типа **Prometheus** с URL `http://localhost:9090` (так как Grafana и Prometheus находятся на одной ВМ). Data source помечен как **default**.
|
||||
|
||||
#### Этап 4. Импорт дашборда
|
||||
|
||||
В Grafana был импортирован готовый дашборд **Node Exporter Full** (ID: `1860`). Этот дашборд предоставляет комплексную визуализацию метрик, собираемых Node Exporter: загрузка CPU, использование памяти, сетевой трафик, состояние дисков и многое другое.
|
||||
|
||||
На дашборде можно выбрать конкретный экземпляр (instance) для отображения метрик — в данном случае доступны оба: `192.168.200.9:9100` (app-vm-1) и `95.163.215.1:9100` (monitoring-vm).
|
||||
|
||||
#### Этап 5. Проверка работоспособности
|
||||
|
||||
- В разделе **Targets** Prometheus отображаются обе цели в статусе **UP** (скриншот приложен).
|
||||
- Дашборд Grafana отображает актуальные метрики с обеих ВМ. На скриншоте видно:
|
||||
- CPU: 0.1%
|
||||
- RAM Used: 15.8%
|
||||
- Uptime: 10.5 минут
|
||||
- Графики CPU Basic, Memory Basic, Network Traffic Basic, Disk Space Used Basic — все отображают данные.
|
||||
|
||||
## 4. Ошибки и исправления
|
||||
|
||||
| Проблема | Решение |
|
||||
| :--- | :--- |
|
||||
| **Предупреждения Terraform:** `ethertype = "IPv4"` deprecated | В секции `vkcs_networking_secgroup_rule` аргумент `ethertype` помечен как устаревший. Рекомендуется не указывать его, так как по умолчанию используется IPv4. На функциональность не влияет. |
|
||||
| **Отсутствие внешнего доступа к app-ВМ:** app-ВМ находится во внутренней сети без публичного IP | Использован floating IP только для мониторинговой ВМ. Для доступа к app-ВМ используется внутренний IP, что безопаснее. При необходимости можно было бы добавить бастионный хост. |
|
||||
|
||||
## 5. Критерии успеха
|
||||
|
||||
- [x] **Инфраструктура развёрнута с помощью Terraform** — две ВМ созданы и активны (скриншот списка ВМ).
|
||||
- [x] **Node Exporter установлен на всех ВМ** — цели Prometheus доступны и отвечают на порту 9100.
|
||||
- [x] **Prometheus настроен и запущен** — веб-интерфейс доступен на порту 9090, цели отображаются в статусе UP.
|
||||
- [x] **Grafana установлена и запущена** — веб-интерфейс доступен на порту 3000.
|
||||
- [x] **Data Source Prometheus добавлен в Grafana** — помечен как default.
|
||||
- [x] **Дашборд импортирован и отображает данные** — на скриншоте видны графики и метрики.
|
||||
|
||||
## 6. Приложенные доказательства
|
||||
|
||||
| Файл | Тип | Что подтверждает |
|
||||
| ---------------------------------------------------------------------------- | ------------- | ----------------------------------------------------- |
|
||||
| `VKC_PR_M06_01_monitoring_tf_РемизовКЛ_20260617.log` | Текстовый лог | Полный вывод `terraform apply` со списком созданных ресурсов |
|
||||
| `VKC_PR_M06_01_monitoring_main_РемизовКЛ_20260617.tf` | Конфигурация | Исходный код Terraform с описанием инфраструктуры |
|
||||
| `VKC_PR_M06_01_monitoring_VM_РемизовКЛ_20260617.png` | Скриншот | Список созданных ВМ с IP-адресами |
|
||||
| `VKC_PR_M06_01_monitoring_Prometeus_РемизовКЛ_20260617.png` | Скриншот | Цели Prometheus в статусе UP |
|
||||
| `VKC_PR_M06_01_monitoring_DS_РемизовКЛ_20260617.png` | Скриншот | Data Source Prometheus в Grafana |
|
||||
| `VKC_PR_M06_01_monitoring_dashboard_РемизовКЛ_20260617.png` | Скриншот | Дашборд Node Exporter Full с отображаемыми метриками |
|
||||
|
||||
## 7. Самопроверка
|
||||
|
||||
- **Что получилось:**
|
||||
Успешно развернул инфраструктуру для мониторинга с использованием Terraform, автоматически установил Node Exporter, Prometheus и Grafana через `user_data`. Настроил Prometheus на сбор метрик с обеих ВМ, импортировал дашборд в Grafana и убедился, что все метрики отображаются корректно. Использование отдельной внутренней сети и floating IP для мониторинговой ВМ обеспечивает дополнительную безопасность.
|
||||
|
||||
- **Что осталось непонятным:**
|
||||
- Почему в конфигурации Prometheus пришлось указывать публичный IP для мониторинговой ВМ (хотя можно было использовать localhost). Это связано с тем, что node_exporter на мониторинговой ВМ слушает на всех интерфейсах, но для единообразия я указал публичный IP.
|
||||
- Как более элегантно автоматизировать добавление целей в Prometheus (например, через Consul или file_sd).
|
||||
- Как настроить алертинг в Alertmanager.
|
||||
|
||||
- **Что можно улучшить:**
|
||||
- Добавить автоматическое обновление конфигурации Prometheus при добавлении новых ВМ через Terraform (использовать `templatefile` для генерации `prometheus.yml`).
|
||||
- Настроить аутентификацию и TLS для Grafana и Prometheus.
|
||||
- Ограничить доступ к портам 3000, 9090, 9100 с помощью Security Groups, разрешив только с доверенных IP (в учебных целях оставлено `0.0.0.0/0`).
|
||||
|
||||
## 8. Краткий вывод
|
||||
|
||||
Практическая работа продемонстрировала полный цикл настройки мониторинга для облачной инфраструктуры с использованием **Terraform**, **Prometheus** и **Grafana**. Благодаря декларативному описанию инфраструктуры удалось за несколько минут развернуть изолированную сеть, две ВМ и все необходимые компоненты мониторинга.
|
||||
|
||||
Ключевые преимущества, подтверждённые на практике:
|
||||
- **Автоматизация** — весь процесс воспроизводим и версионируется.
|
||||
- **Масштабируемость** — легко добавить новые ВМ, обновив список целей в Prometheus.
|
||||
- **Наглядность** — готовый дашборд позволяет быстро оценить состояние системы и выявить проблемы.
|
||||
|
||||
Полученный стек мониторинга готов к использованию в реальных проектах с минимальными доработками (настройка алертинга, ограничение доступа, интеграция с системой уведомлений).
|
||||
Reference in new issue
Block a user