Passa al contenuto principale
Versione: Next

Grafana + Prometheus + Loki su Aruba Cloud

Esegui il deployment di uno stack di osservabilità self-hosted completo — Grafana, Prometheus, Loki e Promtail — su Aruba Cloud tramite Terraform e cloud-init. Le sorgenti dati sono preconfigurate; accedi e inizia subito a costruire dashboard.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

Questo esempio esegue il provisioning di uno stack di osservabilità pronto per la produzione su una singola VM Aruba Cloud con cinque componenti che girano come servizi systemd:

ComponenteRuoloPorta
GrafanaDashboard, alerting e interfaccia di visualizzazione3000 (proxy nginx su 80/443)
PrometheusRaccolta e archiviazione metriche (TSDB)9090 (solo localhost)
Node ExporterMetriche di sistema dell'host (CPU, RAM, disco, rete)9100 (solo localhost)
LokiAggregazione e archiviazione log3100 (solo localhost)
PromtailSpedizioniere log — segue /var/log e invia a Loki—

Prometheus e Loki sono legati a 127.0.0.1 e non sono raggiungibili da internet. Tutto il traffico esterno passa attraverso nginx (porta 80/443) verso Grafana sulla porta 3000.

Al primo accesso, Prometheus e Loki sono già configurati come sorgenti dati Grafana — nessuna configurazione manuale richiesta.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern del nomeDescrizione
arubacloud_projectgrafana-prodContenitore del progetto
arubacloud_vpcgrafana-prod-vpcVirtual Private Cloud
arubacloud_subnetgrafana-prod-subnetSubnet base
arubacloud_securitygroupgrafana-prod-vm-sgSecurity group
arubacloud_securityrulegrafana-prod-vm-sshRegola ingress SSH (CIDR limitato)
arubacloud_securityrulegrafana-prod-vm-httpRegola ingress HTTP
arubacloud_securityrulegrafana-prod-vm-httpsRegola ingress HTTPS
arubacloud_elasticipgrafana-prod-vm-eipIP pubblico della VM
arubacloud_blockstoragegrafana-prod-bootDisco di boot da 80 GB (Performance)
arubacloud_keypairgrafana-prod-keypairChiave pubblica SSH
arubacloud_cloudservergrafana-prod-vmVM CloudServer

Costo mensile stimato​

Prezzi approssimativi per ITBG-Bergamo, fatturazione oraria.

RisorsaSpecificheCosto stimato/mese
VM CloudServerCSO4A8 — 4 vCPU / 8 GB~€36
Disco di boot80 GB Performance~€10
Elastic IP—~€3
Totale~€49/mese

L'utilizzo del disco cresce nel tempo man mano che si accumulano il TSDB di Prometheus e i chunk di Loki. La conservazione predefinita è 30 giorni per Prometheus e 31 giorni (744 h) per Loki. Aumenta vm_disk_size_gb o riduci la conservazione per ambienti ad alto volume.


Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 di ArubaCloud
arubacloud_client_secretClient secret OAuth2 di ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH
grafana_admin_passwordPassword admin Grafana (min 8 caratteri)

Opzionali​

VariabileDefaultDescrizione
app_name"grafana"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta dell'ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO4A8"Flavor del CloudServer
vm_image"LU22-001"Immagine del disco di boot (Ubuntu 22.04 LTS)
vm_disk_size_gb80Dimensione del disco di boot in GB
ssh_cidr"0.0.0.0/0"CIDR per SSH — limita al tuo IP in produzione
domain""Dominio personalizzato per HTTPS — lascia vuoto per usare l'Elastic IP
prometheus_version"3.0.1"Versione del binario Prometheus
loki_version"3.4.2"Versione dei binari Loki + Promtail
node_exporter_version"1.8.2"Versione del binario Node Exporter

Output​

OutputDescrizione
grafana_urlURL dell'interfaccia web di Grafana
vm_public_ipIndirizzo IP pubblico della VM
ssh_commandComando SSH per connettersi alla VM
grafana_admin_passwordPassword admin Grafana (sensibile)

Istruzioni di deployment​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/grafana

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Imposta grafana_admin_password su un valore robusto, insieme alle credenziali e alla chiave SSH.

3. Esegui il deployment​

terraform init
terraform plan
terraform apply

Il bootstrap richiede circa 8–12 minuti (Grafana si installa tramite APT; Prometheus, Loki, Promtail e Node Exporter vengono scaricati come binari).

4. Accedi a Grafana​

terraform output grafana_url

Apri l'URL nel browser e accedi con:

  • Nome utente: admin
  • Password: il valore di grafana_admin_password

5. Esplora i tuoi dati​

  • Vai su Esplora → seleziona la sorgente dati Prometheus → interroga node_cpu_seconds_total o node_memory_MemAvailable_bytes per le metriche dell'host.
  • Vai su Esplora → seleziona la sorgente dati Loki → interroga {job="varlogs"} per vedere i log di sistema.

Raccomandazioni di sicurezza​

  1. Limita SSH al tuo IP. Imposta ssh_cidr = "your.ip/32".

  2. Usa un dominio personalizzato con HTTPS. Imposta la variabile domain. Senza TLS, la password Grafana viene trasmessa in chiaro.

  3. Cambia la password admin dopo il primo accesso tramite Profilo → Cambia Password.

  4. Non esporre direttamente Prometheus o Loki. Entrambi i servizi si legano a 127.0.0.1 di default in questo esempio. Non aggiungere mai indirizzi listener 0.0.0.0 senza middleware di autenticazione.


Risoluzione dei problemi​

Grafana mostra "sorgente dati non trovata"​

ssh ubuntu@$(terraform output -raw vm_public_ip)
cat /etc/grafana/provisioning/datasources/observability.yaml
sudo systemctl restart grafana-server

Prometheus non ha target​

# Verifica che la configurazione prometheus sia valida:
promtool check config /etc/prometheus/prometheus.yml

# Visualizza i target Prometheus nell'interfaccia (tramite tunnel SSH):
ssh -L 9090:localhost:9090 ubuntu@$(terraform output -raw vm_public_ip)
# Poi apri http://localhost:9090/targets nel browser

Loki non restituisce log in Grafana​

sudo systemctl status promtail
sudo journalctl -u promtail -n 30
# Verifica che Loki abbia ricevuto dati:
curl -s http://localhost:3100/ready

Riferimenti​