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" ] } }