Controllo e attribuzione dei costi

Google Cloud Managed Service per Prometheus addebita il numero di campioni importati in Cloud Monitoring e le richieste di lettura all'API Monitoring. Il numero di campioni importati è il fattore che contribuisce principalmente al costo.

Questo documento descrive come controllare i costi associati all'importazione delle metriche e come identificare le origini dell'importazione di volumi elevati.

Per ulteriori informazioni sui prezzi di Managed Service per Prometheus, consulta Riepilogo dei prezzi di Managed Service per Prometheus.

Visualizza la fattura

Per visualizzare la fattura di Google Cloud:

  1. Nella console Google Cloud, vai alla pagina Fatturazione.

    Vai a Fatturazione

  2. Se disponi di 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 cui vuoi ricevere i report sull'utilizzo.

  3. Nella sezione Gestione dei costi del menu di navigazione Fatturazione, seleziona Report.

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

  5. Dal menu SKU, seleziona le seguenti opzioni:

    • Campioni di Prometheus importati
    • Richieste API Monitoring

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

Il report di fatturazione per Managed Service per Prometheus mostra l'utilizzo attuale e previsto.

Riduci i costi

Per ridurre i costi associati all'utilizzo di Managed Service per Prometheus, puoi fare quanto segue:

  • Riduci il numero di serie temporali inviate al servizio gestito filtrando i dati delle metriche generati.
  • 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.

Riduci il numero di serie temporali

La documentazione open source di Prometheus consiglia raramente di filtrare il volume delle metriche, il che è ragionevole quando i costi sono limitati dai costi delle macchine. Tuttavia, quando paghi a un fornitore di servizi gestiti per unità, l'invio di dati illimitati può causare un aumento inutilmente delle fatture.

Gli esportatori inclusi nel progetto kube-prometheus, il servizio kube-state-metrics in particolare, possono emettere molti dati delle metriche. Ad esempio, il servizio kube-state-metrics emette centinaia di metriche, molte delle quali potrebbero essere completamente prive di valore per te in quanto consumatore. Un cluster a tre nodi aggiornato che utilizza il progetto kube-prometheus invia circa 900 campioni al secondo a Managed Service per Prometheus. Filtrare queste metriche non pertinenti potrebbe essere sufficiente per portare la fattura a un livello accettabile.

Per ridurre il numero di metriche:

Se utilizzi il servizio kube-state-metrics, puoi aggiungere una regola di rietichettatura di Prometheus con un'azione keep. Per la raccolta gestita, questa regola va nella definizione di PodMonitoring o ClusterPodMonitoring. Per la raccolta con deployment autonomo, questa regola va nella configurazione dello scraping di Prometheus o nella definizione di ServiceMonitor (per prometheus-operator).

Ad esempio, l'uso del seguente filtro su un cluster a tre nodi aggiornato riduce il volume del campione di circa 125 campioni al secondo:

  metricRelabeling:
  - action: keep
    regex: kube_(daemonset|deployment|pod|namespace|node|statefulset|persistentvolume|horizontalpodautoscaler)_.+
    sourceLabels: [__name__]

Il filtro precedente utilizza un'espressione regolare per specificare quali metriche mantenere in base al nome della metrica. Ad esempio, vengono mantenute le metriche il cui nome inizia con kube_daemonset_. Puoi anche specificare un'azione pari a drop, che filtra le metriche corrispondenti all'espressione regolare.

A volte, può capitare che un intero esportatore non sia importante. Ad esempio, il pacchetto kube-prometheus installa per impostazione predefinita i seguenti servizi di monitoraggio, molti dei quali non 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 da esportare, puoi eliminare, disabilitare o interrompere lo scraping dei monitor di servizi che non ti servono. Ad esempio, la disabilitazione del monitoraggio del servizio kube-apiserver su un nuovo cluster a tre nodi riduce il volume del campione di circa 200 campioni al secondo.

Riduci il numero di campioni raccolti

Gli addebiti di Managed Service per Prometheus si basano sui singoli campioni. Puoi ridurre il numero di campioni importati aumentando la durata del periodo di campionamento. Ad esempio:

  • Passare da un periodo di campionamento di 10 secondi a un periodo di campionamento di 30 secondi può ridurre il volume del campione del 66%, senza una perdita eccessiva di informazioni.
  • Passare da un periodo di campionamento di 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 basati sui campioni importati.

Solitamente puoi impostare l'intervallo di scraping in base al job o al target.

Per la raccolta gestita, imposta l'intervallo di scrape nella risorsa PodMonitoring utilizzando il campo interval. Per la raccolta con deployment autonomo, puoi impostare l'intervallo di campionamento nelle configurazioni di scraping, in genere impostando un campo interval o scrape_interval.

Configura l'aggregazione locale (solo raccolta con deployment autonomo)

Se configuri il servizio utilizzando la raccolta con deployment autonomo, ad esempio con kube-prometheus, prometheus-operator o eseguendo il deployment manuale dell'immagine, puoi ridurre i campioni inviati a Managed Service per Prometheus aggregando metriche ad alta cardinalità localmente. Puoi utilizzare le regole di registrazione per aggregare le etichette esterne, come instance, e usare il flag --export.match o la variabile di ambiente EXTRA_ARGS per inviare solo dati aggregati a Monarch.

Ad esempio, supponiamo di avere 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 archiviati localmente (ad esempio a scopo di avviso). La configurazione potrebbe avere il seguente aspetto:

  • Esegui il deployment dell'immagine Managed Service per Prometheus.
  • Configura le configurazioni di scraping per eseguire lo scraping di tutti i dati non elaborati sul server locale (utilizzando i filtri desiderati).
  • 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 qualsiasi numero di etichette delle metriche, a seconda di ciò che consente la migliore riduzione del numero di serie temporali non necessarie. Potresti eseguire una regola simile alla seguente, che elimina l'etichetta instance e somma le serie temporali risultanti nelle etichette rimanenti:

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

    Consulta gli operatori di aggregazione nella documentazione di Prometheus per ulteriori opzioni di aggregazione.

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

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

    Questo flag export.match di esempio 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 aggiungere al filtro anche un nuovo selettore __name__ in modo che i dati non elaborati vengano eliminati. Se utilizzi 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 scrape.

    Alcuni metodi di deployment, come prometheus-operator, potrebbero richiedere di omettere le virgolette singole tra parentesi.

Questo flusso di lavoro potrebbe comportare un overhead operativo per la creazione e la gestione di regole di registrazione e flag export.match, ma è probabile che tu possa ridurre notevolmente il volume concentrandoti solo su metriche con cardinalità eccezionalmente alta. Per informazioni su come identificare le metriche che potrebbero trarre vantaggio dalla preaggregazione locale, consulta Identificare le metriche di volumi elevati.

Non implementare la federazione quando si utilizza Managed Service per Prometheus. Questo flusso di lavoro rende obsoleti i server di federazione, poiché un singolo server Prometheus con deployment autonomo può eseguire qualsiasi aggregazione a livello di cluster di cui potresti aver bisogno. La federazione potrebbe causare effetti imprevisti, ad esempio metriche di tipo "sconosciuto" e volume di importazione raddoppiato.

Limita i campioni da metriche ad alta cardinalità (solo raccolta con deployment autonomo)

Puoi creare metriche ad alta cardinalità aggiungendo etichette che hanno un numero elevato di valori potenziali, come un ID utente o un indirizzo IP. Queste metriche possono generare un numero molto elevato di campioni. L'utilizzo di etichette con un numero elevato di valori è in genere un errore di configurazione. Puoi proteggerti dalle metriche ad alta cardinalità nei raccoglitori di cui è stato eseguito il deployment automatico impostando un valore sample_limit nelle configurazioni di scraping.

Se utilizzi questo limite, ti consigliamo di impostarlo su un valore molto alto, in modo che rilevi solo metriche chiaramente configurate in modo errato. Tutti i campioni che superano il limite vengono eliminati e può essere molto difficile diagnosticare i problemi causati dal superamento del limite.

L'utilizzo di un limite di esempio non è un buon modo per gestire l'importazione del campione, ma il limite può proteggerti da errori di configurazione accidentali. Per saperne di più, consulta Utilizzare sample_limit per evitare il sovraccarico.

Identificare e attribuire i costi

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

La pagina Gestione delle metriche di Cloud Monitoring fornisce informazioni che possono aiutarti a controllare l'importo speso per le metriche addebitabili senza influire sull'osservabilità. La pagina Gestione delle metriche riporta le seguenti informazioni:

  • Volumi di importazione per la fatturazione basata su byte e campioni, nei domini delle metriche e per le singole metriche.
  • Dati su etichette e cardinalità delle metriche.
  • Utilizzo delle metriche nei criteri di avviso e nelle dashboard personalizzate.
  • Percentuale di errori di scrittura delle metriche.

Per visualizzare la pagina Gestione delle metriche:

  1. Nel pannello di navigazione della console Google Cloud, seleziona Monitoring, quindi  Gestione delle metriche:

    Vai a Gestione delle metriche

  2. Nella barra degli strumenti, seleziona la finestra temporale. Per impostazione predefinita, la pagina Gestione delle metriche mostra informazioni sulle metriche raccolte il giorno precedente.

Per saperne di più sulla pagina Gestione delle metriche, consulta Visualizzare e gestire l'utilizzo delle metriche.

Le seguenti sezioni descrivono i modi per analizzare il numero di campioni che stai inviando a Managed Service per Prometheus e attribuire volumi elevati a metriche specifiche, spazi dei nomi Kubernetes e regioni di Google Cloud.

Identificare le metriche relative ai volumi elevati

Per identificare le metriche di Prometheus con i volumi di importazione più grandi:

  1. Nel pannello di navigazione della console Google Cloud, seleziona Monitoring, quindi  Gestione delle metriche:

    Vai a Gestione delle metriche

  2. Nel prospetto Campioni fatturabili importati, fai clic su Visualizza grafici.
  3. Individua il grafico Importazione del volume dello spazio dei nomi, quindi fai clic su  Altre opzioni grafico.
  4. Seleziona l'opzione di grafico Visualizza in Metrics Explorer.
  5. Nel riquadro Builder di Metrics Explorer, modifica i campi come segue:
    1. Nel campo Metrica, verifica che siano selezionate le seguenti risorse, e metriche:
      Metric Ingestion Attribution e Samples written by attribution id.
    2. Nel campo Raggruppa per > Etichette, seleziona le seguenti etichette:
      • attribution_dimension
      • metric_type
    3. Nel campo Raggruppa per > Funzione di raggruppamento, seleziona sum.
    4. Per i campi Filtri, utilizza attribution_dimension = namespace. Devi eseguire questa operazione dopo il raggruppamento in base all'etichetta attribution_dimension.

    Il grafico risultante mostra i volumi di importazione per ogni tipo di metrica.

  6. Per visualizzare il volume di importazione per ciascuna metrica, seleziona Entrambe le metriche nel pulsante di attivazione/disattivazione con etichetta Tabella su entrambi. La tabella mostra il volume importato per ogni metrica nella colonna Valore.
  7. Fai clic due volte sull'intestazione della colonna Valore per ordinare le metriche in base al volume di importazione decrescente.

Il grafico risultante, che mostra le principali metriche per volume classificato per media, è simile al seguente screenshot: Il grafico configurato mostra il volume di importazione delle metriche per ogni metrica.

Identifica spazi dei nomi ad alto volume

Per attribuire il volume di importazione a spazi dei nomi Kubernetes specifici:

  1. Nel pannello di navigazione della console Google Cloud, seleziona Monitoring, quindi  Gestione delle metriche:

    Vai a Gestione delle metriche

  2. Nel prospetto Campioni fatturabili importati, fai clic su Visualizza grafici.
  3. Individua il grafico Importazione del volume dello spazio dei nomi, quindi fai clic su  Altre opzioni grafico.
  4. Seleziona l'opzione di grafico Visualizza in Metrics Explorer.
  5. Nel riquadro Builder di Metrics Explorer, modifica i campi come segue:
    1. Nel campo Metrica, verifica che siano selezionate le seguenti risorse, e metriche:
      Metric Ingestion Attribution e Samples written by attribution id.
    2. Configura gli altri parametri di ricerca in modo appropriato:
      • Per correlare il volume di importazione complessivo con gli spazi dei nomi:
        • Nel campo Raggruppa per > Etichette, seleziona le seguenti etichette
          • attribution_dimension
          • attribution_id
        • Nel campo Raggruppa per > Funzione di raggruppamento, seleziona sum.
        • Per i campi Filtri, utilizza attribution_dimension = namespace.
      • Per correlare il volume di importazione delle singole metriche agli spazi dei nomi:
        • Nel campo Raggruppa per > Etichette, seleziona le seguenti etichette:
          • attribution_dimension
          • attribution_id
          • metric_type
        • Nel campo Raggruppa per > Funzione di raggruppamento, seleziona sum.
        • Per i campi Filtri, utilizza attribution_dimension = namespace.
      • Per identificare gli spazi dei nomi responsabili di una specifica metrica ad alto volume:
        1. Identifica il tipo di metrica per la metrica di volume elevato utilizzando uno degli altri esempi per identificare i tipi di metriche di volume elevato. Il tipo di metrica è la stringa nella visualizzazione tabella che inizia con prometheus.googleapis.com/. Per saperne di più, consulta la sezione Identificare le metriche dei volumi elevati.
        2. Limita i dati del grafico al tipo di metrica identificato, aggiungendo un filtro per il tipo di metrica nel campo Filtri. Ad esempio:
          metric_type= prometheus.googleapis.com/container_tasks_state/gauge.
        3. Nel campo Raggruppa per > Etichette, seleziona le seguenti etichette:
          • attribution_dimension
          • attribution_id
        4. Nel campo Raggruppa per > Funzione di raggruppamento, seleziona sum.
        5. Per i campi Filtri, utilizza attribution_dimension = namespace.
      • Per visualizzare l'importazione in base alla regione Google Cloud, aggiungi l'etichetta location al campo Raggruppa per.
      • Per visualizzare l'importazione per progetto Google Cloud, aggiungi l'etichetta resource_container al campo Raggruppa per.