Questo documento descrive alcuni problemi che potresti riscontrare durante l'utilizzo di Google Cloud Managed Service per Prometheus e fornisce informazioni sulla diagnosi e sulla risoluzione dei problemi.
Hai configurato Managed Service per Prometheus, ma non visualizzi alcun dato metrico in Grafana o nell'interfaccia utente di Prometheus. In linea generale, la causa potrebbe essere una delle seguenti:
Un problema relativo alla query, che impedisce la lettura dei dati. I problemi lato query sono spesso causati da autorizzazioni errate sul account di servizio che legge i dati o da una configurazione errata di Grafana.
Un problema relativo all'importazione, per cui non vengono inviati dati. I problemi relativi all'importazione possono essere causati da problemi di configurazione con account di servizio, collector o valutazione delle regole.
Per determinare se il problema riguarda l'importazione o le query, prova a eseguire query sui dati utilizzando la scheda PromQL di Metrics Explorer nella console Google Cloud. È garantito che questa pagina non presenti problemi con le autorizzazioni di lettura o le impostazioni di Grafana.
Per visualizzare questa pagina:
Utilizza il selettore di progetti della console Google Cloud per selezionare il progetto per il quale non visualizzi i dati.
-
Nella console Google Cloud, vai alla pagina leaderboard Esplora metriche:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
Nella barra degli strumenti del riquadro Query Builder, seleziona il pulsante code MQL o code PromQL.
Verifica che PromQL sia selezionato nel pulsante di attivazione/disattivazione Lingua. Il pulsante di attivazione/disattivazione della lingua si trova nella stessa barra degli strumenti che consente di formattare la query.
Inserisci la seguente query nell'editor e poi fai clic su Esegui query:
up
Se esegui una query sulla metrica up
e visualizzi risultati, il problema riguarda la query. Per informazioni su come risolvere questi problemi, consulta
Problemi lato query.
Se esegui una query sulla metrica up
e non visualizzi risultati, il problema riguarda l'importazione. Per informazioni su come risolvere questi problemi, consulta
Problemi relativi all'importazione.
Un firewall può anche causare problemi di importazione e query. Per ulteriori informazioni, consulta Firewall.
La pagina Gestione delle metriche di Cloud Monitoring fornisce informazioni che possono aiutarti a controllare la spesa per le metriche fatturabili senza influire sull'osservabilità. La pagina Gestione delle metriche riporta le seguenti informazioni:
- Volumi di importazione sia per la fatturazione basata su byte che su sample, per i domini delle metriche e per le singole metriche.
- Dati su etichette e cardinalità delle metriche.
- Numero di letture per ogni metrica.
- Utilizzo delle metriche nei criteri di avviso e nelle dashboard personalizzate.
- Tasso di errori di scrittura delle metriche.
Puoi anche utilizzare la pagina Gestione delle metriche per escludere le metriche non necessarie, eliminando il costo di importazione.
Per visualizzare la pagina Gestione delle metriche:
-
Nella console Google Cloud, vai alla pagina
Gestione delle metriche:Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Nella barra degli strumenti, seleziona l'intervallo di tempo. Per impostazione predefinita, la pagina Gestione delle metriche mostra informazioni sulle metriche raccolte nell'ultimo giorno.
Per ulteriori informazioni sulla pagina Gestione delle metriche, consulta Visualizzare e gestire l'utilizzo delle metriche.
Problemi lato query
La causa della maggior parte dei problemi relativi alle query è una delle seguenti:
- Autorizzazioni o credenziali errate per gli account di servizio.
- Configurazione errata di Workload Identity Federation for GKE, se questa funzionalità è abilitata nel cluster. Per ulteriori informazioni, consulta Configurare un account servizio per la federazione delle identità per i carichi di lavoro per GKE.
Per iniziare:
Controlla attentamente la configurazione in base alle istruzioni di configurazione per le query.
Se utilizzi la federazione delle identità per i carichi di lavoro per GKE, verifica che il tuo account servizio disponga delle autorizzazioni corrette nel seguente modo:
-
Nella console Google Cloud, vai alla pagina IAM:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e amministrazione.
Identifica il nome dell'account di servizio nell'elenco delle entità. Verifica che il nome dell'account di servizio sia scritto correttamente. Poi, fai clic su edit Modifica.
Seleziona il campo Ruolo, poi fai clic su Attualmente in uso e cerca il ruolo Visualizzatore monitoraggio. Se l'account di servizio non ha questo ruolo, aggiungilo ora.
-
Se il problema persiste, considera le seguenti possibilità:
Secret con configurazione errata o digitati in modo errato
Se visualizzi una delle seguenti situazioni, è possibile che il segreto sia mancante o digitato erroneamente:
Uno di questi errori "forbidden" in Grafana o nell'interfaccia utente di Prometheus:
- "Avviso: stato di risposta imprevisto durante il recupero dell'ora del server: Forbidden"
- "Avviso: errore durante il recupero dell'elenco delle metriche: stato di risposta imprevisto durante il recupero dei nomi delle metriche: Forbidden"
Un messaggio simile nei log:
"cannot read credentials file: open /gmp/key.json: no such file or directory"
Se utilizzi il sincronizzatore delle origini dati per autenticare e configurare Grafana, prova a procedere nel seguente modo per risolvere questi errori:
Verifica di aver scelto l'endpoint API Grafana, l'UID dell'origine dati Grafana e il token API Grafana corretti. Puoi ispezionare le variabili nel CronJob eseguendo il comando
kubectl describe cronjob datasource-syncer
.Verifica di aver impostato l'ID progetto del sincronizzatore dell'origine dati sullo stesso ambito delle metriche o progetto per cui il tuo account di servizio ha le credenziali.
Verifica che l'account di servizio Grafana abbia il ruolo "Amministratore" e che il token API non sia scaduto.
Verifica che il tuo account di servizio abbia il ruolo Visualizzatore monitoraggio per l'ID progetto scelto.
Verifica che non siano presenti errori nei log per il job di sincronizzazione dell'origine dati eseguendo
kubectl logs job.batch/datasource-syncer-init
. Questo comando deve essere eseguito immediatamente dopo l'applicazione del filedatasource-syncer.yaml
.Se utilizzi la federazione delle identità per i carichi di lavoro per GKE, verifica di non aver digitato erroneamente la chiave o le credenziali dell'account e di averle associate allo spazio dei nomi corretto.
Se utilizzi il proxy dell'interfaccia utente frontend precedente, prova a svolgere quanto segue per risolvere questi errori:
Verifica di aver impostato l'ID progetto dell'interfaccia utente frontend sullo stesso ambito di misurazione o progetto per cui il tuo account di servizio ha le credenziali.
Verifica l'ID progetto specificato per eventuali
--query.project-id
flag.Verifica che il tuo account di servizio abbia il ruolo Visualizzatore monitoraggio per l'ID progetto scelto.
Verifica di aver impostato l'ID progetto corretto durante il deployment dell'interfaccia utente frontend e di non averlo lasciato impostato sulla stringa letterale
PROJECT_ID
.Se utilizzi Workload Identity, verifica di non aver digitato per errore la chiave o le credenziali dell'account e di averle associate allo spazio dei nomi corretto.
Se carichi il tuo secret, assicurati che sia presente:
kubectl get secret gmp-test-sa -o json | jq '.data | keys'
Verifica che il segreto sia montato correttamente:
kubectl get deploy frontend -o json | jq .spec.template.spec.volumes kubectl get deploy frontend -o json | jq .spec.template.spec.containers[].volumeMounts
Assicurati che il secret venga trasmesso correttamente al contenitore:
kubectl get deploy frontend -o json | jq .spec.template.spec.containers[].args
Metodo HTTP errato per Grafana
Se in Grafana viene visualizzato il seguente errore API, significa che Grafana è configurato per inviare una richiesta POST
anziché GET
:
- "{"status":"error","errorType":"bad_data","error":"no match[] parameter provided"}%"
Per risolvere il problema, configura Grafana in modo da utilizzare una richiesta GET
seguendo le istruzioni riportate in Configurare un'origine dati.
Timeout per query di grandi dimensioni o a lunga esecuzione
Se in Grafana viene visualizzato il seguente errore, il timeout della query predefinito è troppo basso:
- "Post "http://frontend.NAMESPACE_NAME.svc:9090/api/v1/query_range": net/http: timeout awaiting response headers"
Il servizio gestito per Prometheus non scade finché una query non supera i 120 secondi, mentre Grafana scade dopo 30 secondi per impostazione predefinita. Per risolvere il problema, aumenta i timeout in Grafana a 120 secondi seguendo le istruzioni riportate in Configurare un'origine dati.
Errori di convalida delle etichette
Se in Grafana visualizzi uno dei seguenti errori, potresti utilizzare un endpoint non supportato:
- "Convalida: le etichette diverse da name non sono ancora supportate"
- "Templating [job]: Error updating options: labels other than name are not supported yet."
Managed Service per Prometheus supporta l'endpoint /api/v1/$label/values
solo per l'etichetta __name__
. Questa limitazione causa l'errore delle query che utilizzano la variabile label_values($label)
in Grafana.
Utilizza invece il modulo label_values($metric, $label)
. Questa query è consigliata perché limita i valori delle etichette restituiti in base alla metrica, impedendo il recupero di valori non correlati ai contenuti della dashboard.
Questa query chiama un endpoint supportato per Prometheus.
Per ulteriori informazioni sugli endpoint supportati, consulta la sezione Compatibilità dell'API.
Quota superata
Se visualizzi il seguente errore, significa che hai superato la quota di lettura per l'API Cloud Monitoring:
- "429: RESOURCE_EXHAUSTED: quota superata per la metrica di quota "Query sulle serie temporali" e per il limite "Query sulle serie temporali al minuto" del servizio 'monitoring.googleapis.com' per il consumatore 'project_number:...'."
Per risolvere il problema, invia una richiesta per aumentare la quota di lettura per l'API Monitoring. Per assistenza, contatta l'assistenza Google Cloud. Per ulteriori informazioni sulle quote, consulta Utilizzo delle quote.
Metriche di più progetti
Se vuoi visualizzare le metriche di più progetti Google Cloud, non devi configurare più sincronizzatori delle origini dati o creare più origini dati in Grafana.
Crea invece un ambito delle metriche di Cloud Monitoring in un progetto Google Cloud, il progetto di definizione dell'ambito, che contiene i progetti da monitorare. Quando configuri l'origine dati Grafana con un progetto di definizione dell'ambito, hai accesso ai dati di tutti i progetti nell'ambito delle metriche. Per ulteriori informazioni, consulta Ambiti di query e metriche.
Nessun tipo di risorsa monitorata specificato
Se viene visualizzato il seguente errore, devi specificare un tipo di risorsa monitorata quando utilizzi PromQL per eseguire query su una metrica di sistema Google Cloud:
- "la metrica è configurata per essere utilizzata con più di un tipo di risorsa monitorata; il selettore di serie deve specificare un'associazione di etichette sul nome della risorsa monitorata"
Puoi specificare un tipo di risorsa monitorata filtrando i dati utilizzando l'etichetta monitored_resource
. Per saperne di più su come identificare e scegliere un tipo di risorsa monitorata valido, consulta Specificare un tipo di risorsa monitorata.
I valori non elaborati di contatori, istogrammi e riepiloghi non corrispondono tra l'interfaccia utente del collector e la console Google Cloud
Potresti notare una differenza tra i valori nell'interfaccia utente Prometheus del collector locale e nella console Google Cloud quando esegui query sul valore non elaborato delle metriche cumulative di Prometheus, inclusi contatori, istogrammi e riepiloghi. Si tratta di un comportamento normale.
Monarch richiede timestamp di inizio, ma Prometheus non ha timestamp di inizio. Managed Service per Prometheus genera i timestamp di inizio omettendo il primo punto importato in qualsiasi serie temporale e convertendolo in un timestamp di inizio. Ai punti successivi viene sottratto il valore del punto iniziale saltato per garantire la correttezza delle tariffe. Ciò causa un deficit persistente nel valore non elaborato di questi punti.
La differenza tra il numero nell'interfaccia utente del collector e il numero nella console Google Cloud è uguale al primo valore registrato nell'interfaccia utente del collector, il che è normale perché il sistema ignora questo valore iniziale e lo sottrae dai punti successivi.
Questo è accettabile perché non è necessario eseguire una query per i valori non elaborati delle metriche cumulative in produzione. Tutte le query utili richiedono una funzione rate()
o simili, nel qual caso la differenza in qualsiasi orizzonte temporale è identica tra le due UI. Le metriche cumulative aumentano sempre, pertanto non puoi impostare un avviso su una query non elaborata perché una serie temporale raggiunge una soglia una sola volta. Tutti gli avvisi e i grafici utili esaminano la variazione o la velocità di variazione del valore.
Il collector memorizza localmente solo circa 10 minuti di dati. Le discrepanze nei valori cumulativi non elaborati potrebbero verificarsi anche a causa di un ripristino dei dati di fabbrica avvenuto prima dell'intervallo di 10 minuti. Per escludere questa possibilità, prova a impostare solo un periodo di tempo di query di 10 minuti quando confronti l'interfaccia utente del collector con la console Google Cloud.
Le discrepanze possono essere causate anche dalla presenza di più thread di lavoro
nella tua applicazione, ciascuno con un endpoint /metrics
.
Se la tua applicazione avvia più thread, devi impostare la libreria client Prometheus in modalità multiprocesso. Per ulteriori informazioni, consulta la documentazione relativa all'utilizzo della modalità multiprocesso nella libreria client Python di Prometheus.
Dati del contatore mancanti o istogrammi non funzionanti
L'indicatore più comune di questo problema è l'assenza di dati o la presenza di lacune nei dati quando esegui una query su una metrica di contatore semplice (ad esempio una query PromQL di metric_name_foo
). Puoi confermare questo problema se i dati vengono visualizzati dopo aver aggiunto una funzione rate
alla query (ad esempio rate(metric_name_foo[5m])
).
Potresti anche notare che i campioni importati sono aumentati notevolmente senza alcuna variazione significativa nel volume di scansione o che vengono create nuove metriche con i suffissi "unknown" o "unknown:counter" in Cloud Monitoring.
Potresti anche notare che le operazioni sull'istogramma, ad esempio la funzione quantile()
, non funzionano come previsto.
Questi problemi si verificano quando una metrica viene raccolta senza un tipo di metrica Prometheus. Poiché Monarch è fortemente tipizzato, Managed Service per Prometheus tiene conto delle metriche non tipizzate aggiungendo il suffisso "unknown" e importandole due volte, una come indicatore e una come contatore. Il motore di query sceglie quindi se eseguire una query sulla metrica del misuratore o del contatore sottostante in base alle funzioni di query utilizzate.
Sebbene questa euristica in genere funzioni abbastanza bene, può causare problemi come risultati insoliti quando esegui una query su una metrica non elaborata "unknown:counter". Inoltre, poiché gli istogrammi sono oggetti con tipi specifici in Monarch, l'importazione delle tre metriche di istogramma obbligatorie come metriche dei singoli contatori impedisce il funzionamento delle funzioni di istogramma. Poiché le metriche di tipo "unknown" vengono importate due volte, la mancata impostazione di un valore TYPE raddoppia i campioni importati.
Ecco alcuni motivi comuni per cui TYPE potrebbe non essere impostato:
- Configurazione accidentale di un gatherer di Managed Service per Prometheus come server di federazione. La federazione non è supportata quando si utilizza Managed Service per Prometheus. Poiché la federazione elimina intenzionalmente le informazioni sul TYPE, l'implementazione della federazione genera metriche di tipo "sconosciuto".
- Utilizzo di Prometheus Remote Write in qualsiasi punto della pipeline di importazione. Questo protocollo elimina intenzionalmente anche le informazioni TYPE.
- Utilizzo di una regola di rinominazione che modifica il nome della metrica. Di conseguenza, la metrica rinominata viene disaccoppiata dalle informazioni TYPE associate al nome della metrica originale.
- L'esportatore non emette un TYPE per ogni metrica.
- Un problema transitorio in cui TYPE viene eliminato al primo avvio del collector.
Per risolvere il problema:
- Interrompi l'utilizzo della federazione con Managed Service per Prometheus. Se vuoi ridurre la cardinalità e i costi "aggregando" i dati prima di inviarli a Monarch, consulta Configurare l'aggregazione locale.
- Interrompi l'utilizzo di Prometheus Remote Write nel percorso della raccolta.
- Verifica che il campo
# TYPE
esista per ogni metrica visitando l'endpoint/metrics
. - Elimina le regole di rinominazione che modificano il nome di una metrica.
- Elimina le metriche in conflitto con il suffisso "unknown" o "unknown:counter" chiamando DeleteMetricDescriptor.
- In alternativa, esegui sempre query sui contatori utilizzando una funzione
rate
o un'altra funzione di elaborazione dei contatori.
I dati di Grafana non vengono mantenuti dopo il riavvio del pod
Se i dati sembrano scomparire da Grafana dopo il riavvio di un pod, ma sono visibili in Cloud Monitoring, significa che stai utilizzando Grafana per eseguire query sull'istanza Prometheus locale anziché su Managed Service per Prometheus.
Per informazioni su come configurare Grafana per utilizzare il servizio gestito come origine dati, consulta Grafana.
Importazione delle dashboard di Grafana
Per informazioni sull'utilizzo e sulla risoluzione dei problemi relativi all'importatore di dashboard, consulta Importare le dashboard di Grafana in Cloud Monitoring.
Per informazioni sui problemi relativi alla conversione dei contenuti della dashboard, consulta il file README
dell'importatore.
Problemi lato importazione
I problemi relativi all'importazione possono essere correlati alla raccolta o alla valutazione delle regole. Inizia esaminando i log degli errori per la raccolta gestita. Puoi eseguire i seguenti comandi:
kubectl logs -f -n gmp-system -lapp.kubernetes.io/part-of=gmp kubectl logs -f -n gmp-system -lapp.kubernetes.io/name=collector -c prometheus
Nei cluster GKE Autopilot, puoi eseguire i seguenti comandi:
kubectl logs -f -n gke-gmp-system -lapp.kubernetes.io/part-of=gmp kubectl logs -f -n gke-gmp-system -lapp.kubernetes.io/name=collector -c prometheus
La funzionalità di stato del target può aiutarti a eseguire il debug del target di scansione. Per ulteriori informazioni, consulta le informazioni sullo stato del target.
Lo stato dell'endpoint non è presente o è troppo vecchio
Se hai attivato la funzionalità di stato del target, ma in una o più risorse PodMonitoring o ClusterPodMonitoring manca il campo o il valore Status.Endpoint Statuses
, potresti riscontrare uno dei seguenti problemi:
- Managed Service per Prometheus non è stato in grado di raggiungere un raccoglitore sullo stesso nodo di uno dei tuoi endpoint.
- Una o più configurazioni di PodMonitoring o ClusterPodMonitoring non hanno prodotto target validi.
Problemi simili possono anche causare un valore del campo Status.Endpoint Statuses.Last Update
Time
precedente a pochi minuti più l'intervallo di scansione.
Per risolvere il problema, inizia controllando che i pod Kubernetes associati
all'endpoint di scansione siano in esecuzione. Se i pod Kubernetes sono in esecuzione, i selettori di etichette corrispondono e puoi accedere manualmente agli endpoint di scansione (in genere visitando l'endpoint /metrics
), quindi controlla se i raccoglitori di Managed Service per Prometheus sono in esecuzione.
La frazione di collezionisti è inferiore a 1
Se hai attivato la funzionalità di stato del target,
ricevi informazioni sullo stato delle tue risorse. Il valore Status.Endpoint Statuses.Collectors Fraction
delle risorse PodMonitoring o ClusterPodMonitoring rappresenta la frazione di collector, espressa da 0
a 1
, che sono raggiungibili. Ad esempio, un valore 0.5
indica che il 50% dei tuoi collezionisti è raggiungibile, mentre un valore 1
indica che il 100% dei tuoi collezionisti è raggiungibile.
Se il campo Collectors Fraction
ha un valore diverso da 1
, significa che uno o più collettivi non sono raggiungibili e le metriche in uno di questi nodi potrebbero non essere sottoposte a scraping. Assicurati che tutti i collector siano in esecuzione e raggiungibili tramite la rete del cluster. Puoi visualizzare lo stato dei pod del raccoglitore con il seguente comando:
kubectl -n gmp-system get pods --selector="app.kubernetes.io/name=collector"
Nei cluster GKE Autopilot, questo comando è leggermente diverso:
kubectl -n gke-gmp-system get pods --selector="app.kubernetes.io/name=collector"
Puoi esaminare i singoli pod di collector (ad esempio, un pod di collector chiamato collector-12345
) con il seguente comando:
kubectl -n gmp-system describe pods/collector-12345
Nei cluster GKE Autopilot, esegui il seguente comando:
kubectl -n gke-gmp-system describe pods/collector-12345
Se i collector non sono in stato di salute, consulta la risoluzione dei problemi relativi ai carichi di lavoro GKE.
Se i collector sono integri, controlla i log dell'operatore. Per controllare i log dell'operatore, esegui prima il seguente comando per trovare il nome del pod dell'operatore:
kubectl -n gmp-system get pods --selector="app.kubernetes.io/name=gmp-collector"
Nei cluster GKE Autopilot, esegui il seguente comando:
kubectl -n gke-gmp-system get pods --selector="app.kubernetes.io/name=gmp-collector"
Quindi, controlla i log dell'operatore (ad esempio, un pod dell'operatore denominato
gmp-operator-12345
) con il seguente comando:
kubectl -n gmp-system logs pods/gmp-operator-12345
Nei cluster GKE Autopilot, esegui il seguente comando:
kubectl -n gke-gmp-system logs pods/gmp-operator-12345
Target non integri
Se hai attivato la funzionalità di stato del target, ma una o più delle tue risorse PodMonitoring o ClusterPodMonitoring hanno il campo Status.Endpoint Statuses.Unhealthy Targets
con un valore diverso da 0, il raccoglitore non può eseguire lo scraping di uno o più dei tuoi target.
Visualizza il campo Sample Groups
, che raggruppa i target in base al messaggio di errore, e individua il campo Last Error
. Il campo Last Error
proviene da Prometheus e indica il motivo per cui non è stato possibile eseguire lo scraping del target. Per risolvere il problema, utilizzando i target di esempio come riferimento, controlla se gli endpoint di scansione sono in esecuzione.
Endpoint di scraping non autorizzato
Se visualizzi uno dei seguenti errori e il target di scansione richiede l'autorizzazione, il tuo collector non è configurato per utilizzare il tipo di autorizzazione corretto o utilizza il payload di autorizzazione errato:
server returned HTTP status 401 Unauthorized
x509: certificate signed by unknown authority
Per risolvere il problema, consulta Configurare un endpoint di scansione autorizzato.
Quota superata
Se visualizzi il seguente errore, significa che hai superato la quota di importazione per l'API Cloud Monitoring:
- "429: quota superata per la metrica di quota "Richieste di importazione delle serie temporali" e per il limite "Richieste di importazione delle serie temporali al minuto" del servizio "monitoring.googleapis.com" per il consumatore "project_number:PROJECT_NUMBER"., rateLimitExceeded"
Questo errore si verifica più comunemente al primo avvio del servizio gestito. La quota predefinita verrà esaurita a 100.000 campioni importati al secondo.
Per risolvere il problema, invia una richiesta per aumentare la quota di importazione per l'API Monitoring. Per assistenza, contatta l'assistenza Google Cloud. Per ulteriori informazioni sulle quote, consulta Utilizzo delle quote.
Autorizzazione mancante nell'account di servizio predefinito del nodo
Se viene visualizzato uno dei seguenti errori, è possibile che al account di servizio predefinito sul node manchino le autorizzazioni:
- "execute query: Error querying Prometheus: client_error: client error: 403"
- "Test di idoneità non riuscito: test HTTP non riuscito con codice di stato: 503"
- "Errore durante la query dell'istanza Prometheus"
La raccolta gestita e lo valutatore delle regole gestite in Managed Service per Prometheus utilizzano entrambi l'account di servizio predefinito sul nodo. Questo account viene creato con tutte le autorizzazioni necessarie, ma a volte i clienti rimuovono manualmente le autorizzazioni di monitoraggio. Questa rimozione causa il fallimento della raccolta e della valutazione delle regole.
Per verificare le autorizzazioni dell'account di servizio, esegui una delle seguenti operazioni:
Identifica il nome del nodo Compute Engine sottostante, quindi esegui il seguente comando:
gcloud compute instances describe NODE_NAME --format="json" | jq .serviceAccounts
Cerca la stringa
https://www.googleapis.com/auth/monitoring
. Se necessario, aggiungi Monitoring come descritto in Account di servizio configurato in modo errato.Vai alla VM di base nel cluster e controlla la configurazione dell'account di servizio del nodo:
-
Nella console Google Cloud, vai alla pagina Cluster Kubernetes:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.
Seleziona Nodi, quindi fai clic sul nome del nodo nella tabella Nodi.
Fai clic su Dettagli.
Fai clic sul link Istanze VM.
Individua il riquadro Gestione di API e identità e fai clic su Mostra dettagli.
Cerca l'API Stackdriver Monitoring con accesso completo.
-
È anche possibile che il sincronizzatore delle origini dati o l'interfaccia utente di Prometheus sia stato configurato per esaminare il progetto sbagliato. Per informazioni su come verificare di eseguire query sull'ambito delle metriche previsto, consulta Modificare il progetto su cui è stata eseguita la query.
Account di servizio configurato in modo errato
Se visualizzi uno dei seguenti messaggi di errore, significa che l'account di servizio utilizzato dal raccoglitore non dispone delle autorizzazioni corrette:
- "code = PermissionDenied desc = Denied permission monitoring.timeSeries.create (or the resource may not exist)"
- "google: could not find default credentials. Per saperne di più, consulta https://developers.google.com/accounts/docs/application-default-credentials ".
Per verificare che il tuo account di servizio disponga delle autorizzazioni corrette, svolgi i seguenti passaggi:
-
Nella console Google Cloud, vai alla pagina IAM:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e amministrazione.
Identifica il nome dell'account di servizio nell'elenco delle entità. Verifica che il nome dell'account di servizio sia scritto correttamente. Poi, fai clic su edit Modifica.
Seleziona il campo Ruolo, poi fai clic su Attualmente in uso e cerca il ruolo Scrittore di metriche di monitoraggio o Editor di monitoraggio. Se l'account di servizio non ha uno di questi ruoli, concedi all'account di servizio il ruolo Scrittore di metriche di monitoraggio (
roles/monitoring.metricWriter
).
Se esegui Kubernetes non GKE, devi trasmettere esplicitamente le credenziali sia al raccoglitore che al valutatore delle regole.
Devi ripetere le credenziali sia nelle sezioni rules
sia in quelle collection
. Per ulteriori informazioni, vedi Fornire le credenziali
esplicitamente (per la raccolta) o Fornire le credenziali
esplicitamente (per le regole).
Gli account di servizio sono spesso limitati a un singolo progetto Google Cloud. L'utilizzo di un account di servizio per scrivere dati sulle metriche per più progetti, ad esempio quando un valutatore delle regole gestite esegue una query su un ambito delle metriche multi-project, può causare questo errore di autorizzazione. Se utilizzi l'account di servizio predefinito, ti consigliamo di configurare un account di servizio dedicato in modo da poter aggiungere in sicurezza l'autorizzazione monitoring.timeSeries.create
per diversi progetti.
Se non puoi concedere questa autorizzazione, puoi utilizzare la ridenominazione delle metriche per rielaborare l'etichetta project_id
con un altro nome. L'ID progetto viene impostato per impostazione predefinita sul progetto Google Cloud in cui è in esecuzione il server Prometheus o l'evaluator delle regole.
Configurazione di scansione non valida
Se visualizzi il seguente errore, significa che PodMonitoring o ClusterPodMonitoring non è formattato correttamente:
- "Si è verificato un errore interno: chiamata al webhook non riuscita "validate.podmonitorings.gmp-operator.gmp-system.monitoring.googleapis.com": Post "https://gmp-operator.gmp-system.svc:443/validate/monitoring.googleapis.com/v1/podmonitorings?timeout=10s": EOF""
Per risolvere il problema, assicurati che la risorsa personalizzata sia formattata correttamente in base alla specifica.
Impossibile analizzare il webhook di ammissione o configurazione del client HTTP non valida
Nelle versioni di Managed Service per Prometheus precedenti alla 0.12, potresti visualizzare un errore simile al seguente, relativo all'iniezione di secret nell'ambito non predefinito:
- "webhook di ammissione "validate.podmonitorings.gmp-operator.gmp-system.monitoring.googleapis.com" ha negato la richiesta: definizione non valida per l'endpoint con indice 0: impossibile interpretare o configurazione del client HTTP Prometheus non valida: deve essere utilizzato lo spazio dei nomi "my-custom-namespace", ricevuto: "default""
Per risolvere il problema, esegui l'upgrade alla versione 0.12 o successive.
Problemi con intervalli di scansione e timeout
Quando utilizzi Managed Service per Prometheus, il timeout dello scraping non può essere superiore all'intervallo di scraping. Per controllare i log per questo problema, esegui il seguente comando:
kubectl -n gmp-system logs ds/collector prometheus
Nei cluster GKE Autopilot, esegui il seguente comando:
kubectl -n gke-gmp-system logs ds/collector prometheus
Cerca questo messaggio:
- "Il timeout della scansione è maggiore dell'intervallo di scansione per la configurazione della scansione con il nome del job "PodMonitoring/gmp-system/example-app/go-metrics""
Per risolvere il problema, imposta il valore dell'intervallo di scansione su un valore uguale o superiore al valore del timeout di scansione.
TYPE mancante nella metrica
Se visualizzi il seguente errore, significa che mancano le informazioni sul tipo della metrica:
- "Nessun metadato trovato per il nome della metrica "{metric_name}""
Per verificare che il problema sia la mancanza di informazioni sul tipo, controlla l'/metrics
output dell'applicazione di esportazione. Se non è presente una riga come la seguente,
le informazioni sul tipo non sono presenti:
# TYPE {metric_name} <type>
Alcune librerie, ad esempio quelle di VictoriaMetrics precedenti alla versione 1.28.0, eliminano intenzionalmente le informazioni sul tipo. Queste librerie non sono supportate da Managed Service per Prometheus.
Collisioni delle serie temporali
Se viene visualizzato uno dei seguenti errori, è possibile che più di un raccoglitore stia tentando di scrivere nella stessa serie temporale:
- "Non è stato possibile scrivere una o più serie temporali: uno o più punti sono stati scritti più di frequente rispetto al periodo di campionamento massimo configurato per la metrica."
- "Non è stato possibile scrivere una o più serie temporali: i punti devono essere scritti in ordine. Uno o più dei punti specificati avevano un'ora di fine precedente rispetto al punto più recente."
Di seguito sono riportate le cause e le soluzioni più comuni:
Utilizzo di coppie ad alta disponibilità. Managed Service per Prometheus non supporta la raccolta tradizionale ad alta disponibilità. L'utilizzo di questa configurazione può creare più collezioni che tentano di scrivere dati nella stessa serie temporale, causando questo errore.
Per risolvere il problema, disattiva i collezionisti duplicati riducendo il numero di repliche a 1 o utilizza il metodo supportato per l'alta disponibilità.
Utilizzo di regole di rinominazione, in particolare quelle che operano su job o istanze. Managed Service per Prometheus identifica parzialmente una serie temporale univoca tramite la combinazione di etichette {
project_id
,location
,cluster
,namespace
,job
,instance
}. L'utilizzo di una regola di rinominazione per rimuovere queste etichette, in particolare le etichettejob
einstance
, può spesso causare collisioni. La riscrittura di queste etichette non è consigliata.Per risolvere il problema, elimina la regola che lo causa. Spesso questo può essere fatto con la regola
metricRelabeling
che utilizza l'azionelabeldrop
. Puoi identificare la regola problematica mettendo in commento tutte le regole di rinominazione e poi reintegrandole una alla volta finché l'errore non si ripresenta.
Una causa meno comune di collisioni delle serie temporali è l'utilizzo di un intervallo di scansione inferiore a 5 secondi. L'intervallo di scansione minimo supportato da Managed Service per Prometheus è di 5 secondi.
Superamento del limite di etichette
Se visualizzi il seguente errore, è possibile che siano state definite troppe etichette per una delle tue metriche:
- "Impossibile scrivere una o più serie temporali: le nuove etichette farebbero sì che la metrica
prometheus.googleapis.com/METRIC_NAME
abbia più di PER_PROJECT_LIMIT etichette".
Questo errore si verifica in genere quando modifichi rapidamente la definizione della metrica in modo che un nome della metrica abbia effettivamente più insiemi indipendenti di chiavi di etichetta durante l'intero ciclo di vita della metrica. Il monitoraggio cloud impone un limite al numero di etichette per ogni metrica. Per ulteriori informazioni, consulta i limiti per le metriche definite dall'utente.
Per risolvere il problema, devi seguire tre passaggi:
Identificare il motivo per cui una determinata metrica ha troppe etichette o etichette che cambiano spesso.
- Puoi utilizzare il widget Explorer API nella pagina
metricDescriptors.list
per chiamare il metodo. Per ulteriori informazioni, consulta Explorer API. Per esempi, consulta Elenca le metriche e i tipi di risorse.
- Puoi utilizzare il widget Explorer API nella pagina
Risolvi la causa del problema, che potrebbe comportare la modifica delle regole di rinominazione di PodMonitoring, la modifica dell'esportatore o la correzione dell'instrumentazione.
Elimina il descrittore della metrica per questa metrica (con conseguente perdita di dati), in modo che possa essere ricreata con un insieme di etichette più piccolo e stabile. Puoi utilizzare il metodo
metricDescriptors.delete
per farlo.
Le cause più comuni del problema sono:
Raccolta di metriche da esportatori o applicazioni che aggiungono etichette dinamiche alle metriche. Ad esempio, cAdvisor auto-implementato con etichette dei contenitori e variabili di ambiente aggiuntive o l'agente DataDog, che inietta annotazioni dinamiche.
Per risolvere il problema, puoi utilizzare una sezione
metricRelabeling
in PodMonitoring per mantenere o eliminare le etichette. Alcune applicazioni e alcuni esportatori consentono anche la configurazione che modifica le metriche esportate. Ad esempio, cAdvisor dispone di una serie di impostazioni di runtime avanzate che possono aggiungere dinamicamente le etichette. Quando utilizzi la raccolta gestita, ti consigliamo di utilizzare la raccolta kubelet automatica integrata.L'utilizzo di regole di rinominazione, in particolare quelle che assegnano i nomi delle etichette in modo dinamico, che può causare un numero inaspettato di etichette.
Per risolvere il problema, elimina la voce della regola che lo causa.
Limiti di frequenza per la creazione e l'aggiornamento di metriche ed etichette
Se visualizzi il seguente errore, significa che hai raggiunto il limite di frequenza al minuto per la creazione di nuove metriche e l'aggiunta di nuove etichette alle metriche esistenti:
- "Richiesta limitata. Hai raggiunto il limite per progetto per le modifiche alla definizione delle metriche o delle etichette al minuto."
In genere, questo limite di frequenza viene raggiunto solo durante la prima integrazione con il servizio gestito per Prometheus, ad esempio quando esegui la migrazione di un deployment Prometheus esistente e maturo per utilizzare la raccolta con deployment automatico. Non si tratta di un limite di frequenza per l'importazione dei punti dati. Questo limite di frequenza si applica solo quando crei metriche mai viste prima o quando aggiungi nuove etichette a quelle esistenti.
Questa quota è fissa, ma eventuali problemi dovrebbero risolversi automaticamente con la creazione di nuove metriche ed etichette fino al limite per minuto.
Limiti al numero di descrittori delle metriche
Se visualizzi il seguente errore, significa che hai raggiunto il limite di quota per il numero di descrittori delle metriche all'interno di un singolo progetto Google Cloud:
- "La quota dei descrittore della metrica è stata esaurita."
Per impostazione predefinita, questo limite è impostato su 25.000. Sebbene questa quota possa essere aumentata su richiesta se le metriche sono ben formattate, è molto più probabile che tu raggiunga questo limite perché importi nel sistema nomi di metriche non formattati correttamente.
Prometheus ha un modello di dati dimensionali in cui informazioni come il nome del cluster o del nome spazio dei nomi devono essere codificate come valore dell'etichetta. Quando invece le informazioni dimensionali sono incorporate nel nome della metrica stessa, il numero di descrittori della metrica aumenta indefinitamente. Inoltre, poiché in questo scenario le etichette non vengono utilizzate correttamente, diventa molto più difficile eseguire query e aggregare i dati in cluster, spazi dei nomi o servizi.
Né Cloud Monitoring né Managed Service per Prometheus supportano le metriche non dimensionali, come quelle formattate per StatsD o Graphite. Sebbene la maggior parte degli esportatori Prometheus sia configurata correttamente, alcuni, come l'esportatore StatsD, l'esportatore Vault o il proxy Envoy fornito con Istio, devono essere configurati esplicitamente per utilizzare le etichette anziché incorporare le informazioni nel nome della metrica. Ecco alcuni esempi di nomi di metriche con formato non corretto:
request_path_____path_to_a_resource____istio_request_duration_milliseconds
envoy_cluster_grpc_method_name_failure
envoy_cluster_clustername_upstream_cx_connect_ms_bucket
vault_rollback_attempt_path_name_1700683024
service__________________________________________latency_bucket
Per confermare il problema:
- Nella console Google Cloud, seleziona il progetto Google Cloud collegato all'errore.
-
Nella console Google Cloud, vai alla pagina
Gestione delle metriche:Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Verifica che la somma delle metriche Attive e Non attive sia superiore a 25.000. Nella maggior parte dei casi, dovresti vedere un numero elevato di metriche non attive.
- Seleziona "Non attivo" nel riquadro Filtri rapidi, scorri l'elenco e cerca schemi.
- Seleziona "Attivo" nel riquadro Filtri rapidi, ordina in ordine decrescente per Volume di campioni fatturabili, scorri l'elenco e cerca schemi.
- Ordina per Volume fatturabile dei campioni in ordine crescente, scorri l'elenco e cerca schemi.
In alternativa, puoi verificare il problema utilizzando Metrics Explorer:
- Nella console Google Cloud, seleziona il progetto Google Cloud collegato all'errore.
-
Nella console Google Cloud, vai alla pagina leaderboard Esplora metriche:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- In Query Builder, seleziona una metrica, quindi deseleziona la casella di controllo "Attivo".
- Digita "prometheus" nella barra di ricerca.
- Cerca eventuali schemi nei nomi delle metriche.
Una volta identificati i pattern che indicano metriche con formato non corretto, puoi attenuare il problema correggendo l'esportatore all'origine ed eliminando i descrittori delle metriche in violazione.
Per evitare che il problema si ripresenti, devi prima configurare l'esportatore pertinente in modo che non emetta più metriche con formato non corretto. Ti consigliamo di consultare la documentazione del tuo esportatore per ricevere assistenza. Puoi verificare di aver risolto il problema visitando manualmente l'endpoint /metrics
e controllando i nomi delle metriche esportate.
Puoi quindi liberare la quota eliminando le metriche con formato non corretto utilizzando il metodo projects.metricDescriptors.delete
. Per eseguire più facilmente l'iterazione dell'elenco delle metriche con formato non corretto, puoi utilizzare uno script Golang. Questo script accetta un'espressione regolare che può identificare le metriche con formato non corretto ed elimina tutti i descrittori delle metriche che corrispondono al pattern. Poiché l'eliminazione delle metriche è irreversibile, consigliamo vivamente di eseguire prima lo script utilizzando la modalità di prova.
Nessun errore e nessuna metrica
Se utilizzi la raccolta gestita, non visualizzi errori, ma i dati non vengono visualizzati in Cloud Monitoring, la causa più probabile è che gli esportatori di metriche o le configurazioni di scansione non siano configurati correttamente. Managed Service per Prometheus non invia dati delle serie temporali a meno che non applichi prima una configurazione di scansione valida.
Per identificare se questa è la causa, prova a eseguire il deployment dell'applicazione di esempio e della risorsa PodMonitoring di esempio. Se ora vedi la metrica up
(potrebbe essere necessario qualche minuto), il problema riguarda la configurazione o l'esportatore dello scraping.
La causa principale potrebbe essere qualsiasi cosa. Ti consigliamo di controllare quanto segue:
PodMonitoring fa riferimento a una porta valida.
Le porte della specifica di deployment dell'esportatore sono denominate correttamente.
I selettori (in genere
app
) corrispondono alle risorse Deployment e PodMonitoring.Puoi visualizzare i dati nell'endpoint e nella porta previsti visitandoli manualmente.
Hai installato la risorsa PodMonitoring nello stesso spazio dei nomi dell'applicazione che vuoi eseguire lo scraping. Non installare risorse o applicazioni personalizzate nello spazio dei nomi
gmp-system
ogke-gmp-system
.I nomi delle metriche e delle etichette corrispondono all'espressione regolare di convalida di Prometheus. Managed Service per Prometheus non supporta i nomi delle etichette che iniziano con il carattere
_
.Non utilizzi un insieme di filtri che causano l'esclusione di tutti i dati. Fai molta attenzione a non avere filtri in conflitto quando utilizzi un filtro
collection
nella risorsaOperatorConfig
.Se viene eseguito al di fuori di Google Cloud,
project
oproject-id
è impostato su un progetto Google Cloud valido elocation
è impostato su una regione Google Cloud valida. Non puoi utilizzareglobal
come valore perlocation
.La metrica deve essere uno dei quattro tipi di metriche Prometheus. Alcune librerie come Kube State Metrics espongono tipi di metriche OpenMetrics come Info, Stateset e GaugeHistogram, ma questi tipi di metriche non sono supportati da Managed Service per Prometheus e vengono ignorati.
Alcune metriche non sono disponibili per i target con breve tempo di esecuzione
Google Cloud Managed Service per Prometheus è stato disegnato e non ci sono errori di configurazione. Tuttavia, alcune metriche mancano.
Determina il deployment che genera le metriche parzialmente mancanti. Se il deployment è un CronJob di Google Kubernetes Engine, determina il tempo di esecuzione tipico del job:
Individua il file yaml di deployment del cron job e trova lo stato, elencato alla fine del file. Lo stato in questo esempio mostra che il job è stato eseguito per un minuto:
status: lastScheduleTime: "2024-04-03T16:20:00Z" lastSuccessfulTime: "2024-04-03T16:21:07Z"
Se il tempo di esecuzione è inferiore a cinque minuti, il job non viene eseguito per un tempo sufficiente per eseguire lo scraping dei dati delle metriche in modo coerente.
Per risolvere la situazione, prova quanto segue:
Configura il job in modo che non esista almeno fino a quando non sono trascorsi almeno cinque minuti dall'avvio.
Configura il job in modo da rilevare se le metriche sono state sottoposte a scraping prima di uscire. Questa funzionalità richiede il supporto della libreria.
Valuta la possibilità di creare una metrica basata su log con valore di distribuzione anziché raccogliere i dati delle metriche. Questo approccio è consigliato quando i dati vengono pubblicati a una frequenza ridotta. Per ulteriori informazioni, consulta Metriche basate su log.
Se il tempo di esecuzione è superiore a cinque minuti o se non è coerente, consulta la sezione Target non validi di questo documento.
Problemi con la raccolta da parte degli esportatori
Se le metriche di un esportatore non vengono importate, controlla quanto segue:
Verifica che l'esportatore funzioni ed esporti le metriche utilizzando il comando
kubectl port-forward
.Ad esempio, per verificare che i pod con il selettore
app.kubernetes.io/name=redis
nello spazio dei nomitest
stiano emettendo metriche all'endpoint/metrics
sulla porta 9121, puoi eseguire il port forwarding come segue:kubectl port-forward "$(kubectl get pods -l app.kubernetes.io/name=redis -n test -o jsonpath='{.items[0].metadata.name}')" 9121
Accedi all'endpoint
localhost:9121/metrics
utilizzando il browser ocurl
in un'altra sessione del terminale per verificare che le metriche siano esposte dall'esportatore per lo scraping.Verifica se riesci a eseguire query sulle metriche nella console Google Cloud, ma non in Grafana. In questo caso, il problema riguarda Grafana, non la raccolta delle metriche.
Verifica che il collector gestito sia in grado di eseguire lo scraping dell'esportatore controllando l'interfaccia web di Prometheus esposta dal collector.
Identifica il collector gestito in esecuzione sullo stesso nodo su cui è in esecuzione l'esportatore. Ad esempio, se il tuo esportatore è in esecuzione su pod nello spazio dei nomi
test
e i pod sono etichettati conapp.kubernetes.io/name=redis
, il seguente comando identifica il collector gestito in esecuzione sullo stesso nodo:kubectl get pods -l app=managed-prometheus-collector --field-selector="spec.nodeName=$(kubectl get pods -l app.kubernetes.io/name=redis -n test -o jsonpath='{.items[0].spec.nodeName}')" -n gmp-system -o jsonpath='{.items[0].metadata.name}'
Configura il port forwarding dalla porta 19090 del raccoglitore gestito:
kubectl port-forward POD_NAME -n gmp-system 19090
Vai all'URL
localhost:19090/targets
per accedere all'interfaccia web. Se l'esportatore è elencato come uno dei target, il tuo raccoglitore gestito sta eseguendo lo scraping dell'esportatore.
Errori di esaurimento della memoria (OOM) del raccoglitore
Se utilizzi la raccolta gestita e riscontri errori di OOM (Out Of Memory) nei tuoi collector, valuta la possibilità di attivare la scalabilità automatica dei pod verticali.
L'operatore presenta errori di esaurimento della memoria (OOM)
Se utilizzi la raccolta gestita e riscontri errori di OutOfMemory (OOM) sul tuo operatore, considera la possibilità di disattivare la funzionalità di stato del target. La funzionalità di stato del target può causare problemi di rendimento dell'operatore in cluster più grandi.
Firewall
Un firewall può causare problemi di importazione e query. Il firewall deve essere configurato per consentire sia le richieste POST
sia quelle GET
al servizio API Monitoring monitoring.googleapis.com
per consentire l'importazione e le query.
Errore relativo alle modifiche simultanee
Il messaggio di errore "Troppe modifiche simultanee alla configurazione del progetto" è in genere transitorio e si risolve dopo alcuni minuti. In genere è causato dalla rimozione di una regola di rinominazione che interessa molte metriche diverse. La rimozione provoca la formazione di una coda di aggiornamenti ai descrittori delle metriche nel progetto. L'errore scompare quando la coda viene elaborata.
Per ulteriori informazioni, consulta Limiti per la creazione e l'aggiornamento di metriche e etichette.
Query bloccate e annullate da Monarch
Se viene visualizzato il seguente errore, significa che hai raggiunto il limite interno per il numero di query simultanee che possono essere eseguite per un determinato progetto:
- "internal: expanding series: generic::aborted: invalid status monarch::220: Cancelled due to the number of queries whose evaluation is blocked waiting for memory is 501, which is equal to or greater than the limit of 500."
Per proteggerti da comportamenti illeciti, il sistema applica un limite rigido al numero di query di un progetto che possono essere eseguite contemporaneamente in Monarch. Con un utilizzo tipico di Prometheus, le query dovrebbero essere rapide e questo limite non dovrebbe mai essere raggiunto.
Potresti raggiungere questo limite se esegui molte query simultanee che vengono eseguite per un tempo più lungo del previsto. Le query che richiedono più di 25 ore di dati sono in genere più lente da eseguire rispetto a quelle che richiedono meno di 25 ore di dati e più lungo è il periodo di tempo preso in considerazione dalla query, più lenta dovrebbe essere la query.
In genere, questo problema viene attivato dall'esecuzione di molte regole con intervalli di tempo lunghi in modo inefficiente. Ad esempio, potresti avere molte regole che vengono eseguite una volta ogni minuto e richiedono una tariffa di 4 settimane. Se l'esecuzione di ciascuna di queste regole richiede molto tempo, potrebbe verificarsi un backup delle query in attesa di esecuzione per il progetto, il che causa la limitazione delle query da parte di Monarch.
Per risolvere il problema, devi aumentare l'intervallo di valutazione delle regole con un periodo di tempo di riferimento lungo in modo che non vengano eseguite ogni minuto. Non è necessario eseguire una query per una frequenza di 4 settimane ogni minuto. In 4 settimane ci sono 40.320 minuti, quindi ogni minuto non fornisce quasi alcun indicatore aggiuntivo (i dati cambieranno al massimo di 1/40.320). L'utilizzo di un intervallo di valutazione di un'ora dovrebbe essere sufficiente per una query che richiede una tariffa di 4 settimane.
Una volta risolto il collo di bottiglia causato da query inefficienti di lunga durata eseguite troppo di frequente, il problema dovrebbe risolversi da solo.
Tipi di valori incompatibili
Se visualizzi il seguente errore durante l'importazione o la query, significa che nelle metriche è presente un'incompatibilità di tipo di valore:
- "Il tipo di valore per la metrica prometheus.googleapis.com/metric_name/gauge deve essere INT64, ma è DOUBLE"
- "Il tipo di valore per la metrica prometheus.googleapis.com/metric_name/gauge deve essere DOUBLE, ma è INT64"
- "Non è stato possibile scrivere una o più serie temporali: il tipo di valore per la metrica prometheus.googleapis.com/target_info/gauge è in conflitto con il tipo di valore esistente (INT64)"
Potresti visualizzare questo errore al momento dell'importazione, in quanto Monarch non supporta la scrittura di dati di tipo DOUBLE nelle metriche di tipo INT64 né la scrittura di dati di tipo INT64 nelle metriche di tipo DOUBLE. Potresti anche visualizzare questo errore quando esegui query utilizzando un ambito delle metriche di più progetti, poiché Monarch non può unire le metriche di tipo DOUBLE in un progetto con le metriche di tipo INT64 in un altro progetto.
Questo errore si verifica solo quando i collezionisti OpenTelemetry generano report sui dati e è più probabile che si verifichi se hai sia OpenTelemetry (che utilizza l'esportatore googlemanagedprometheus
) sia Prometheus che generano report per la stessa metrica, come accade comunemente per la metrica target_info
.
La causa è probabilmente una delle seguenti:
- Stai raccogliendo metriche OTLP e la libreria delle metriche OTLP ha modificato il tipo di valore da DOUBLE a INT64, come è successo con le metriche Java di OpenTelemetry. La nuova versione della libreria delle metriche non è più compatibile con il tipo di valore della metrica creato dalla vecchia versione della libreria delle metriche.
- Stai raccogliendo la metrica
target_info
utilizzando sia Prometheus sia OpenTelemetry. Prometheus raccoglie questa metrica come DOUBLE, mentre OpenTelemetry la raccoglie come INT64. Ora i tuoi collector scrivono due tipi di valori nella stessa metrica nello stesso progetto e solo il collector che ha creato per primo il descrittore della metrica riesce. - Raccogli
target_info
utilizzando OpenTelemetry come INT64 in un progetto etarget_info
utilizzando Prometheus come DOUBLE in un altro progetto. L'aggiunta di entrambe le metriche allo stesso ambito delle metriche e la successiva interrogazione della metrica tramite l'ambito delle metriche causa un'unione non valida tra tipi di valori delle metriche incompatibili.
Questo problema può essere risolto impostando tutti i tipi di valori delle metriche su DOUBLE come segue:
- Riconfigura i tuoi collector OpenTelemetry per forzare tutte le metriche a essere DOUBLE attivando il flag
exporter.googlemanagedprometheus.intToDouble
di feature-gate. - Elimina tutti i descrittori delle metriche INT64 e consenti di rielaborarli come DOUBLE. Puoi utilizzare lo script
delete_metric_descriptors.go
per automatizzare questa operazione.
Se segui questi passaggi, vengono eliminati tutti i dati memorizzati come metrica INT64. Non esiste un'alternativa all'eliminazione delle metriche INT64 che risolva completamente questo problema.