Controllo e attribuzione dei costi

Per il servizio gestito di Google Cloud per Prometheus viene addebitato il numero di campioni importati in Cloud Monitoring e per le richieste di lettura all'API Monitoring. Il numero di campioni importati è il fattore principale che ha contribuito al costo.

Questo documento descrive come controllare i costi associati all'importazione della metrica e come identificare le origini dell'importazione ad alto volume.

Per ulteriori informazioni sui prezzi di Managed Service for Prometheus, consulta il riepilogo dei servizi di Managed Prometheus.

Visualizza il tuo conto

Per visualizzare la fattura di Google Cloud:

  1. In Google Cloud Console, vai alla pagina Fatturazione.

    Vai a Fatturazione

  2. Se hai più di un account di fatturazione, seleziona Vai all'account di fatturazione collegato per visualizzare l'account di fatturazione del progetto attuale. Per trovare un altro account di fatturazione, seleziona Gestisci account di fatturazione e scegli l'account per il quale vuoi ricevere report sull'utilizzo.

  3. Seleziona Report.

  4. Dal menu Servizi, seleziona l'opzione Stackdriver Monitoring.

  5. Nel menu SKU, seleziona le seguenti opzioni:

    • Campioni di Prometheus importati
    • Monitoraggio delle richieste API

Il seguente screenshot mostra il report di fatturazione per Managed Service for Prometheus di un progetto:

Il rapporto di fatturazione per Managed Service for Prometheus mostra l'utilizzo corrente e previsto.

Riduci i costi

Per ridurre i costi associati all'utilizzo di Managed Service for Prometheus, puoi eseguire queste operazioni:

  • Riduci il numero di serie temporali che invii al servizio gestito filtrando i dati statistici che generi.
  • Riduci il numero di campioni raccolti modificando l'intervallo di scraping.
  • Limita il numero di campioni da metriche ad alta cardinalità potenzialmente configurate in modo errato.

Ridurre il numero di serie temporali

La documentazione open source Prometheus consiglia di filtrare raramente il volume della metrica, il che è ragionevole quando i costi sono associati ai costi delle macchine. Tuttavia, quando paghi un fornitore di servizi gestiti su base unitaria, l'invio di dati illimitati può causare fatture inutilmente alte.

Gli esportatori inclusi nel progetto kube-prometheus, in particolare il servizio kube-state-metrics, possono emettere molti dati di metrica. Ad esempio, il servizio kube-state-metrics emette centinaia di metriche, molte delle quali potrebbero essere completamente prive di valore per i consumatori. Un nuovo cluster a tre nodi che utilizza il progetto kube-prometheus invia circa 900 campioni al secondo a Managed Service for Prometheus. Filtrare queste metriche estranee potrebbe essere sufficiente da solo per riportare la tua fattura a un livello accettabile.

Per ridurre il numero di metriche, puoi:

  • Modifica le configurazioni di scraping per ridurre il numero di destinazioni.
  • Filtra le metriche raccolte come descritto di seguito:

Ad esempio, se utilizzi il servizio kube-state-metrics, potresti iniziare con un filtro keep nella configurazione dello scrape e poi modificarlo. Ad esempio, l'utilizzo del seguente filtro su un nuovo cluster a tre nodi riduce il volume del campione di circa 125 campioni al secondo:

kube_(daemonset|deployment|pod|namespace|node|statefulset).+

A volte, potresti trovare un intero esportatore non importante. Ad esempio, il pacchetto kube-prometheus installa i seguenti monitor di servizi per impostazione predefinita, molti dei quali non sono necessari in un ambiente gestito:

  • alertmanager
  • coredns
  • grafana
  • kube-apiserver
  • kube-controller-manager
  • kube-scheduler
  • kube-state-metrics
  • kubelet
  • node-exporter
  • prometheus
  • prometheus-adapter
  • prometheus-operator

Per ridurre il numero di metriche esportate, puoi eliminare, disattivare o interrompere l'eliminazione dei monitor dei servizi di cui non hai bisogno. Ad esempio, la disattivazione del monitoraggio del servizio kube-apiserver su un nuovo cluster a tre nodi riduce il volume del campione di circa 200 al secondo.

Riduci il numero di campioni raccolti

Gli addebiti di Managed Service per Prometheus vengono calcolati per ogni campione. Puoi ridurre il numero di campioni importati aumentando la durata del periodo di campionamento. Ad esempio:

  • La modifica di un periodo di campionamento da 10 secondi a un periodo di campionamento di 30 secondi può ridurre il volume del campione del 66%, senza grandi perdite di informazioni.
  • La modifica di un periodo di campionamento da 10 secondi a un periodo di campionamento di 60 secondi può ridurre il volume del campione dell'83%.

Per informazioni su come vengono conteggiati i campioni e su come il periodo di campionamento influisce sul numero di campioni, consulta la sezione Esempi di prezzi in base ai campioni importati.

In genere, puoi impostare l'intervallo di scraping in base al lavoro o al target.

Per la raccolta gestita, imposta l'intervallo di scraping nella risorsa PodMonitoring utilizzando il campo interval. Per la raccolta di cui è stato eseguito il deployment automatico, imposti l'intervallo di campionamento nelle configurazioni di scrape, solitamente impostando un campo interval o scrape_interval.

Configurare l'aggregazione locale (solo raccolta autodistribuita)

Se stai configurando il servizio utilizzando la raccolta automatica, ad esempio con kube-prometheus, prometheus-operator o eseguendo manualmente il deployment dell'immagine, puoi ridurre gli esempi inviati a Managed Service for Prometheus aggregando localmente le metriche ad alta cardinalità. Puoi utilizzare le regole di registrazione per aggregare le etichette come instance e utilizzare il flag --export.match per inviare dati aggregati solo a Monarch.

Ad esempio, supponiamo che tu abbia tre metriche, high_cardinality_metric_1, high_cardinality_metric_2 e low_cardinality_metric, Vuoi ridurre i campioni inviati per high_cardinality_metric_1 ed eliminare tutti i campioni inviati per high_cardinality_metric_2, mantenendo tutti i dati non elaborati memorizzati localmente (ad esempio per scopi di avviso). La configurazione potrebbe avere il seguente aspetto:

  • Esegui il deployment dell'immagine Managed Service for Prometheus.
  • Configura le configurazioni di scraping per estrarre tutti i dati non elaborati dal server locale (utilizzando tutti i filtri che vuoi).
  • Configura le regole di registrazione per eseguire aggregazioni locali su high_cardinality_metric_1 e high_cardinality_metric_2, magari aggregando l'etichetta instance o il numero di etichette delle metriche, a seconda di ciò che offre la migliore riduzione del numero di serie temporali non necessarie. Potresti eseguire una regola simile alla seguente, che elimina l'etichetta instance e somma la serie temporale risultante sulle etichette rimanenti:

    record: job:high_cardinality_metric_1:sum
    expr: sum without (instance) (high_cardinality_metric_1)
    

    Consulta la sezione relativa agli operatori di aggregazione nella documentazione di Prometheus per ulteriori opzioni di aggregazione.

  • Esegui il deployment dell'immagine Managed Service for Prometheus con il seguente flag di filtro, che impedisce l'invio a Monarch dei dati non elaborati delle metriche elencate:

    --export.match='{__name__!="high_cardinality_metric_1",__name__!="high_cardinality_metric_2"}'
    

    Questo flag di esempio export.match utilizza selettori separati da virgole con l'operatore != per filtrare i dati non elaborati indesiderati. Se aggiungi altre regole di registrazione per aggregare altre metriche ad alta cardinalità, devi anche aggiungere un nuovo selettore __name__ al filtro per eliminare i dati non elaborati. Se usa un singolo flag contenente più selettori con l'operatore != per filtrare i dati indesiderati, devi modificare il filtro solo quando crei una nuova aggregazione anziché ogni volta che modifichi o aggiungi una configurazione di scraping.

    Alcuni metodi di deployment, come l'operatore del prometheus, potrebbero richiedere di omettere le singole virgolette che circondano le parentesi.

Questo flusso di lavoro potrebbe comportare un sovraccarico operativo nella creazione e nella gestione delle regole di registrazione e dei flag export.match, ma è probabile che tu possa tagliare molto volume concentrandoti solo sulle metriche con una cardinalità eccezionalmente elevata. Per informazioni sull'identificazione delle metriche che potrebbero trarre il massimo vantaggio dalla pre-aggregazione locale, consulta Identificare le metriche con volumi elevati.

Non implementare la federazione quando utilizzi Managed Service for Prometheus. Questo flusso di lavoro rende l'utilizzo di server della federazione obsoleti, poiché un singolo server Prometheus con deployment autonomo può eseguire tutte le aggregazioni a livello di cluster di cui potresti avere bisogno. La federazione può causare effetti imprevisti come metriche metriche tipo "sconosciuto" e "volume di importazione doppio".

Limita campioni da metriche ad alta cardinalità (solo raccolta distribuita automaticamente)

Puoi creare metriche ad altissima cardinalità aggiungendo etichette con un numero elevato di valori potenziali, come un ID utente o un indirizzo IP. Tali metriche possono generare un numero molto elevato di campioni. L'utilizzo di etichette con un gran numero di valori è in genere un errore di configurazione. Puoi proteggerti dalle metriche ad alta cardinalità nei raccoglitori con deployment automatico impostando un valore sample_limit nelle configurazioni dello scrape.

Se utilizzi questo limite, ti consigliamo di impostarlo su un valore molto elevato, in modo che possa rilevare solo metriche ovviamente errate. Tutti i campioni che superano il limite vengono ignorati e può essere molto difficile diagnosticare i problemi a causa del superamento del limite.

L'utilizzo di un limite di esempio non è un buon modo per gestire l'importazione di esempio, ma può proteggerti da una configurazione errata. Per ulteriori informazioni, consulta la sezione Uso di sample_limit per evitare il sovraccarico.

Identificare e attribuire i costi

Puoi utilizzare Cloud Monitoring per identificare le metriche di Prometheus che costituiscono il maggior numero di campioni. Queste metriche contribuiscono maggiormente ai tuoi costi. Dopo aver identificato le metriche più costose, puoi modificare le configurazioni del scrape per filtrarle in modo appropriato.

Le seguenti sezioni descrivono i modi per analizzare il numero di campioni che invii a Managed Service for Prometheus e attribuiscono un volume elevato a metriche specifiche, spazi dei nomi Kubernetes e aree geografiche Google Cloud.

Identifica metriche di volume elevato

Per identificare le metriche di Prometheus con i volumi di importazione più elevati, procedi nel seguente modo:

  1. In Google Cloud Console, vai alla pagina Monitoraggio.

    Vai a Monitoring

  2. Nel riquadro di navigazione di Monitoring, fai clic su Metrics Explorer.
  3. Seleziona la scheda Configurazione, quindi utilizza le seguenti informazioni per completare i campi:
    1. Nel campo Risorsa e metrica, inserisci o seleziona Attribuzione dell'importazione metrica e Campi scritti da ID attribuzione.
    2. Nel campo Raggruppa per, seleziona metric_type e attribution_dimension.
    3. Per Filtri, seleziona attribution_dimension = spazio dei nomi. Questa operazione deve essere eseguita dopo il raggruppamento per Attribution_dimension.
    4. Nel campo Aggregatore, seleziona somma.

    Ora il grafico mostra i volumi di importazione per ogni tipo di metrica.

  4. Per identificare le metriche con i volumi di importazione più ampi, fai clic su Valore nella legenda del grafico.

Il grafico risultante, che mostra le tue 300 principali metriche per volume classificato in base alla media, ha il seguente aspetto:

Il grafico configurato mostra il volume di importazione delle metriche per ogni metrica.

Identificare spazi dei nomi con volumi elevati

Puoi anche utilizzare le metriche e i tipi di risorsa dell'esempio precedente per attribuire il volume di importazione a specifici spazi dei nomi di Kubernetes e poi intraprendere l'azione appropriata. Ad esempio:

  • Per mettere in correlazione il volume di importazione complessivo con gli spazi dei nomi, seleziona le seguenti etichette per il campo Raggruppa per, quindi filtra in base a attribution_dimension = namespace:

    • attribution_dimension
    • attribution_id [id_attribuzione]
  • Per mettere in correlazione il volume di importazione delle singole metriche con gli spazi dei nomi, seleziona le seguenti etichette per il campo Raggruppa per, quindi filtra in base a attribution_dimension = namespace:

    • attribution_dimension
    • attribution_id [id_attribuzione]
    • metric_type [tipo_metrica]
  • Per identificare gli spazi dei nomi responsabili di una specifica metrica di volume elevato:

    1. Identifica il tipo di metrica per i volumi elevati utilizzando uno degli altri esempi per individuare i tipi di metrica con volume elevato. Il tipo di metrica è la stringa nella legenda del grafico che inizia con prometheus.googleapis.com/.
    2. Per limitare i dati del grafico a un tipo di metrica specifico, aggiungi un filtro per il tipo di metrica nel campo Filtri. Ad esempio:

      metric_type=prometheus.googleapis.com/container_tasks_state/gauge

    3. Seleziona le seguenti etichette per il campo Raggruppa per, quindi filtra in base a attribution_dimension = spazio dei nomi:

      • attribution_dimension
      • attribution_id [id_attribuzione]
  • Per visualizzare l'importazione per area geografica Google Cloud, aggiungi l'etichetta location al campo Raggruppa per.

  • Per visualizzare l'importazione per progetto Cloud, aggiungi l'etichetta resource_container al campo Group by.