Controlos de custos e atribuição

O serviço gerido da Google Cloud para o Prometheus cobra o número de exemplos carregados no Cloud Monitoring e os pedidos de leitura à API Monitoring. O número de exemplos carregados é o principal fator que contribui para o seu custo.

Este documento descreve como pode controlar os custos associados ao carregamento de métricas e como identificar origens de carregamento de grande volume.

Para mais informações sobre os preços do Managed Service for Prometheus, consulte as secções do Cloud Monitoring na página de preços do Google Cloud Observability.

Veja a sua fatura

Para ver a sua Google Cloud fatura, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Faturação.

    Aceder a Faturação

  2. Se tiver mais do que uma conta de faturação, selecione Aceder à conta de faturação associada para ver a conta de faturação do projeto atual. Para localizar uma conta de faturação diferente, selecione Gerir contas de faturação e escolha a conta para a qual quer receber relatórios de utilização.

  3. Na secção Gestão de custos do menu de navegação de faturação, selecione Relatórios.

  4. No menu Serviços, selecione a opção Cloud Monitoring.

  5. No menu SKUs, selecione as seguintes opções:

    • Prometheus Samples Ingested
    • Monitorização de pedidos da API

A captura de ecrã seguinte mostra o relatório de faturação do Managed Service for Prometheus de um projeto:

O relatório de faturação do Managed Service for Prometheus mostra a utilização atual e
projetada.

Reduza os custos

Para reduzir os custos associados à utilização do Managed Service for Prometheus, pode fazer o seguinte:

  • Reduza o número de séries cronológicas que envia para o serviço gerido filtrando os dados das métricas que gera.
  • Reduza o número de amostras recolhidas alterando o intervalo de obtenção de dados.
  • Limite o número de amostras de métricas de elevada cardinalidade potencialmente configuradas incorretamente.

Reduza o número de séries cronológicas

A documentação do Prometheus de código aberto raramente recomenda filtrar o volume de métricas, o que é razoável quando os custos são limitados pelos custos da máquina. No entanto, quando paga a um fornecedor de serviços geridos por unidade, o envio de dados ilimitados pode gerar faturas desnecessariamente elevadas.

Os exportadores incluídos no projeto kube-prometheus, em particular, o serviço kube-state-metrics, podem emitir muitos dados de métricas. Por exemplo, o serviço kube-state-metrics emite centenas de métricas, muitas das quais podem ser completamente inúteis para si como consumidor. Um cluster de três nós novo que usa o projeto kube-prometheus envia aproximadamente 900 amostras por segundo para o Managed Service for Prometheus. Filtrar estas métricas estranhas pode ser suficiente para reduzir a faturação para um nível aceitável.

Para reduzir o número de métricas, pode fazer o seguinte:

Se estiver a usar o serviço kube-state-metrics, pode adicionar uma regra de reetiquetagem do Prometheus com uma keepação. Para a recolha gerida, esta regra é incluída na definição de PodMonitoring ou ClusterPodMonitoring. Para a recolha implementada automaticamente, esta regra é incluída na configuração de recolha do Prometheus ou na definição de ServiceMonitor (para o prometheus-operator).

Por exemplo, a utilização do seguinte filtro num novo cluster de três nós reduz o volume da amostra em aproximadamente 125 amostras por segundo:

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

O filtro anterior usa uma expressão regular para especificar que métricas manter com base no nome da métrica. Por exemplo, as métricas cujo nome começa por kube_daemonset_ são mantidas. Também pode especificar uma ação de drop, que filtra as métricas que correspondem à expressão regular.

Por vezes, pode considerar que um exportador completo não é importante. Por exemplo, o pacote kube-prometheus instala os seguintes monitores de serviços por predefinição, muitos dos quais são desnecessários num ambiente gerido:

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

Para reduzir o número de métricas que exporta, pode eliminar, desativar ou parar de extrair dados dos monitores de serviços de que não precisa. Por exemplo, desativar o monitor de serviço kube-apiserver num novo cluster de três nós reduz o volume de amostras em aproximadamente 200 amostras por segundo.

Reduza o número de amostras recolhidas

O Managed Service for Prometheus cobra por amostra. Pode reduzir o número de amostras carregadas aumentando a duração do período de amostragem. Por exemplo:

  • A alteração de um período de amostragem de 10 segundos para um período de amostragem de 30 segundos pode reduzir o volume de amostras em 66%, sem grande perda de informações.
  • A alteração de um período de amostragem de 10 segundos para um período de amostragem de 60 segundos pode reduzir o volume da amostra em 83%.

Para informações sobre como as amostras são contabilizadas e como o período de amostragem afeta o número de amostras, consulte o artigo Dados de métricas cobrados por amostras carregadas.

Normalmente, pode definir o intervalo de extração por tarefa ou por alvo.

Para a recolha gerida, define o intervalo de extração no recurso PodMonitoring através do campo interval. Para a recolha implementada automaticamente, define o intervalo de amostragem nas scrape configs, normalmente, definindo um campo interval ou scrape_interval.

Configure a agregação local (apenas para a recolha implementada autonomamente)

Se estiver a configurar o serviço através da recolha implementada automaticamente, por exemplo, com o kube-prometheus, o prometheus-operator ou a implementação manual da imagem, pode reduzir as suas amostras enviadas para o Managed Service for Prometheus agregando métricas de alta cardinalidade localmente. Pode usar regras de gravação para agregar etiquetas como instance e usar a flag --export.match ou a variável de ambiente EXTRA_ARGS para enviar apenas dados agregados para o Monarch.

Por exemplo, suponha que tem três métricas: high_cardinality_metric_1, high_cardinality_metric_2 e low_cardinality_metric. Quer reduzir as amostras enviadas para high_cardinality_metric_1 e eliminar todas as amostras enviadas para high_cardinality_metric_2, mantendo todos os dados não processados armazenados localmente (talvez para fins de alerta). A sua configuração pode ter um aspeto semelhante ao seguinte:

  • Implemente a imagem do Managed Service for Prometheus.
  • Configure as suas configurações de extração para extrair todos os dados não processados para o servidor local (usando o menor número de filtros possível).
  • Configure as regras de gravação para executar agregações locais em high_cardinality_metric_1 e high_cardinality_metric_2, talvez agregando a etiqueta instance ou qualquer número de etiquetas de métricas, consoante o que oferecer a melhor redução no número de séries cronológicas desnecessárias. Pode executar uma regra semelhante à seguinte, que elimina a etiqueta instance e soma os intervalos temporais resultantes nas etiquetas restantes:

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

    Consulte os operadores de agregação na documentação do Prometheus para ver mais opções de agregação.

  • Implemente a imagem do serviço gerido para Prometheus com a seguinte flag de filtro, que impede que os dados não processados das métricas indicadas sejam enviados para o Monarch:

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

    Esta sinalização export.match usa seletores separados por vírgulas com o operador != para filtrar dados não processados indesejados. Se adicionar regras de gravação adicionais para agregar outras métricas de cardinalidade elevada, também tem de adicionar um novo seletor __name__ ao filtro para que os dados não processados sejam rejeitados. Se usar um único indicador que contenha vários seletores com o operador != para filtrar dados indesejados, só tem de modificar o filtro quando criar uma nova agregação, em vez de sempre que modificar ou adicionar uma configuração de extração.

    Determinados métodos de implementação, como o prometheus-operator, podem exigir que omita as aspas simples que envolvem os parênteses retos.

Este fluxo de trabalho pode incorrer em alguns custos operacionais na criação e gestão de regras de registo e flags export.match, mas é provável que possa reduzir significativamente o volume concentrando-se apenas em métricas com uma cardinalidade excecionalmente elevada. Para obter informações sobre como identificar as métricas que podem beneficiar mais da pré-agregação local, consulte o artigo Identifique métricas de volume elevado.

Não implemente a federação quando usar o Managed Service for Prometheus. Este fluxo de trabalho torna obsoleta a utilização de servidores de federação, uma vez que um único servidor Prometheus implementado automaticamente pode realizar todas as agregações ao nível do cluster de que possa precisar. A federação pode causar efeitos inesperados, como métricas do tipo "desconhecido" e um volume de carregamento duplicado.

Limite as amostras de métricas de elevada cardinalidade (apenas recolha implementada automaticamente)

Pode criar métricas de cardinalidade extremamente elevada adicionando etiquetas com um grande número de valores potenciais, como um ID do utilizador ou um endereço IP. Estas métricas podem gerar um número muito elevado de exemplos. A utilização de etiquetas com um grande número de valores é normalmente uma configuração incorreta. Pode proteger-se contra métricas de elevada cardinalidade nos coletores implementados automaticamente definindo um valor sample_limit nas configurações de recolha.

Se usar este limite, recomendamos que o defina para um valor muito elevado, de modo que apenas detete métricas obviamente configuradas incorretamente. Todas as amostras que excedam o limite são ignoradas, e pode ser muito difícil diagnosticar problemas causados pela ultrapassagem do limite.

A utilização de um limite de amostras não é uma boa forma de gerir o carregamento de amostras, mas o limite pode proteger contra uma configuração incorreta acidental. Para mais informações, consulte Usar sample_limit para evitar a sobrecarga.

Identifique e atribua custos

Pode usar o Cloud Monitoring para identificar as métricas do Prometheus que estão a escrever o maior número de amostras. Estas métricas são as que mais contribuem para os seus custos. Depois de identificar as métricas mais caras, pode modificar as configurações de extração para filtrar estas métricas adequadamente.

A página Gestão de métricas do Cloud Monitoring fornece informações que podem ajudar a controlar o valor gasto em métricas faturáveis sem afetar a observabilidade. A página Gestão de métricas apresenta as seguintes informações:

  • Volumes de carregamento para a faturação baseada em bytes e em amostras, em domínios de métricas e para métricas individuais.
  • Dados sobre as etiquetas e a cardinalidade das métricas.
  • Número de leituras para cada métrica.
  • Utilização de métricas em políticas de alerta e painéis de controlo personalizados.
  • Taxa de erros de escrita de métricas.

Também pode usar a página Gestão de métricas para excluir métricas desnecessárias, eliminando o custo da respetiva ingestão.

Para ver a página Gestão de métricas, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Gestão de métricas:

    Aceda a Gestão de métricas

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Na barra de ferramentas, selecione o intervalo de tempo. Por predefinição, a página Gestão de métricas apresenta informações sobre as métricas recolhidas no dia anterior.

Para mais informações sobre a página Gestão de métricas, consulte o artigo Veja e faça a gestão da utilização de métricas.

As secções seguintes descrevem formas de analisar o número de exemplos que está a enviar para o Managed Service for Prometheus e atribuir um volume elevado a métricas específicas, espaços de nomes do Kubernetes e Google Cloud regiões.

Identifique métricas de volume elevado

Para identificar as métricas do Prometheus com os maiores volumes de carregamento, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Gestão de métricas:

    Aceda a Gestão de métricas

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. No cartão de dados Exemplos faturáveis carregados, clique em Ver gráficos.
  3. Localize o gráfico Namespace Volume Ingestion e, de seguida, clique em  Mais opções do gráfico.
  4. Selecione a opção de gráfico Ver no explorador de métricas.
  5. No painel Construtor do Explorador de métricas, modifique os campos da seguinte forma:
    1. No campo Métrica, verifique se o seguinte recurso e métrica estão selecionados:
      Metric Ingestion Attribution e Samples written by attribution id.
    2. No campo Agregação, selecione sum.
    3. No campo por, selecione as seguintes etiquetas:
      • attribution_dimension
      • metric_type
    4. Para o campo Filtro, use attribution_dimension = namespace. Tem de o fazer após a agregação pela etiqueta attribution_dimension.

    O gráfico resultante mostra os volumes de carregamento para cada tipo de métrica.

  6. Para ver o volume de carregamento para cada uma das métricas, no botão de ativação/desativação etiquetado como Gráfico Tabela Ambos, selecione Ambos. A tabela mostra o volume carregado para cada métrica na coluna Valor.
  7. Clique duas vezes no cabeçalho da coluna Valor para ordenar as métricas por volume de carregamento descendente.

O gráfico resultante, que mostra as principais métricas por volume classificadas pela média, tem o seguinte aspeto: O gráfico configurado mostra o volume de carregamento de métricas para cada métrica.

Identifique espaços de nomes de volume elevado

Para atribuir o volume de carregamento a namespaces específicos do Kubernetes, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Gestão de métricas:

    Aceda a Gestão de métricas

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. No cartão de dados Exemplos faturáveis carregados, clique em Ver gráficos.
  3. Localize o gráfico Namespace Volume Ingestion e, de seguida, clique em  Mais opções do gráfico.
  4. Selecione a opção de gráfico Ver no explorador de métricas.
  5. No painel Construtor no Explorador de métricas, modifique os campos da seguinte forma:
    1. No campo Métrica, verifique se o seguinte recurso e e métrica estão selecionados:
      Metric Ingestion Attribution e Samples written by attribution id.
    2. Configure os restantes parâmetros de consulta conforme adequado:
      • Para correlacionar o volume de carregamento geral com os espaços de nomes:
        • No campo Agregação, selecione sum.
        • No campo por, selecione as seguintes etiquetas:
          • attribution_dimension
          • attribution_id
        • Para o campo Filtro, use attribution_dimension = namespace.
      • Para correlacionar o volume de carregamento de métricas individuais com espaços de nomes:
        • No campo Agregação, selecione sum.
        • No campo por, selecione as seguintes etiquetas:
          • attribution_dimension
          • attribution_id
          • metric_type
        • Para o campo Filtro, use attribution_dimension = namespace.
      • Para identificar os espaços de nomes responsáveis por uma métrica de volume elevado específica:
        1. Identifique o tipo de métrica para a métrica de volume elevado usando um dos outros exemplos para identificar os tipos de métricas de volume elevado. O tipo de métrica é a string na vista de tabela que começa com prometheus.googleapis.com/. Para mais informações, consulte Identifique métricas de volume elevado.
        2. Restrinja os dados do gráfico ao tipo de métrica identificado adicionando um filtro para o tipo de métrica no campo Filtro. Por exemplo:
          metric_type= prometheus.googleapis.com/container_tasks_state/gauge.
        3. No campo Agregação, selecione sum.
        4. No campo por, selecione as seguintes etiquetas:
          • attribution_dimension
          • attribution_id
        5. Para o campo Filtro, use attribution_dimension = namespace.
      • Para ver a carregamento por Google Cloud região, adicione a etiqueta location ao campo por.
      • Para ver a carregamento por Google Cloud projeto, adicione a etiqueta resource_container ao campo por.