393 lines
13 KiB
Markdown
393 lines
13 KiB
Markdown
|
||
# Terraform конфигурация для развертывания Grafana Loki на Proxmox
|
||
|
||
Этот проект содержит полный набор Terraform файлов для автоматического развертывания виртуальной машины на Proxmox с установкой и настройкой Grafana Loki и Promtail для сбора и хранения логов.
|
||
|
||
## 📋 Описание проекта
|
||
|
||
Проект автоматизирует следующие задачи:
|
||
- Создание SSH ключей для безопасного доступа к VM
|
||
- Развертывание виртуальной машины на Proxmox с заданными параметрами
|
||
- Установка и настройка Grafana Loki (система хранения и агрегации логов)
|
||
- Установка и настройка Promtail (агент для сбора логов)
|
||
- Настройка автоматического сбора системных логов из `/var/log`
|
||
|
||
## 🎯 Параметры виртуальной машины
|
||
|
||
- **CPU**: 4 ядра
|
||
- **RAM**: 4 GB
|
||
- **Диск**: 31 GB
|
||
- **ОС**: Ubuntu 22.04 (из cloud-init template)
|
||
- **Сеть**: DHCP (динамическое получение IP)
|
||
|
||
## 📦 Установленные компоненты
|
||
|
||
### Grafana Loki
|
||
- Версия: 2.9.3
|
||
- Порт: 3100
|
||
- Режим: Standalone
|
||
- Хранилище: Filesystem
|
||
- Retention: 31 день
|
||
|
||
### Promtail
|
||
- Версия: 2.9.3
|
||
- Порт: 9080
|
||
- Собирает логи из:
|
||
- `/var/log/*log` (все системные логи)
|
||
- `/var/log/syslog`
|
||
- `/var/log/auth.log`
|
||
- `/var/log/kern.log`
|
||
- Systemd journal
|
||
- Apache, Nginx, Docker (если установлены)
|
||
|
||
## 🔧 Требования
|
||
|
||
### На локальной машине:
|
||
- [Terraform](https://www.terraform.io/downloads) >= 1.0
|
||
- Доступ к Proxmox API
|
||
- Proxmox API Token (Token ID и Secret)
|
||
|
||
### В Proxmox:
|
||
- Ubuntu 22.04 Cloud-Init template (можно создать из cloud image)
|
||
- Достаточно ресурсов (4 CPU, 4GB RAM, 31GB диск)
|
||
- Настроенная сеть с DHCP
|
||
- Хранилище (storage) для дисков VM
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```
|
||
proxmox-loki-terraform/
|
||
├── main.tf # Основная конфигурация Terraform
|
||
├── variables.tf # Переменные
|
||
├── outputs.tf # Выходные данные
|
||
├── install_loki.sh # Скрипт установки Loki
|
||
├── install_promtail.sh # Скрипт установки Promtail
|
||
├── loki-config.yaml # Конфигурация Loki
|
||
├── promtail-config.yaml # Конфигурация Promtail
|
||
├── README.md # Эта инструкция
|
||
├── terraform.tfvars # Файл с вашими значениями переменных (создать)
|
||
└── ssh_key.pem # SSH ключ (будет создан после apply)
|
||
```
|
||
|
||
## 🚀 Инструкция по использованию
|
||
|
||
### Шаг 1: Подготовка Proxmox
|
||
|
||
1. Создайте API Token в Proxmox:
|
||
```bash
|
||
# В Proxmox Web UI:
|
||
# Datacenter → Permissions → API Tokens → Add
|
||
# Сохраните Token ID и Secret
|
||
```
|
||
|
||
2. Убедитесь, что у вас есть Ubuntu 22.04 Cloud-Init template:
|
||
```bash
|
||
# Пример создания template в Proxmox (выполнить на Proxmox сервере):
|
||
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
|
||
qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
|
||
qm importdisk 9000 jammy-server-cloudimg-amd64.img local-lvm
|
||
qm set 9000 --scsi0 local-lvm:vm-9000-disk-0
|
||
qm set 9000 --boot c --bootdisk scsi0
|
||
qm set 9000 --ide2 local-lvm:cloudinit
|
||
qm set 9000 --serial0 socket --vga serial0
|
||
qm set 9000 --agent enabled=1
|
||
qm template 9000
|
||
qm set 9000 --name ubuntu-22.04-cloudimg
|
||
```
|
||
|
||
### Шаг 2: Настройка переменных
|
||
|
||
Создайте файл `terraform.tfvars` в директории проекта:
|
||
|
||
```hcl
|
||
# terraform.tfvars
|
||
proxmox_api_url = "https://your-proxmox-server.com:8006/api2/json"
|
||
proxmox_token_id = "user@pam!token_name"
|
||
proxmox_token_secret = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
||
target_node = "pve" # Имя вашего Proxmox узла
|
||
storage = "local-lvm" # Ваше хранилище
|
||
template_name = "ubuntu-22.04-cloudimg" # Имя вашего template
|
||
network_bridge = "vmbr0" # Ваш сетевой мост
|
||
|
||
# Опционально - можно изменить параметры VM:
|
||
vm_name = "loki-vm"
|
||
vm_cores = 4
|
||
vm_memory = 4096
|
||
vm_disk_size = "31G"
|
||
ssh_user = "ubuntu"
|
||
```
|
||
|
||
### Шаг 3: Инициализация Terraform
|
||
|
||
```bash
|
||
cd /home/ubuntu/proxmox-loki-terraform
|
||
terraform init
|
||
```
|
||
|
||
### Шаг 4: Проверка плана развертывания
|
||
|
||
```bash
|
||
terraform plan
|
||
```
|
||
|
||
Проверьте, что все параметры корректны и соответствуют вашим требованиям.
|
||
|
||
### Шаг 5: Развертывание
|
||
|
||
```bash
|
||
terraform apply
|
||
```
|
||
|
||
Введите `yes` для подтверждения. Процесс займет 5-10 минут:
|
||
1. Создание SSH ключей
|
||
2. Создание VM в Proxmox
|
||
3. Ожидание запуска cloud-init
|
||
4. Установка Grafana Loki
|
||
5. Установка Promtail
|
||
|
||
### Шаг 6: Получение информации о VM
|
||
|
||
После успешного развертывания вы получите:
|
||
|
||
```bash
|
||
# Просмотр всех outputs:
|
||
terraform output
|
||
|
||
# IP адрес VM:
|
||
terraform output vm_ip_address
|
||
|
||
# SSH команда для подключения:
|
||
terraform output ssh_connection_command
|
||
|
||
# Сохранение SSH ключа:
|
||
terraform output -raw ssh_private_key > ssh_key.pem
|
||
chmod 600 ssh_key.pem
|
||
|
||
# URL Loki:
|
||
terraform output loki_url
|
||
```
|
||
|
||
## 🔐 Подключение к VM
|
||
|
||
```bash
|
||
# Сохраните SSH ключ
|
||
terraform output -raw ssh_private_key > ssh_key.pem
|
||
chmod 600 ssh_key.pem
|
||
|
||
# Подключитесь к VM
|
||
ssh -i ssh_key.pem ubuntu@<VM_IP>
|
||
```
|
||
|
||
## ✅ Проверка работы сервисов
|
||
|
||
### Проверка Loki:
|
||
|
||
```bash
|
||
# Статус сервиса
|
||
sudo systemctl status loki
|
||
|
||
# Проверка здоровья
|
||
curl http://localhost:3100/ready
|
||
|
||
# Просмотр логов
|
||
sudo journalctl -u loki -f
|
||
|
||
# Проверка метрик
|
||
curl http://localhost:3100/metrics
|
||
```
|
||
|
||
### Проверка Promtail:
|
||
|
||
```bash
|
||
# Статус сервиса
|
||
sudo systemctl status promtail
|
||
|
||
# Просмотр логов
|
||
sudo journalctl -u promtail -f
|
||
|
||
# Проверка метрик
|
||
curl http://localhost:9080/metrics
|
||
```
|
||
|
||
### Проверка сбора логов:
|
||
|
||
```bash
|
||
# Проверка, что логи поступают в Loki
|
||
curl -G -s "http://localhost:3100/loki/api/v1/query" --data-urlencode 'query={job="varlogs"}' | jq
|
||
|
||
# Получить последние логи
|
||
curl -G -s "http://localhost:3100/loki/api/v1/query_range" \
|
||
--data-urlencode 'query={job="syslog"}' \
|
||
--data-urlencode 'limit=10' | jq
|
||
```
|
||
|
||
## 📊 Интеграция с Grafana
|
||
|
||
Для визуализации логов рекомендуется установить Grafana:
|
||
|
||
1. Установите Grafana на этой же VM или отдельной машине
|
||
2. Добавьте Loki как Data Source:
|
||
- URL: `http://<VM_IP>:3100`
|
||
- Type: Loki
|
||
3. Создайте дашборды для визуализации логов
|
||
|
||
### Быстрая установка Grafana на той же VM:
|
||
|
||
```bash
|
||
# Подключитесь к VM
|
||
ssh -i ssh_key.pem ubuntu@<VM_IP>
|
||
|
||
# Установите Grafana
|
||
sudo apt-get install -y apt-transport-https software-properties-common wget
|
||
sudo mkdir -p /etc/apt/keyrings/
|
||
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
|
||
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
|
||
sudo apt-get update
|
||
sudo apt-get install grafana
|
||
|
||
# Запустите Grafana
|
||
sudo systemctl enable grafana-server
|
||
sudo systemctl start grafana-server
|
||
|
||
# Grafana будет доступна на http://<VM_IP>:3000
|
||
# Логин по умолчанию: admin/admin
|
||
```
|
||
|
||
## 🛠️ Управление инфраструктурой
|
||
|
||
### Изменение конфигурации:
|
||
|
||
```bash
|
||
# Внесите изменения в terraform.tfvars или конфигурационные файлы
|
||
# Примените изменения:
|
||
terraform apply
|
||
```
|
||
|
||
### Удаление VM:
|
||
|
||
```bash
|
||
# Удалит VM и все связанные ресурсы
|
||
terraform destroy
|
||
```
|
||
|
||
### Пересоздание VM:
|
||
|
||
```bash
|
||
# Пометить ресурс для пересоздания
|
||
terraform taint proxmox_vm_qemu.loki_vm
|
||
terraform apply
|
||
```
|
||
|
||
## 📝 Полезные команды LogQL
|
||
|
||
LogQL - язык запросов для Loki (похож на PromQL):
|
||
|
||
```bash
|
||
# Все логи с job="syslog"
|
||
{job="syslog"}
|
||
|
||
# Логи с фильтром по содержимому
|
||
{job="syslog"} |= "error"
|
||
|
||
# Логи с регулярным выражением
|
||
{job="auth"} |~ "Failed password.*"
|
||
|
||
# Количество ошибок за последний час
|
||
count_over_time({job="syslog"} |= "error" [1h])
|
||
|
||
# Логи из нескольких источников
|
||
{job=~"syslog|auth"}
|
||
```
|
||
|
||
## 🔧 Настройка и кастомизация
|
||
|
||
### Изменение retention period:
|
||
|
||
Отредактируйте `loki-config.yaml`:
|
||
```yaml
|
||
limits_config:
|
||
retention_period: 744h # Измените на нужное значение
|
||
```
|
||
|
||
### Добавление новых источников логов:
|
||
|
||
Отредактируйте `promtail-config.yaml`, добавьте новый `job_name`:
|
||
```yaml
|
||
scrape_configs:
|
||
- job_name: my-app
|
||
static_configs:
|
||
- targets:
|
||
- localhost
|
||
labels:
|
||
job: my-app
|
||
__path__: /var/log/my-app/*.log
|
||
```
|
||
|
||
### Изменение ресурсов VM:
|
||
|
||
В `terraform.tfvars`:
|
||
```hcl
|
||
vm_cores = 8 # Увеличить CPU
|
||
vm_memory = 8192 # Увеличить RAM
|
||
vm_disk_size = "50G" # Увеличить диск
|
||
```
|
||
|
||
## 🐛 Решение проблем
|
||
|
||
### VM не получает IP адрес:
|
||
```bash
|
||
# Проверьте настройки DHCP в сети Proxmox
|
||
# Проверьте, что cloud-init работает на VM
|
||
```
|
||
|
||
### Не удается подключиться по SSH:
|
||
```bash
|
||
# Проверьте, что VM запущена в Proxmox
|
||
# Проверьте firewall правила
|
||
# Убедитесь, что SSH ключ сохранен с правильными правами (chmod 600)
|
||
```
|
||
|
||
### Loki не запускается:
|
||
```bash
|
||
# Проверьте логи
|
||
sudo journalctl -u loki -n 100
|
||
|
||
# Проверьте конфигурацию
|
||
sudo /usr/local/bin/loki -config.file=/etc/loki/loki-config.yaml -verify-config
|
||
```
|
||
|
||
### Promtail не отправляет логи:
|
||
```bash
|
||
# Проверьте логи
|
||
sudo journalctl -u promtail -n 100
|
||
|
||
# Проверьте, что Promtail может читать логи
|
||
sudo -u promtail ls -la /var/log/
|
||
|
||
# Проверьте positions файл
|
||
sudo cat /var/lib/promtail/positions.yaml
|
||
```
|
||
|
||
## 📚 Дополнительные ресурсы
|
||
|
||
- [Официальная документация Loki](https://grafana.com/docs/loki/latest/)
|
||
- [Официальная документация Promtail](https://grafana.com/docs/loki/latest/clients/promtail/)
|
||
- [LogQL синтаксис](https://grafana.com/docs/loki/latest/logql/)
|
||
- [Terraform Proxmox Provider](https://registry.terraform.io/providers/Telmate/proxmox/latest/docs)
|
||
- [Grafana Labs](https://grafana.com/)
|
||
|
||
## 📄 Лицензия
|
||
|
||
Этот проект предоставляется "как есть" для личного и коммерческого использования.
|
||
|
||
## 🤝 Поддержка
|
||
|
||
Если у вас возникли проблемы или вопросы:
|
||
1. Проверьте раздел "Решение проблем"
|
||
2. Изучите логи сервисов
|
||
3. Обратитесь к официальной документации
|
||
|
||
---
|
||
|
||
**Примечание**: Не забудьте защитить ваш `terraform.tfvars` файл и не публикуйте его в публичных репозиториях, так как он содержит конфиденциальные данные (API токены).
|