Google Maps API Monitoring in Grafana
Questa guida spiega come monitorare l'utilizzo delle API di Google Maps tramite Grafana utilizzando Google Cloud Monitoring.
Panoramica Costi Google Mapsβ
Google offre $200 di credito gratuito al mese per le API Maps. Ecco i limiti approssimativi:
| API | Costo | Richieste gratuite (~) |
|---|---|---|
| Maps JavaScript API | $7/1,000 loads | ~28,000/mese |
| Geocoding API | $5/1,000 requests | ~40,000/mese |
| Directions API | $5/1,000 requests | ~40,000/mese |
| Places API | $17/1,000 requests | ~11,000/mese |
Cosa conta come "caricamento" della Maps JavaScript APIβ
- β Conta: Apertura di una pagina con mappa, refresh della pagina
- β Non conta: Pan/zoom, aggiunta marker, aggiornamento posizioni in real-time
Prerequisitiβ
- Accesso a Google Cloud Console con permessi IAM
- Grafana con possibilitΓ di installare plugin
- Un progetto Google Cloud con Maps API abilitate
Step 1: Creare un Service Accountβ
- Vai su Google Cloud Console
- Seleziona il progetto Visla
- Vai su IAM e amministrazione β Account di servizio
- Clicca + Crea account di servizio
- Compila i campi:
- Nome:
grafana-monitoring - ID:
grafana-monitoring - Descrizione:
Service account per Grafana Cloud Monitoring
- Nome:
- Clicca Crea e continua
- Aggiungi il ruolo: Monitoring Viewer (
roles/monitoring.viewer) - Clicca Fine
Step 2: Generare la chiave JSONβ
- Nella lista degli account di servizio, trova
grafana-monitoring - Clicca sui tre puntini β Gestisci chiavi
- Clicca Aggiungi chiave β Crea nuova chiave
- Seleziona JSON e clicca Crea
- Salva il file JSON in un posto sicuro (ti servirΓ per Grafana)
β οΈ IMPORTANTE: Non committare mai questo file nel repository!
Step 3: Installare il Plugin in Grafanaβ
Grafana Cloudβ
Il plugin Γ¨ giΓ disponibile. Vai su Connections β Add new connection β cerca "Google Cloud Monitoring".
Grafana Self-Hostedβ
grafana-cli plugins install grafana-googlecloud-datasource
Poi riavvia Grafana:
sudo systemctl restart grafana-server
Step 4: Configurare il Datasourceβ
- In Grafana, vai su Connections β Data sources
- Clicca Add data source
- Cerca e seleziona Google Cloud Monitoring
- Configura:
- Name:
Google Cloud Monitoring - Authentication Type:
Service Account Key - Service Account Key: Incolla il contenuto del file JSON scaricato
- Name:
- Clicca Save & Test
Step 5: Creare la Dashboardβ
Query per Request Count (Maps JavaScript API)β
Metric: serviceruntime.googleapis.com/api/request_count
Filter:
- resource.type = "consumed_api"
- resource.label.service = "maps-backend.googleapis.com"
Group by: resource.label.method
Aggregation: sum
Alignment: delta
Query per Latenzaβ
Metric: serviceruntime.googleapis.com/api/request_latencies
Filter:
- resource.type = "consumed_api"
- resource.label.service = "maps-backend.googleapis.com"
Aggregation: percentile (99)
Query per Quota Utilizzataβ
Metric: serviceruntime.googleapis.com/quota/allocation/usage
Filter:
- resource.type = "consumer_quota"
- resource.label.service = "maps-backend.googleapis.com"
Dashboard JSON (Esempio)β
Crea una nuova dashboard e importa questo JSON per i pannelli base:
{
"panels": [
{
"title": "πΊοΈ Maps API Requests",
"type": "timeseries",
"datasource": "Google Cloud Monitoring",
"targets": [
{
"metricType": "serviceruntime.googleapis.com/api/request_count",
"filters": ["resource.label.service", "=", "maps-backend.googleapis.com"]
}
]
},
{
"title": "β±οΈ API Latency (p99)",
"type": "gauge",
"datasource": "Google Cloud Monitoring",
"targets": [
{
"metricType": "serviceruntime.googleapis.com/api/request_latencies",
"filters": ["resource.label.service", "=", "maps-backend.googleapis.com"]
}
]
},
{
"title": "π° Estimated Monthly Cost",
"type": "stat",
"description": "Basato su $7/1000 requests per Maps JS API"
}
]
}
Metriche Disponibiliβ
| Metrica | Descrizione |
|---|---|
api/request_count | Numero totale di richieste API |
api/request_latencies | Latenza delle richieste (distribuzione) |
api/error_count | Numero di errori |
quota/allocation/usage | Quota utilizzata |
quota/limit | Limite di quota |
Alert Consigliatiβ
Alert per costi elevatiβ
Crea un alert quando le richieste superano una soglia:
# Esempio: Alert quando superi 20,000 requests/giorno
condition: sum(request_count) > 20000
for: 1h
labels:
severity: warning
annotations:
summary: "Alto utilizzo Google Maps API"
description: "Hai superato 20,000 richieste oggi. Costo stimato: ~$140"
Alert per erroriβ
condition: rate(error_count[5m]) > 10
for: 5m
labels:
severity: critical
annotations:
summary: "Errori Google Maps API"
Stima Costiβ
Per calcolare il costo stimato in Grafana, puoi usare una trasformazione:
# Pannello "Costo Stimato Mensile"
# Formula: (request_count * 7) / 1000 - 200 (credito gratuito)
# Se negativo, il costo Γ¨ $0
Troubleshootingβ
"No data" nei pannelliβ
- Verifica che il Service Account abbia il ruolo
Monitoring Viewer - Controlla che le API Maps siano abilitate nel progetto
- Assicurati che il filtro
resource.label.servicesia corretto
Metriche ritardateβ
Le metriche di Cloud Monitoring hanno un ritardo di ~2-3 minuti. Γ normale.
Errore "Permission denied"β
Il Service Account potrebbe non avere i permessi corretti. Verifica:
gcloud projects get-iam-policy PROJECT_ID \
--filter="bindings.members:grafana-monitoring@PROJECT_ID.iam.gserviceaccount.com"