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 >= 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
-
Создайте API Token в Proxmox:
# В Proxmox Web UI: # Datacenter → Permissions → API Tokens → Add # Сохраните Token ID и Secret -
Убедитесь, что у вас есть Ubuntu 22.04 Cloud-Init template:
# Пример создания 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 в директории проекта:
# 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
cd /home/ubuntu/proxmox-loki-terraform
terraform init
Шаг 4: Проверка плана развертывания
terraform plan
Проверьте, что все параметры корректны и соответствуют вашим требованиям.
Шаг 5: Развертывание
terraform apply
Введите yes для подтверждения. Процесс займет 5-10 минут:
- Создание SSH ключей
- Создание VM в Proxmox
- Ожидание запуска cloud-init
- Установка Grafana Loki
- Установка Promtail
Шаг 6: Получение информации о VM
После успешного развертывания вы получите:
# Просмотр всех 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
# Сохраните 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:
# Статус сервиса
sudo systemctl status loki
# Проверка здоровья
curl http://localhost:3100/ready
# Просмотр логов
sudo journalctl -u loki -f
# Проверка метрик
curl http://localhost:3100/metrics
Проверка Promtail:
# Статус сервиса
sudo systemctl status promtail
# Просмотр логов
sudo journalctl -u promtail -f
# Проверка метрик
curl http://localhost:9080/metrics
Проверка сбора логов:
# Проверка, что логи поступают в 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:
- Установите Grafana на этой же VM или отдельной машине
- Добавьте Loki как Data Source:
- URL:
http://<VM_IP>:3100 - Type: Loki
- URL:
- Создайте дашборды для визуализации логов
Быстрая установка Grafana на той же VM:
# Подключитесь к 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
🛠️ Управление инфраструктурой
Изменение конфигурации:
# Внесите изменения в terraform.tfvars или конфигурационные файлы
# Примените изменения:
terraform apply
Удаление VM:
# Удалит VM и все связанные ресурсы
terraform destroy
Пересоздание VM:
# Пометить ресурс для пересоздания
terraform taint proxmox_vm_qemu.loki_vm
terraform apply
📝 Полезные команды LogQL
LogQL - язык запросов для Loki (похож на PromQL):
# Все логи с 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:
limits_config:
retention_period: 744h # Измените на нужное значение
Добавление новых источников логов:
Отредактируйте promtail-config.yaml, добавьте новый job_name:
scrape_configs:
- job_name: my-app
static_configs:
- targets:
- localhost
labels:
job: my-app
__path__: /var/log/my-app/*.log
Изменение ресурсов VM:
В terraform.tfvars:
vm_cores = 8 # Увеличить CPU
vm_memory = 8192 # Увеличить RAM
vm_disk_size = "50G" # Увеличить диск
🐛 Решение проблем
VM не получает IP адрес:
# Проверьте настройки DHCP в сети Proxmox
# Проверьте, что cloud-init работает на VM
Не удается подключиться по SSH:
# Проверьте, что VM запущена в Proxmox
# Проверьте firewall правила
# Убедитесь, что SSH ключ сохранен с правильными правами (chmod 600)
Loki не запускается:
# Проверьте логи
sudo journalctl -u loki -n 100
# Проверьте конфигурацию
sudo /usr/local/bin/loki -config.file=/etc/loki/loki-config.yaml -verify-config
Promtail не отправляет логи:
# Проверьте логи
sudo journalctl -u promtail -n 100
# Проверьте, что Promtail может читать логи
sudo -u promtail ls -la /var/log/
# Проверьте positions файл
sudo cat /var/lib/promtail/positions.yaml
📚 Дополнительные ресурсы
- Официальная документация Loki
- Официальная документация Promtail
- LogQL синтаксис
- Terraform Proxmox Provider
- Grafana Labs
📄 Лицензия
Этот проект предоставляется "как есть" для личного и коммерческого использования.
🤝 Поддержка
Если у вас возникли проблемы или вопросы:
- Проверьте раздел "Решение проблем"
- Изучите логи сервисов
- Обратитесь к официальной документации
Примечание: Не забудьте защитить ваш terraform.tfvars файл и не публикуйте его в публичных репозиториях, так как он содержит конфиденциальные данные (API токены).