Controllo e attribuzione dei costi

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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 principale che contribuisce 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 dei servizi gestiti per Prometheus, consulta il Riepilogo dei prezzi di Managed Service per Prometheus.

Visualizzare la fattura

Per visualizzare la fattura 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 attuale del progetto. 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. Dal 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 per Prometheus da un progetto:

Il rapporto 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:

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

Ridurre il numero di serie temporali

La documentazione open source Prometheus consiglia raramente di filtrare il volume delle metriche, il che è ragionevole quando i costi sono vincolati dai 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 metriche. Ad esempio, il servizio kube-state-metrics emette centinaia di metriche, molte delle quali potrebbero essere del tutto 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 per Prometheus. Filtrare queste metriche estranee potrebbe essere sufficiente da solo per riportare la fattura a un livello accettabile.

Per ridurre il numero di metriche, puoi procedere come segue:

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 rientra nella definizione di PodMonitoring o ClusterPodMonitoring. Per la raccolta di cui è stato eseguito il deployment in autonomia, questa regola viene inserita nella configurazione scrape di Prometheus o nella definizione di ServiceMonitor (per l'operatore Prometheus).

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:

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

A volte, può sembrare che un intero esportatore non sia 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 che esporti, puoi eliminare, disattivare o interrompere l' scraping dei monitor dei servizi che non ti servono. Ad esempio, disattivando il monitoraggio del servizio kube-apiserver su un nuovo cluster a tre nodi si riduce il volume del campione di circa 200 campioni al secondo.

Riduci il numero di campioni raccolti

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

  • La modifica di un periodo di campionamento di 10 secondi in un periodo di campionamento di 30 secondi può ridurre il volume del campione del 66%, senza perdita di dati.
  • La modifica di un periodo di campionamento di 10 secondi in 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 Esempi di prezzo basati su campioni importati.

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

Per la raccolta gestita, imposti l'intervallo di scraping nella risorsa PodMonitoring utilizzando il campo interval. Per la raccolta di cui è stato eseguito il deployment autonomamente, puoi impostare l'intervallo di campionamento nelle configurazioni di scraping, in genere impostando un campo interval o scrape_interval.

Configurare l'aggregazione locale (solo raccolta di cui è stato eseguito il deployment autonomo)

Se stai configurando il servizio utilizzando la raccolta self-deployed, ad esempio con kube-prometheus, prometheus-operator o eseguendo il deployment manuale dell'immagine, puoi ridurre gli esempi inviati a Managed Service per Prometheus aggregando localmente le metriche ad alta cardinalità. Puoi utilizzare le regole di registrazione per aggregare le etichette Fuori, ad esempio instance, e utilizzare 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 memorizzati localmente (magari a scopo di avviso). La configurazione potrebbe essere simile alla seguente:

  • Esegui il deployment dell'immagine Managed Service per Prometheus.
  • Configura le configurazioni di scraping per estrarre tutti i dati non elaborati nel server locale (utilizzando quanti meno filtri 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 un numero qualsiasi 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 eliminerà l'etichetta instance e somma le serie temporali risultanti sulle etichette rimanenti:

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

    Per ulteriori opzioni di aggregazione, consulta gli operatori di aggregazione nella documentazione di Prometheus.

  • Esegui il deployment dell'immagine Managed Service per 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"}'
    

    Il flag export.match di questo esempio utilizza selettori separati da virgole con l'operatore != per filtrare i dati non elaborati indesiderati. Se aggiungi ulteriori regole di registrazione per aggregare altre metriche ad alta cardinalità, devi anche aggiungere un nuovo selettore __name__ al filtro in modo che i dati non elaborati vengano eliminati. Utilizzando 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 scraping.

    Alcuni metodi di deployment, come l'operatore di Prometheus, potrebbero richiedere l'omissione di virgolette singole tra parentesi.

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

Non implementare la federazione quando si utilizza Managed Service per Prometheus. Questo flusso di lavoro rende l'utilizzo di server federato obsoleto, poiché un singolo server Prometheus può eseguire tutte le aggregazioni a livello di cluster di cui potresti aver bisogno. La federazione può causare effetti imprevisti, tra cui metriche di tipo "sconosciuto" e volumi di importazione raddoppiati.

Limita gli esempi da metriche ad alta cardinalità (solo raccolta di cui è stato eseguito il deployment autonomamente)

Puoi creare metriche di cardinalità estremamente elevata 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 esempi. L'utilizzo di etichette con un numero elevato di valori in genere è una configurazione errata. Puoi evitare le metriche ad alta cardinalità nei raccoglitori con 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 catturi solo metriche ovviamente configurate in modo errato. Gli esempi 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 un'errata configurazione accidentale. Per ulteriori informazioni, consulta la pagina Utilizzo di sample_limit per evitare il sovraccarico.

Identificare e attribuire i costi

Puoi utilizzare Cloud Monitoring per identificare le metriche di Prometheus che scrivono il maggior numero di esempi. Queste metriche contribuiscono maggiormente ai costi. Dopo aver identificato le metriche più costose, puoi modificare le configurazioni di scraping per filtrare correttamente queste metriche.

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

Identifica le metriche con volumi elevati

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 Monitoring.

    Vai a Monitoring

  2. Nel riquadro di navigazione di Monitoring, fai clic su Metrics Explorer.
  3. Seleziona la scheda Configuration (Configurazione) e utilizza le seguenti informazioni per completare i campi:
    1. Nel campo Risorsa e metrica, inserisci o seleziona Attribuzione dell'importazione della metrica e Esempi scritti dall'ID attribuzione.
    2. Nel campo Raggruppa per, seleziona metric_type e attribution_dimension.
    3. In Filtri, seleziona attribution_dimension = namespace. Questa operazione deve essere eseguita dopo il raggruppamento per Attribution_dimension.
    4. Nel campo Aggregatore, seleziona somma.

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

  4. Per identificare le metriche con i volumi di importazione più grandi, 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 volume elevato

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

  • Per mettere in relazione il volume complessivo delle importazioni 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
  • Per identificare gli spazi dei nomi responsabili di una specifica metrica di volume elevato:

    1. Identifica il tipo di metrica per il volume più elevato utilizzando uno degli altri esempi per identificare i tipi di metrica a 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 Group by (Raggruppa per), quindi filtra in base a attribution_dimension = namespace:

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

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