Files

182 lines
5.4 KiB
HCL

resource "proxmox_vm_qemu" "grafana_loki" {
name = var.vm_name
target_node = var.target_node
clone = var.vm_template
cores = var.vm_cores
memory = var.vm_memory
sockets = 1
onboot = true
scsihw = "virtio-scsi-pci"
bootdisk = "scsi0"
boot = "order=scsi0"
agent = 1
network {
model = "virtio"
bridge = var.vm_network_bridge
}
disk {
size = var.vm_disk_size
type = "scsi"
storage = var.vm_storage
storage_type = "lvm"
iothread = 1
discard = "on"
}
ciuser = var.vm_user
ipconfig0 = "ip=dhcp"
lifecycle {
ignore_changes = [ipconfig0]
}
provisioner "remote-exec" {
connection {
type = "ssh"
host = self.default_ipv4_address
user = var.vm_user
private_key = file(var.ssh_private_key_path)
timeout = "5m"
}
inline = [
# Обновление системы и установка необходимых пакетов
"sudo apt-get update",
"sudo apt-get install -y wget curl apt-transport-https software-properties-common unzip",
# Установка Grafana Loki
"wget https://github.com/grafana/loki/releases/download/v${var.loki_version}/loki-linux-amd64.zip -O /tmp/loki.zip",
"unzip /tmp/loki.zip -d /tmp/",
"sudo mv /tmp/loki-linux-amd64 /usr/local/bin/loki",
"sudo chmod +x /usr/local/bin/loki",
# Создание директорий для Loki
"sudo mkdir -p /var/loki/index /var/loki/cache /var/loki/chunks",
"sudo chown -R ${var.vm_user}:${var.vm_user} /var/loki",
# Создание конфигурации Loki
"cat <<'LOKIEOF' | sudo tee /etc/loki-config.yaml",
"auth_enabled: false",
"",
"server:",
" http_listen_port: ${var.loki_port}",
"",
"ingester:",
" lifecycler:",
" ring:",
" kvstore:",
" store: inmemory",
" replication_factor: 1",
" chunk_idle_period: 5m",
" max_chunk_age: 1h",
" chunk_target_size: 1048576",
" max_transfer_retries: 0",
"",
"schema_config:",
" configs:",
" - from: 2020-10-24",
" store: boltdb-shipper",
" object_store: filesystem",
" schema: v11",
" index:",
" prefix: index_",
" period: 24h",
"",
"storage_config:",
" boltdb_shipper:",
" active_index_directory: /var/loki/index",
" cache_location: /var/loki/cache",
" shared_store: filesystem",
" filesystem:",
" directory: /var/loki/chunks",
"",
"limits_config:",
" enforce_metric_name: false",
" reject_old_samples: true",
" reject_old_samples_max_age: 168h",
"LOKIEOF",
# Создание systemd сервиса для Loki
"cat <<'LOKISVCEOF' | sudo tee /etc/systemd/system/loki.service",
"[Unit]",
"Description=Loki Log Aggregation System",
"After=network.target",
"",
"[Service]",
"Type=simple",
"User=${var.vm_user}",
"ExecStart=/usr/local/bin/loki -config.file=/etc/loki-config.yaml",
"Restart=on-failure",
"RestartSec=5s",
"",
"[Install]",
"WantedBy=multi-user.target",
"LOKISVCEOF",
# Запуск Loki
"sudo systemctl daemon-reload",
"sudo systemctl enable loki",
"sudo systemctl start loki",
# Установка Promtail
"wget https://github.com/grafana/loki/releases/download/v${var.loki_version}/promtail-linux-amd64.zip -O /tmp/promtail.zip",
"unzip /tmp/promtail.zip -d /tmp/",
"sudo mv /tmp/promtail-linux-amd64 /usr/local/bin/promtail",
"sudo chmod +x /usr/local/bin/promtail",
# Создание конфигурации Promtail
"cat <<'PROMTAILEOF' | sudo tee /etc/promtail-config.yaml",
"server:",
" http_listen_port: ${var.promtail_port}",
" grpc_listen_port: 0",
"",
"positions:",
" filename: /var/log/promtail-positions.yaml",
"",
"clients:",
" - url: http://localhost:${var.loki_port}/loki/api/v1/push",
"",
"scrape_configs:",
" - job_name: system",
" static_configs:",
" - targets:",
" - localhost",
" labels:",
" job: varlogs",
" __path__: /var/log/*.log",
"PROMTAILEOF",
# Создание systemd сервиса для Promtail
"cat <<'PROMTAILSVCEOF' | sudo tee /etc/systemd/system/promtail.service",
"[Unit]",
"Description=Promtail Log Collector",
"After=network.target loki.service",
"",
"[Service]",
"Type=simple",
"User=${var.vm_user}",
"ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail-config.yaml",
"Restart=on-failure",
"RestartSec=5s",
"",
"[Install]",
"WantedBy=multi-user.target",
"PROMTAILSVCEOF",
# Запуск Promtail
"sudo systemctl daemon-reload",
"sudo systemctl enable promtail",
"sudo systemctl start promtail",
# Проверка статуса сервисов
"echo '=== Loki Status ==='",
"sudo systemctl status loki --no-pager",
"echo '=== Promtail Status ==='",
"sudo systemctl status promtail --no-pager"
]
}
}