Compatibilidade com PromQL

As consultas da PromQL no serviço gerenciado do Google Cloud para o Prometheus são parcialmente avaliadas no back-end do Monarch usando a linguagem de consulta do Monitoring (MQL, na sigla em inglês) e há algumas diferenças conhecidas nos resultados da consulta. Veja neste documento as diferenças.

Além das diferenças listadas neste documento, o PromQL no serviço gerenciado para Prometheus é igual ao PromQL disponível na versão 2.44 do Prometheus.

As funções PromQL adicionadas após a versão 2.44 do Prometheus podem não ser compatíveis.

Como corresponder com nomes de métricas

Só é possível fazer a correspondência exata com nomes de métricas. É necessário incluir uma correspondência exata no nome da métrica na consulta.

Recomendamos as seguintes soluções alternativas para cenários comuns que usam um comparador de expressão regular no marcador __name__:

  • As configurações do adaptador do Prometheus geralmente usam o operador =~ para corresponder a vários nomes de métricas. Para corrigir esse uso, expanda a configuração para usar uma política separada para cada métrica e nomeie cada métrica explicitamente. Isso também impede que você faça o escalonamento automático acidentalmente em métricas inesperadas.
  • As expressões regulares geralmente são usadas para representar graficamente várias métricas não dimensionais no mesmo gráfico. Por exemplo, se você tiver uma métrica como cpu_servicename_usage, poderá usar um curinga para representar todos os serviços juntos. O uso de métricas não dimensionais como essa é uma prática explicitamente ruim no Cloud Monitoring, e essa prática leva a uma performance de consulta extremamente ruim. Para corrigir esse uso, mova toda a dimensionalidade para rótulos de métricas em vez de incorporar dimensões no nome da métrica.
  • A consulta de várias métricas é usada com frequência para saber quais métricas estão disponíveis para consulta. Recomendamos que você use a chamada /labels/__name__/values para descobrir métricas. Também é possível descobrir métricas usando a interface do Cloud Monitoring.
  • A correspondência de várias métricas é útil para saber quantas amostras foram extraídas, ingeridas e cobradas por métrica. O Cloud Monitoring fornece essas informações na página Gerenciamento de métricas. Também é possível acessar essas informações como dados de métrica usando a métrica Samples Ingested ou a métrica Samples Written by Attribution ID.

Inatividade

A inatividade não é compatível com o back-end do Monarch.

Cálculo de irate

Quando a janela de lookback da função irate é menor que o tamanho da etapa, aumentamos a janela para o tamanho da etapa. O Monarch exige essa mudança para garantir que nenhum dos dados de entrada seja completamente ignorado na saída. Essa diferença também se aplica a cálculos rate.

Cálculo de rate e increase

Quando a janela de lookback da função rate é menor que o tamanho da etapa, aumentamos a janela para o tamanho da etapa. O Monarch exige essa mudança para garantir que nenhum dos dados de entrada seja completamente ignorado na saída. Essa diferença também se aplica a cálculos irate.

Há diferenças nos cálculos de interpolação e extrapolação. O Monarch usa um algoritmo de interpolação diferente do Prometheus, e essa diferença pode levar a resultados um pouco diferentes. Por exemplo, as amostras do contador Monarch são armazenadas com um intervalo de tempo em vez do único carimbo de data/hora usado pelo Prometheus. Portanto, as amostras de contador no Monarch podem ser incluídas em um cálculo de taxa, mesmo que o carimbo de data/hora do Prometheus as exclua. Isso normalmente gera resultados de taxa mais precisos, especialmente ao consultar o início ou o fim da série temporal subjacente.

Cálculo de histogram_quantile

Um cálculo histogram_quantile do PromQL em um histograma sem amostras produz um valor NaN. O cálculo da linguagem de consulta interna não produz valor. O ponto no carimbo de data/hora é descartado.

As diferenças de cálculo de taxa também podem afetar a entrada em consultas histogram_quantile.

Funções específicas de tipo em métricas de tipos diferentes

Embora o Prometheus upstream seja do tipo fraco, o Monarch tem uma classificação forte. Isso significa que a execução de funções específicas para um único tipo em uma métrica de tipo diferente (por exemplo, executar rate() em uma métrica do GAUGE ou histogram_quantile() em uma métrica de COUNTER ou sem tipo) não funciona no Serviço gerenciado para Prometheus, mesmo que essas funções funcionem no Prometheus upstream.