Atribuição e controles de custo

O serviço gerenciado do Google Cloud para o Prometheus cobra pelo número de amostras ingeridas no Cloud Monitoring e por solicitações de leitura para a API Monitoring. O número de amostras ingeridas é o principal colaborador do seu custo.

Neste documento, você verá como controlar os custos associados ao processamento de métricas e como identificar fontes de ingestão de alto volume.

Para mais informações sobre os preços do serviço gerenciado para o Prometheus, consulte Resumo do preço do serviço gerenciado para o Prometheus.

Ver sua fatura

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

  1. No console do Google Cloud, abra a página Faturamento.

    Acessar Faturamento

  2. Se você tiver mais de uma conta de faturamento, selecione Ir para a conta de faturamento vinculada para ver a conta do projeto atual. Para localizar outra conta de faturamento, selecione Gerenciar contas de faturamento e escolha a conta que você quer recber os relatórios de uso.

  3. Selecione relatórios

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

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

    • Amostras do Prometheus ingeridas
    • Solicitações da API Monitoring

A captura de tela a seguir mostra o relatório de faturamento do serviço gerenciado para o Prometheus em um projeto:

O relatório de faturamento do serviço gerenciado para o Prometheus mostra o uso atual e
projetado.

Reduzir os custos

Para reduzir os custos associados ao uso do serviço gerenciado para o Prometheus, faça o seguinte:

  • Filtre os dados de métricas gerados para reduzir o número de séries temporais que você envia ao serviço gerenciado.
  • Reduza o número de amostras coletadas alterando o intervalo de extração.
  • Limite o número de amostras de métricas de alta cardinalidade potencialmente configuradas incorretamente.

Reduzir o número de séries temporais

A documentação do Prometheus de código aberto raramente recomenda a filtragem do volume de métricas, o que é razoável quando os custos são limitados pelos custos da máquina. No entanto, o pagar por um provedor de serviços gerenciados com base na unidade, enviar dados ilimitados pode gerar contas desnecessariamente altas.

Os exportadores incluídos no projeto kube-prometheus (o serviço kube-state-metrics em particular) podem emitir muitos dados de métricas. Por exemplo, o serviço kube-state-metrics emite centenas de métricas, muitas delas podem ser completamente sem valor para você como consumidor. Um novo cluster de três nós que usa o projeto kube-prometheus envia aproximadamente 900 amostras por segundo para o serviço gerenciado para o Prometheus. Filtrar essas métricas externas pode ser suficiente para que sua fatura chegue a um nível aceitável.

Para reduzir o número de métricas, faça o seguinte:

Se você estiver usando o serviço kube-state-metrics, é possível adicionar uma regra de reidentificação do Prometheus com uma ação keep. Para a coleta gerenciada, essa regra fica na definição de PodMonitoring ou ClusterPodMonitoring. Para a coleta autoimplantada, essa regra entra na configurações de raspagem de dados do Prometheus ou na definição de ServiceMonitor (para prometheus-operator).

Por exemplo, usar o filtro a seguir em um 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)_.+
    sourceLabels: [__name__]

Às vezes, pode parecer que um exportador inteiro é irrelevante. Por exemplo, por padrão, o pacote kube-prometheus instala os seguintes monitores de serviço, muitos dos quais são desnecessários em um ambiente gerenciado:

  • 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 exportadas, exclua, desative ou interrompa a coleta de monitores de serviço desnecessários. Por exemplo, desativar o monitor de serviço kube-apiserver em um novo cluster de três nós reduz o volume de amostras em aproximadamente 200 amostras por segundo.

Reduzir o número de amostras coletadas

A cobrança do Serviço gerenciado é feita por amostra no Prometheus. Para reduzir o número de amostras ingeridas, aumente o período de amostragem. Exemplo:

  • Alterar 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 muita perda de informações.
  • Alterar 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 contadas e como o período de amostragem afeta o número de amostras, consulte Exemplos de preços com base em amostras ingeridas.

Geralmente, é possível definir o intervalo de extração por job ou por segmentação.

Para a coleção gerenciada, defina o intervalo de extração no recurso PodMonitoring usando o campo interval. Para a coleção autoimplantada, defina o intervalo de amostragem nas configurações de extração, geralmente definindo um campo interval ou scrape_interval.

Configurar agregação local (somente coleção autoimplantada)

Se você estiver configurando o serviço com coleção autoimplantada, por exemplo, com o kube-prometheus, o prometheus-operator ou implantando manualmente a imagem, será possível reduzir amostras enviadas ao serviço gerenciado para o Prometheus agregando localmente métricas de alta cardinalidade. É possível usar regras de gravação para agregar identificadores como instance e usar a sinalização --export.match ou a variável de ambiente EXTRA_ARGS para enviar apenas dados agregados ao Monarch.

Por exemplo, suponha que você tenha três métricas, high_cardinality_metric_1, high_cardinality_metric_2 e low_cardinality_metric. Você 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 brutos armazenados localmente, talvez para fins de alerta. Sua configuração ficaria mais ou menos assim:

  • Implante a imagem do serviço gerenciado para o Prometheus.
  • Defina suas configurações de scrape para coletar todos os dados brutos no servidor local usando a quantidade de filtros que você quiser.
  • Configure as regras de gravação para executar agregações locais por high_cardinality_metric_1 e high_cardinality_metric_2, talvez agregando o rótulo instance ou qualquer número de rótulos de métrica, dependendo do que fornece o melhor redução no número de séries temporais desnecessárias. Execute uma regra como esta, que descarta o rótulo instance e soma a série temporal resultante sobre os rótulos restantes:

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

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

  • Implante a imagem do Serviço gerenciado para o Prometheus com a seguinte sinalização de filtro, que impede que os dados brutos das métricas listadas sejam enviados para o Monarch:

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

    Este exemplo de sinalização export.match usa seletores separados por vírgulas com o operador != para filtrar dados brutos indesejados. Se você adicionar outras regras de gravação para agregar outras métricas de alta cardinalidade, também será necessário adicionar um novo seletor __name__ ao filtro para que os dados brutos sejam descartados. Ao usar uma única sinalização com vários seletores com o operador != para filtrar dados indesejados, só é necessário modificar o filtro ao criar uma nova agregação, em vez de sempre que você modificar ou adicionar uma configuração de scrape.

    Determinados métodos de implantação, como o operador Prometheus, podem exigir que você omita as aspas simples entre colchetes.

Esse fluxo de trabalho pode gerar alguma sobrecarga operacional na criação e no gerenciamento de regras de gravação e sinalizações export.match, mas é provável que você reduza muito o volume ao se concentrar apenas em métricas com cardinalidade excepcionalmente alta. Para informações sobre como identificar quais métricas podem se beneficiar mais da pré-agregação local, consulte Identificar métricas de alto volume.

Não implemente a federação ao usar o serviço gerenciado para o Prometheus. Esse fluxo de trabalho torna o uso de servidores de federação obsoletos, porque um único servidor do Prometheus implantado pode executar quaisquer agregações no nível do cluster necessárias. A federação pode causar efeitos inesperados, como métricas do tipo "desconhecido" e volume de processamento duplicado.

Limitar as amostras de métricas de alta cardinalidade (somente coleção autoimplantada)

É possível criar métricas de cardinalidade extremamente altas adicionando rótulos com um grande número de valores em potencial, como um ID do usuário ou um endereço IP. Essas métricas podem gerar um número muito grande de amostras. Usar rótulos com um grande número de valores normalmente é uma configuração incorreta. É possível proteger contra métricas de alta cardinalidade nos coletores autoimplantados definindo um valor sample_limit nas configurações de extração.

Se você usar esse limite, recomendamos defini-lo como um valor muito alto para que ele capture apenas métricas configuradas incorretamente. Todas as amostras acima do limite são descartadas e pode ser muito difícil diagnosticar problemas causados ao exceder o limite.

Usar um limite de amostra não é uma boa maneira de gerenciar a ingestão de amostra, mas o limite pode protegê-lo contra erros de configuração acidentais. Para mais informações, consulte Como usar sample_limit para evitar sobrecarga.

Identifique e atribua custos

Use o Cloud Monitoring para identificar as métricas do Prometheus que estão gravando o maior número de amostras. Essas métricas estão contribuindo mais para seus custos. Depois de identificar as métricas mais caras, é possível modificar as configurações de verificação para filtrá-las de maneira adequada.

As seções a seguir descrevem maneiras de analisar o número de amostras que você está enviando ao serviço gerenciado para o Prometheus e atribuir alto volume a métricas específicas, namespaces do Kubernetes e regiões do Google Cloud.

Identifique métricas de alto volume

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

  1. No Console do Google Cloud, acesse a página Monitoring.

    Acessar Monitoring

  2. No painel de navegação do Monitoring, clique em Metrics Explorer.
  3. Selecione oConfiguração e, em seguida, use as seguintes informações para preencher os campos:
    1. No campo Recurso e métrica, insira ou selecione Atribuição de ingestão de métrica e Exemplos gravados por ID da atribuição.
    2. No campo Agrupar por, selecione metric_type e attribution_dimension.
    3. Em Filtros, selecione attribution_dimension = namespace. Isso precisa ser feito depois do agrupamento por atribuição_dimension.
    4. No campo Agregador, selecione soma.

    Agora o gráfico mostra os volumes de ingestão de cada tipo de métrica.

  4. Para identificar as métricas com os maiores volumes de ingestão, clique em Valor na legenda do gráfico.

O gráfico resultante, que mostra suas 300 principais métricas por volume classificado por média, se parece com a seguinte captura de tela:

O gráfico configurado mostra o volume de ingestão de cada
métrica.

Identifique namespaces de alto volume

Também é possível usar os tipos de métrica e recurso do exemplo anterior para atribuir o volume de processamento a namespaces específicos do Kubernetes e tomar as ações apropriadas. Exemplo:

  • Para correlacionar o volume de processamento geral com os namespaces, selecione os seguintes rótulos para o campo Agrupar por e filtre por attribution_dimension = namespace:

    • attribution_dimension
    • attribution_id
  • Para correlacionar o volume de métricas individuais com namespaces, selecione os seguintes rótulos para o campo Agrupar por e filtre por attribution_dimension = namespace:

    • attribution_dimension
    • attribution_id
    • metric_type
  • Para identificar os namespaces responsáveis por uma métrica específica de alto volume:

    1. Identifique o tipo de métrica da métrica de alto volume usando um dos outros exemplos para identificar tipos de métricas de alto volume. O tipo de métrica é a string na legenda do gráfico que começa com prometheus.googleapis.com/.
    2. Para restringir os dados do gráfico a um tipo de métrica específico, adicione um filtro ao tipo de métrica no campo Filtros. Exemplo:

      metric_type=prometheus.googleapis.com/container_tasks_state/gauge

    3. Selecione os seguintes rótulos para o campo Agrupar por e filtre por attribution_dimension = namespace:

      • attribution_dimension
      • attribution_id
  • Para ver o processamento por região do Google Cloud, adicione o rótulo location ao campo Agrupar por.

  • Para ver a ingestão por projeto do Cloud, adicione o rótulo resource_container ao campo Agrupar por.