feat: add demonstration 6.1
This commit is contained in:
1 parent
ee54718ba0
commit
b2713667e6
8 files changed
+824
No files matched your search
@@ -102,4 +102,11 @@ VKC_LR_02_tf_packer_packer-config_РемизовКЛ_20260516.pkr.hcl,CODE,LR_02
|
|||||||
VKC_LR_02_tf_packer_provider_РемизовКЛ_20260617.tf,CODE,LR_02,main,Terraform провайдер,03_code/VKC_LR_02_tf_packer_provider_РемизовКЛ_20260617.tf,,final,
|
VKC_LR_02_tf_packer_provider_РемизовКЛ_20260617.tf,CODE,LR_02,main,Terraform провайдер,03_code/VKC_LR_02_tf_packer_provider_РемизовКЛ_20260617.tf,,final,
|
||||||
VKC_LR_02_tf_packer_security_РемизовКЛ_20260617.tf,CODE,LR_02,main,Terraform Security Groups,03_code/VKC_LR_02_tf_packer_security_РемизовКЛ_20260617.tf,,final,
|
VKC_LR_02_tf_packer_security_РемизовКЛ_20260617.tf,CODE,LR_02,main,Terraform Security Groups,03_code/VKC_LR_02_tf_packer_security_РемизовКЛ_20260617.tf,,final,
|
||||||
VKC_LR_02_tf_packer_variables_РемизовКЛ_20260617.tf,CODE,LR_02,main,Terraform переменные,03_code/VKC_LR_02_tf_packer_variables_РемизовКЛ_20260617.tf,,final,
|
VKC_LR_02_tf_packer_variables_РемизовКЛ_20260617.tf,CODE,LR_02,main,Terraform переменные,03_code/VKC_LR_02_tf_packer_variables_РемизовКЛ_20260617.tf,,final,
|
||||||
|
VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,PR,M06,01,Настройка мониторинга (Prometheus + Grafana),01_reports/VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,,final,
|
||||||
|
VKC_PR_M06_01_monitoring_VM_РемизовКЛ_20260617.png,EVIDENCE,M06,01,Список созданных ВМ,02_evidence/VKC_PR_M06_01_monitoring_VM_РемизовКЛ_20260617.png,VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,final,
|
||||||
|
VKC_PR_M06_01_monitoring_Prometeus_РемизовКЛ_20260617.png,EVIDENCE,M06,01,Цели Prometheus (UP),02_evidence/VKC_PR_M06_01_monitoring_Prometeus_РемизовКЛ_20260617.png,VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,final,
|
||||||
|
VKC_PR_M06_01_monitoring_DS_РемизовКЛ_20260617.png,EVIDENCE,M06,01,Data Source Prometheus в Grafana,02_evidence/VKC_PR_M06_01_monitoring_DS_РемизовКЛ_20260617.png,VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,final,
|
||||||
|
VKC_PR_M06_01_monitoring_dashboard_РемизовКЛ_20260617.png,EVIDENCE,M06,01,Дашборд Node Exporter Full,02_evidence/VKC_PR_M06_01_monitoring_dashboard_РемизовКЛ_20260617.png,VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,final,
|
||||||
|
VKC_PR_M06_01_monitoring_tf_РемизовКЛ_20260617.log,EVIDENCE,M06,01,Лог Terraform apply,02_evidence/VKC_PR_M06_01_monitoring_tf_РемизовКЛ_20260617.log,VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,final,
|
||||||
|
VKC_PR_M06_01_monitoring_main_РемизовКЛ_20260617.tf,CODE,M06,01,Код Terraform для мониторинга,03_code/VKC_PR_M06_01_monitoring_main_РемизовКЛ_20260617.tf,VKC_PR_M06_01_monitoring_REPORT_РемизовКЛ_20260617.md,final,
|
||||||
00_manifest.csv,MANIFEST,all,all,Финальный манифест сдачи,00_manifest.csv,,final,
|
00_manifest.csv,MANIFEST,all,all,Финальный манифест сдачи,00_manifest.csv,,final,
|
||||||
|
@@ -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.
|
||||||
|
- **Наглядность** — готовый дашборд позволяет быстро оценить состояние системы и выявить проблемы.
|
||||||
|
|
||||||
|
Полученный стек мониторинга готов к использованию в реальных проектах с минимальными доработками (настройка алертинга, ограничение доступа, интеграция с системой уведомлений).
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 179 KiB |
@@ -0,0 +1,319 @@
|
|||||||
|
~/rosatom/terraform6-1
|
||||||
|
nix-shell ❯ terraform apply -auto-approve via 💠 default on ☁️ (ru-msk)
|
||||||
|
There are some problems with the CLI configuration:
|
||||||
|
╷
|
||||||
|
│ Warning: Unable to open CLI configuration file
|
||||||
|
│
|
||||||
|
│ The CLI configuration file at
|
||||||
|
│ "/home/kirill/rosatom/terraform-demo/terraform.rc" does not exist.
|
||||||
|
╵
|
||||||
|
|
||||||
|
data.vkcs_compute_flavor.vm: Reading...
|
||||||
|
data.vkcs_networking_router.router: Reading...
|
||||||
|
data.vkcs_networking_network.extnet: Reading...
|
||||||
|
data.vkcs_images_image.ubuntu: Reading...
|
||||||
|
data.vkcs_images_image.ubuntu: Read complete after 0s [id=371e0707-6700-48d1-97d8-e1a01a443fbf]
|
||||||
|
data.vkcs_networking_router.router: Read complete after 0s [id=913bdd47-9155-45b2-b404-5c10d0086132]
|
||||||
|
data.vkcs_compute_flavor.vm: Read complete after 0s [id=25ae869c-be29-4840-8e12-99e046d2dbd4]
|
||||||
|
data.vkcs_networking_network.extnet: Read complete after 0s [id=ec8c610e-6387-447e-83d2-d2c541e88164]
|
||||||
|
|
||||||
|
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
|
||||||
|
+ create
|
||||||
|
|
||||||
|
Terraform will perform the following actions:
|
||||||
|
|
||||||
|
# vkcs_compute_floatingip_associate.monitoring_fip_assoc will be created
|
||||||
|
+ resource "vkcs_compute_floatingip_associate" "monitoring_fip_assoc" {
|
||||||
|
+ floating_ip = (known after apply)
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ instance_id = (known after apply)
|
||||||
|
+ region = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_compute_instance.app[0] will be created
|
||||||
|
+ resource "vkcs_compute_instance" "app" {
|
||||||
|
+ access_ip_v4 = (known after apply)
|
||||||
|
+ all_metadata = (known after apply)
|
||||||
|
+ all_tags = (known after apply)
|
||||||
|
+ availability_zone = "MS1"
|
||||||
|
+ flavor_id = "25ae869c-be29-4840-8e12-99e046d2dbd4"
|
||||||
|
+ flavor_name = (known after apply)
|
||||||
|
+ force_delete = false
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ image_id = (known after apply)
|
||||||
|
+ image_name = (known after apply)
|
||||||
|
+ key_pair = "monitoring-key"
|
||||||
|
+ name = "app-vm-1"
|
||||||
|
+ password_data = (known after apply)
|
||||||
|
+ power_state = "active"
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ security_group_ids = (known after apply)
|
||||||
|
+ security_groups = [
|
||||||
|
+ "monitoring-sg",
|
||||||
|
]
|
||||||
|
+ stop_before_destroy = false
|
||||||
|
+ user_data = "f355816eb1f6204d3318b3db355d4625d045ab6f"
|
||||||
|
|
||||||
|
+ block_device {
|
||||||
|
+ boot_index = 0
|
||||||
|
+ delete_on_termination = true
|
||||||
|
+ destination_type = "volume"
|
||||||
|
+ source_type = "image"
|
||||||
|
+ uuid = "371e0707-6700-48d1-97d8-e1a01a443fbf"
|
||||||
|
+ volume_size = 10
|
||||||
|
+ volume_type = "ceph-ssd"
|
||||||
|
}
|
||||||
|
|
||||||
|
+ network {
|
||||||
|
+ access_network = false
|
||||||
|
+ fixed_ip_v4 = (known after apply)
|
||||||
|
+ mac = (known after apply)
|
||||||
|
+ name = (known after apply)
|
||||||
|
+ port = (known after apply)
|
||||||
|
+ uuid = (known after apply)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_compute_instance.monitoring will be created
|
||||||
|
+ resource "vkcs_compute_instance" "monitoring" {
|
||||||
|
+ access_ip_v4 = (known after apply)
|
||||||
|
+ all_metadata = (known after apply)
|
||||||
|
+ all_tags = (known after apply)
|
||||||
|
+ availability_zone = "MS1"
|
||||||
|
+ flavor_id = "25ae869c-be29-4840-8e12-99e046d2dbd4"
|
||||||
|
+ flavor_name = (known after apply)
|
||||||
|
+ force_delete = false
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ image_id = (known after apply)
|
||||||
|
+ image_name = (known after apply)
|
||||||
|
+ key_pair = "monitoring-key"
|
||||||
|
+ name = "monitoring-vm"
|
||||||
|
+ password_data = (known after apply)
|
||||||
|
+ power_state = "active"
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ security_group_ids = (known after apply)
|
||||||
|
+ security_groups = [
|
||||||
|
+ "monitoring-sg",
|
||||||
|
]
|
||||||
|
+ stop_before_destroy = false
|
||||||
|
+ user_data = "9ecd690e01cac29a10c58e9563c4ea99a7f8cf15"
|
||||||
|
|
||||||
|
+ block_device {
|
||||||
|
+ boot_index = 0
|
||||||
|
+ delete_on_termination = true
|
||||||
|
+ destination_type = "volume"
|
||||||
|
+ source_type = "image"
|
||||||
|
+ uuid = "371e0707-6700-48d1-97d8-e1a01a443fbf"
|
||||||
|
+ volume_size = 10
|
||||||
|
+ volume_type = "ceph-ssd"
|
||||||
|
}
|
||||||
|
|
||||||
|
+ network {
|
||||||
|
+ access_network = false
|
||||||
|
+ fixed_ip_v4 = (known after apply)
|
||||||
|
+ mac = (known after apply)
|
||||||
|
+ name = (known after apply)
|
||||||
|
+ port = (known after apply)
|
||||||
|
+ uuid = (known after apply)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_compute_keypair.monitoring will be created
|
||||||
|
+ resource "vkcs_compute_keypair" "monitoring" {
|
||||||
|
+ fingerprint = (known after apply)
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ name = "monitoring-key"
|
||||||
|
+ private_key = (sensitive value)
|
||||||
|
+ public_key = <<-EOT
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCpR6b3KEkuT5Y/lWNXvD/MR0z10FKUJbSKgeVIsHxyrLm4gSk1WjobE4gH9OqXOn3r5JmTiGv0hWBACy2xBMZwnrsxgJtTSzPmYCJTln9zr/b7TFOijmB9qh/2pV5m+HPvKOZUiXCvfa9yOxmB0Thpud8ANzkgFgyT+MvaHQrEhDj6XJui3di7r+7DEHN7bCb9VWWFnAswbOxMWdtoxNMcVN1GYvtRqc/1qxSG0Qs4Ph748zhJFQAaFuu7MTZQsjhBIWF3dy5i0MIqsICTzSPayMEtrt+xCxYMEJSn1jUZrvQpkOe++jW181LVi56xnVazMe4VcRA1YYXo78OQQZGeHl3o9QjO2WhNwel1o+zU8DpD6gIay0heipQlcQZr92B7OI1XPpf8iXqqOYcC3U0e7ZqG9o0oJGO4vrp/wkL5bjMAvjnYtg7rta6fl/R0onrWVnIP3CzoaKBqjpdSnuR5s3kG+BSA2INJA6t+xdNN5cL0Gw6Xd5Hq8/XgaBSBJM0= kirill@WhiteRaven
|
||||||
|
EOT
|
||||||
|
+ region = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_floatingip.monitoring_fip will be created
|
||||||
|
+ resource "vkcs_networking_floatingip" "monitoring_fip" {
|
||||||
|
+ address = (known after apply)
|
||||||
|
+ fixed_ip = (known after apply)
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ pool = "internet"
|
||||||
|
+ port_id = (known after apply)
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
+ subnet_id = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_network.internal will be created
|
||||||
|
+ resource "vkcs_networking_network" "internal" {
|
||||||
|
+ admin_state_up = true
|
||||||
|
+ all_tags = (known after apply)
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ name = "monitoring-internal-net"
|
||||||
|
+ port_security_enabled = true
|
||||||
|
+ private_dns_domain = (known after apply)
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ sdn = "sprut"
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_router_interface.router_interface will be created
|
||||||
|
+ resource "vkcs_networking_router_interface" "router_interface" {
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ port_id = (known after apply)
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ router_id = "913bdd47-9155-45b2-b404-5c10d0086132"
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
+ subnet_id = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_secgroup.monitoring_sg will be created
|
||||||
|
+ resource "vkcs_networking_secgroup" "monitoring_sg" {
|
||||||
|
+ all_tags = (known after apply)
|
||||||
|
+ description = "Allow SSH, Prometheus, Grafana, Node Exporter"
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ name = "monitoring-sg"
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_secgroup_rule.grafana will be created
|
||||||
|
+ resource "vkcs_networking_secgroup_rule" "grafana" {
|
||||||
|
+ direction = "ingress"
|
||||||
|
+ ethertype = "IPv4"
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ port_range_max = 3000
|
||||||
|
+ port_range_min = 3000
|
||||||
|
+ protocol = "tcp"
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ remote_group_id = (known after apply)
|
||||||
|
+ remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
+ security_group_id = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_secgroup_rule.node_exporter will be created
|
||||||
|
+ resource "vkcs_networking_secgroup_rule" "node_exporter" {
|
||||||
|
+ direction = "ingress"
|
||||||
|
+ ethertype = "IPv4"
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ port_range_max = 9100
|
||||||
|
+ port_range_min = 9100
|
||||||
|
+ protocol = "tcp"
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ remote_group_id = (known after apply)
|
||||||
|
+ remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
+ security_group_id = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_secgroup_rule.prometheus will be created
|
||||||
|
+ resource "vkcs_networking_secgroup_rule" "prometheus" {
|
||||||
|
+ direction = "ingress"
|
||||||
|
+ ethertype = "IPv4"
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ port_range_max = 9090
|
||||||
|
+ port_range_min = 9090
|
||||||
|
+ protocol = "tcp"
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ remote_group_id = (known after apply)
|
||||||
|
+ remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
+ security_group_id = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_secgroup_rule.ssh will be created
|
||||||
|
+ resource "vkcs_networking_secgroup_rule" "ssh" {
|
||||||
|
+ direction = "ingress"
|
||||||
|
+ ethertype = "IPv4"
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ port_range_max = 22
|
||||||
|
+ port_range_min = 22
|
||||||
|
+ protocol = "tcp"
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ remote_group_id = (known after apply)
|
||||||
|
+ remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
+ security_group_id = (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
# vkcs_networking_subnet.internal will be created
|
||||||
|
+ resource "vkcs_networking_subnet" "internal" {
|
||||||
|
+ all_tags = (known after apply)
|
||||||
|
+ cidr = "192.168.200.0/24"
|
||||||
|
+ enable_dhcp = true
|
||||||
|
+ enable_private_dns = (known after apply)
|
||||||
|
+ gateway_ip = (known after apply)
|
||||||
|
+ id = (known after apply)
|
||||||
|
+ name = "monitoring-internal-subnet"
|
||||||
|
+ network_id = (known after apply)
|
||||||
|
+ no_gateway = false
|
||||||
|
+ region = (known after apply)
|
||||||
|
+ sdn = (known after apply)
|
||||||
|
|
||||||
|
+ allocation_pool (known after apply)
|
||||||
|
}
|
||||||
|
|
||||||
|
Plan: 13 to add, 0 to change, 0 to destroy.
|
||||||
|
|
||||||
|
Changes to Outputs:
|
||||||
|
+ app_ips = [
|
||||||
|
+ (known after apply),
|
||||||
|
]
|
||||||
|
+ grafana_url = (known after apply)
|
||||||
|
+ monitoring_ip = (known after apply)
|
||||||
|
+ prometheus_url = (known after apply)
|
||||||
|
+ ssh_password = "debian"
|
||||||
|
vkcs_networking_secgroup.monitoring_sg: Creating...
|
||||||
|
vkcs_networking_floatingip.monitoring_fip: Creating...
|
||||||
|
vkcs_networking_network.internal: Creating...
|
||||||
|
vkcs_compute_keypair.monitoring: Creating...
|
||||||
|
vkcs_compute_keypair.monitoring: Creation complete after 0s [id=monitoring-key]
|
||||||
|
vkcs_networking_secgroup.monitoring_sg: Creation complete after 1s [id=8aa4eb80-45e1-4f0d-a54b-f3e0f52f853f]
|
||||||
|
vkcs_networking_secgroup_rule.node_exporter: Creating...
|
||||||
|
vkcs_networking_secgroup_rule.ssh: Creating...
|
||||||
|
vkcs_networking_secgroup_rule.prometheus: Creating...
|
||||||
|
vkcs_networking_secgroup_rule.grafana: Creating...
|
||||||
|
vkcs_networking_secgroup_rule.ssh: Creation complete after 0s [id=fb2538b5-fc65-4743-a37e-be5789b1742d]
|
||||||
|
vkcs_networking_secgroup_rule.prometheus: Creation complete after 0s [id=b8cc74ab-a015-4615-8975-0bfd338f8213]
|
||||||
|
vkcs_networking_secgroup_rule.grafana: Creation complete after 1s [id=576f3bc7-b4d2-4158-b012-ca38b7561894]
|
||||||
|
vkcs_networking_secgroup_rule.node_exporter: Creation complete after 1s [id=5dcf4a9e-c04a-4724-915a-3a29318c3f5a]
|
||||||
|
vkcs_networking_network.internal: Creation complete after 5s [id=93dd466e-b667-4acf-8ecd-47a6e21c955b]
|
||||||
|
vkcs_networking_subnet.internal: Creating...
|
||||||
|
vkcs_compute_instance.app[0]: Creating...
|
||||||
|
vkcs_networking_floatingip.monitoring_fip: Creation complete after 8s [id=7acab770-0e85-4f18-b1f3-513be0b11874]
|
||||||
|
vkcs_networking_subnet.internal: Creation complete after 6s [id=8d7531bf-4b90-4759-b6c9-cc030061b9be]
|
||||||
|
vkcs_networking_router_interface.router_interface: Creating...
|
||||||
|
vkcs_compute_instance.app[0]: Still creating... [00m10s elapsed]
|
||||||
|
vkcs_networking_router_interface.router_interface: Creation complete after 6s [id=53d6881c-5426-4cad-8fd2-9e3af842e99e]
|
||||||
|
vkcs_compute_instance.app[0]: Still creating... [00m20s elapsed]
|
||||||
|
vkcs_compute_instance.app[0]: Still creating... [00m30s elapsed]
|
||||||
|
vkcs_compute_instance.app[0]: Creation complete after 34s [id=bc03c969-7f19-493e-a6d9-4cce60d5a973]
|
||||||
|
vkcs_compute_instance.monitoring: Creating...
|
||||||
|
vkcs_compute_instance.monitoring: Still creating... [00m10s elapsed]
|
||||||
|
vkcs_compute_instance.monitoring: Still creating... [00m20s elapsed]
|
||||||
|
vkcs_compute_instance.monitoring: Still creating... [00m30s elapsed]
|
||||||
|
vkcs_compute_instance.monitoring: Still creating... [00m40s elapsed]
|
||||||
|
vkcs_compute_instance.monitoring: Creation complete after 45s [id=8ef7a2cf-15a0-45f8-9e03-a0d83db6f4e4]
|
||||||
|
vkcs_compute_floatingip_associate.monitoring_fip_assoc: Creating...
|
||||||
|
vkcs_compute_floatingip_associate.monitoring_fip_assoc: Creation complete after 2s [id=95.163.215.1/8ef7a2cf-15a0-45f8-9e03-a0d83db6f4e4/]
|
||||||
|
╷
|
||||||
|
│ Warning: Argument is deprecated
|
||||||
|
│
|
||||||
|
│ with vkcs_networking_secgroup_rule.ssh,
|
||||||
|
│ on VKC_PR_M06_01_monitoring_main_РемизовКЛ_20260617.tf line 87, in resource "vkcs_networking_secgroup_rule" "ssh":
|
||||||
|
│ 87: ethertype = "IPv4"
|
||||||
|
│
|
||||||
|
│ Only IPv4 can be used as ethertype. This argument is deprecated, please do not use it.
|
||||||
|
│
|
||||||
|
│ (and 15 more similar warnings elsewhere)
|
||||||
|
╵
|
||||||
|
|
||||||
|
Apply complete! Resources: 13 added, 0 changed, 0 destroyed.
|
||||||
|
|
||||||
|
Outputs:
|
||||||
|
|
||||||
|
app_ips = [
|
||||||
|
"192.168.200.9",
|
||||||
|
]
|
||||||
|
grafana_url = "http://95.163.215.1:3000"
|
||||||
|
monitoring_ip = "95.163.215.1"
|
||||||
|
prometheus_url = "http://95.163.215.1:9090"
|
||||||
|
ssh_password = "debian"
|
||||||
@@ -0,0 +1,316 @@
|
|||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
vkcs = {
|
||||||
|
source = "vk-cs/vkcs"
|
||||||
|
version = "~> 0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "vkcs" {}
|
||||||
|
|
||||||
|
variable "external_network_name" {
|
||||||
|
default = "internet"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "router_id" {
|
||||||
|
default = "913bdd47-9155-45b2-b404-5c10d0086132"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "image_name" {
|
||||||
|
default = "ubuntu-20-202602051631.gite7a38aaf"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "flavor_name" {
|
||||||
|
default = "Basic-1-2-20"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "app_count" {
|
||||||
|
default = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "availability_zone" {
|
||||||
|
default = "MS1"
|
||||||
|
}
|
||||||
|
|
||||||
|
data "vkcs_networking_network" "extnet" {
|
||||||
|
name = var.external_network_name
|
||||||
|
}
|
||||||
|
|
||||||
|
data "vkcs_networking_router" "router" {
|
||||||
|
id = var.router_id
|
||||||
|
}
|
||||||
|
|
||||||
|
data "vkcs_images_image" "ubuntu" {
|
||||||
|
name = var.image_name
|
||||||
|
most_recent = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "vkcs_compute_flavor" "vm" {
|
||||||
|
name = var.flavor_name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_network" "internal" {
|
||||||
|
name = "monitoring-internal-net"
|
||||||
|
sdn = "sprut"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_subnet" "internal" {
|
||||||
|
name = "monitoring-internal-subnet"
|
||||||
|
network_id = vkcs_networking_network.internal.id
|
||||||
|
cidr = "192.168.200.0/24"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_router_interface" "router_interface" {
|
||||||
|
router_id = data.vkcs_networking_router.router.id
|
||||||
|
subnet_id = vkcs_networking_subnet.internal.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_secgroup" "monitoring_sg" {
|
||||||
|
name = "monitoring-sg"
|
||||||
|
description = "Allow SSH, Prometheus, Grafana, Node Exporter"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_secgroup_rule" "ssh" {
|
||||||
|
direction = "ingress"
|
||||||
|
ethertype = "IPv4"
|
||||||
|
protocol = "tcp"
|
||||||
|
port_range_min = 22
|
||||||
|
port_range_max = 22
|
||||||
|
remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
security_group_id = vkcs_networking_secgroup.monitoring_sg.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_secgroup_rule" "grafana" {
|
||||||
|
direction = "ingress"
|
||||||
|
ethertype = "IPv4"
|
||||||
|
protocol = "tcp"
|
||||||
|
port_range_min = 3000
|
||||||
|
port_range_max = 3000
|
||||||
|
remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
security_group_id = vkcs_networking_secgroup.monitoring_sg.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_secgroup_rule" "prometheus" {
|
||||||
|
direction = "ingress"
|
||||||
|
ethertype = "IPv4"
|
||||||
|
protocol = "tcp"
|
||||||
|
port_range_min = 9090
|
||||||
|
port_range_max = 9090
|
||||||
|
remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
security_group_id = vkcs_networking_secgroup.monitoring_sg.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_secgroup_rule" "node_exporter" {
|
||||||
|
direction = "ingress"
|
||||||
|
ethertype = "IPv4"
|
||||||
|
protocol = "tcp"
|
||||||
|
port_range_min = 9100
|
||||||
|
port_range_max = 9100
|
||||||
|
remote_ip_prefix = "0.0.0.0/0"
|
||||||
|
security_group_id = vkcs_networking_secgroup.monitoring_sg.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_compute_keypair" "monitoring" {
|
||||||
|
name = "monitoring-key"
|
||||||
|
public_key = file("~/.ssh/id_rsa.pub")
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_compute_instance" "app" {
|
||||||
|
count = var.app_count
|
||||||
|
|
||||||
|
name = "app-vm-${count.index + 1}"
|
||||||
|
flavor_id = data.vkcs_compute_flavor.vm.id
|
||||||
|
key_pair = vkcs_compute_keypair.monitoring.name
|
||||||
|
availability_zone = var.availability_zone
|
||||||
|
|
||||||
|
block_device {
|
||||||
|
uuid = data.vkcs_images_image.ubuntu.id
|
||||||
|
source_type = "image"
|
||||||
|
destination_type = "volume"
|
||||||
|
volume_type = "ceph-ssd"
|
||||||
|
volume_size = 10
|
||||||
|
boot_index = 0
|
||||||
|
delete_on_termination = true
|
||||||
|
}
|
||||||
|
|
||||||
|
network {
|
||||||
|
uuid = vkcs_networking_network.internal.id
|
||||||
|
}
|
||||||
|
|
||||||
|
security_groups = [vkcs_networking_secgroup.monitoring_sg.name]
|
||||||
|
|
||||||
|
user_data = <<-EOF
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y wget
|
||||||
|
cd /opt
|
||||||
|
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
|
||||||
|
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
|
||||||
|
mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
|
||||||
|
rm -rf node_exporter-1.7.0.linux-amd64*
|
||||||
|
cat > /etc/systemd/system/node_exporter.service <<EOL
|
||||||
|
[Unit]
|
||||||
|
Description=Node Exporter
|
||||||
|
After=network.target
|
||||||
|
[Service]
|
||||||
|
User=nobody
|
||||||
|
Group=nogroup
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/node_exporter
|
||||||
|
Restart=always
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOL
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable node_exporter
|
||||||
|
systemctl start node_exporter
|
||||||
|
echo "App VM ${count.index + 1} ready"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_compute_instance" "monitoring" {
|
||||||
|
depends_on = [vkcs_compute_instance.app]
|
||||||
|
|
||||||
|
name = "monitoring-vm"
|
||||||
|
flavor_id = data.vkcs_compute_flavor.vm.id
|
||||||
|
key_pair = vkcs_compute_keypair.monitoring.name
|
||||||
|
availability_zone = var.availability_zone
|
||||||
|
|
||||||
|
block_device {
|
||||||
|
uuid = data.vkcs_images_image.ubuntu.id
|
||||||
|
source_type = "image"
|
||||||
|
destination_type = "volume"
|
||||||
|
volume_type = "ceph-ssd"
|
||||||
|
volume_size = 10
|
||||||
|
boot_index = 0
|
||||||
|
delete_on_termination = true
|
||||||
|
}
|
||||||
|
|
||||||
|
network {
|
||||||
|
uuid = vkcs_networking_network.internal.id
|
||||||
|
}
|
||||||
|
|
||||||
|
security_groups = [vkcs_networking_secgroup.monitoring_sg.name]
|
||||||
|
|
||||||
|
user_data = <<-EOF
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
exec > >(tee /var/log/user_data.log) 2>&1
|
||||||
|
|
||||||
|
# --- Устанавливаем пароль для ubuntu ---
|
||||||
|
echo "ubuntu:debian" | chpasswd
|
||||||
|
|
||||||
|
# --- Включаем парольный SSH ---
|
||||||
|
sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
|
||||||
|
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
|
||||||
|
systemctl restart ssh
|
||||||
|
|
||||||
|
# --- Установка Prometheus, Grafana, Node Exporter ---
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y wget curl software-properties-common
|
||||||
|
|
||||||
|
cd /opt
|
||||||
|
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
|
||||||
|
tar xvf prometheus-2.48.0.linux-amd64.tar.gz
|
||||||
|
mv prometheus-2.48.0.linux-amd64 prometheus
|
||||||
|
useradd --no-create-home --shell /bin/false prometheus
|
||||||
|
chown -R prometheus:prometheus /opt/prometheus
|
||||||
|
|
||||||
|
# Создаём папку для данных и даём права
|
||||||
|
mkdir -p /opt/prometheus/data
|
||||||
|
chown -R prometheus:prometheus /opt/prometheus/data
|
||||||
|
|
||||||
|
cat > /opt/prometheus/prometheus.yml <<EOL
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'node'
|
||||||
|
static_configs:
|
||||||
|
- targets: []
|
||||||
|
EOL
|
||||||
|
|
||||||
|
cat > /etc/systemd/system/prometheus.service <<EOL
|
||||||
|
[Unit]
|
||||||
|
Description=Prometheus
|
||||||
|
After=network.target
|
||||||
|
[Service]
|
||||||
|
User=prometheus
|
||||||
|
Group=prometheus
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.listen-address=0.0.0.0:9090 --storage.tsdb.path=/opt/prometheus/data
|
||||||
|
Restart=always
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOL
|
||||||
|
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable prometheus
|
||||||
|
systemctl start prometheus
|
||||||
|
|
||||||
|
# --- Grafana (установка через deb, чтобы избежать проблем с репозиторием) ---
|
||||||
|
cd /tmp
|
||||||
|
wget https://dl.grafana.com/oss/release/grafana_11.3.0_amd64.deb
|
||||||
|
dpkg -i grafana_11.3.0_amd64.deb || apt-get install -f -y
|
||||||
|
systemctl enable grafana-server
|
||||||
|
systemctl start grafana-server
|
||||||
|
|
||||||
|
# --- Node Exporter ---
|
||||||
|
cd /opt
|
||||||
|
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
|
||||||
|
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
|
||||||
|
mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
|
||||||
|
rm -rf node_exporter-1.7.0.linux-amd64*
|
||||||
|
|
||||||
|
cat > /etc/systemd/system/node_exporter.service <<EOL
|
||||||
|
[Unit]
|
||||||
|
Description=Node Exporter
|
||||||
|
After=network.target
|
||||||
|
[Service]
|
||||||
|
User=nobody
|
||||||
|
Group=nogroup
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/node_exporter
|
||||||
|
Restart=always
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOL
|
||||||
|
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable node_exporter
|
||||||
|
systemctl start node_exporter
|
||||||
|
|
||||||
|
echo "=== user_data finished ==="
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_networking_floatingip" "monitoring_fip" {
|
||||||
|
pool = data.vkcs_networking_network.extnet.name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "vkcs_compute_floatingip_associate" "monitoring_fip_assoc" {
|
||||||
|
floating_ip = vkcs_networking_floatingip.monitoring_fip.address
|
||||||
|
instance_id = vkcs_compute_instance.monitoring.id
|
||||||
|
}
|
||||||
|
|
||||||
|
output "monitoring_ip" {
|
||||||
|
value = vkcs_networking_floatingip.monitoring_fip.address
|
||||||
|
}
|
||||||
|
|
||||||
|
output "app_ips" {
|
||||||
|
value = vkcs_compute_instance.app[*].access_ip_v4
|
||||||
|
}
|
||||||
|
|
||||||
|
output "grafana_url" {
|
||||||
|
value = "http://${vkcs_networking_floatingip.monitoring_fip.address}:3000"
|
||||||
|
}
|
||||||
|
|
||||||
|
output "prometheus_url" {
|
||||||
|
value = "http://${vkcs_networking_floatingip.monitoring_fip.address}:9090"
|
||||||
|
}
|
||||||
|
|
||||||
|
output "ssh_password" {
|
||||||
|
value = "debian"
|
||||||
|
description = "Логин: ubuntu, пароль: debian"
|
||||||
|
}
|
||||||
Reference in new issue
Block a user