Percentis e métricas com valores de distribuição

Este documento descreve como compreender os percentis e o modelo de histograma para dados de métricas com um tipo de valor Distribution. Uma métrica de distribuição define intervalos de valores, denominados segmentos, e regista a contagem de valores medidos que se enquadram em cada segmento. As métricas de distribuição não comunicam os valores de medidas individuais. Comunicam um histograma de contagens em contentores. Este tipo de valor é usado pelos serviços quando as medições individuais são demasiado numerosas para recolher, mas as informações estatísticas, como médias ou percentis, sobre essas medições são valiosas.

Quando representa graficamente uma métrica com valor de distribuição num mapa térmico, pode usar uma opção na barra de ferramentas do gráfico para sobrepor os percentis 50, 95 e 99. Para apresentar uma métrica com valor de distribuição num gráfico de linhas, tem de configurar o gráfico para converter o valor de distribuição num valor numérico. Pode fazer esta conversão usando um alinhador que seleciona um percentil.

A secção seguinte desta página usa um exemplo sintético para mostrar como os percentis são determinados. O exemplo mostra que os valores percentis dependem do número de intervalos, da largura dos intervalos, da distribuição das medições e da contagem total de amostras. Os valores percentuais não dependem dos valores medidos reais, porque esses valores não estão disponíveis no histograma.

Exemplo com dados sintéticos

Considere um modelo de agrupamento Exponential com uma escala de 1, um fator de crescimento de 2 e 10 agrupamentos finitos. Este histograma contém 12 intervalos, os 10 intervalos finitos, 1 intervalo que especifica apenas um limite superior e 1 que especifica apenas um limite inferior. Para este exemplo, o contentor finito com o índice n+1 é duas vezes mais largo do que o contentor finito com o índice n.

Os exemplos seguintes mostram que a largura do intervalo determina o erro máximo entre o percentil calculado e as medições. Também mostram que o número de amostras num histograma é importante. Por exemplo, se o número de amostras for inferior a 20, os percentis 95 e 99 estão sempre no mesmo grupo.

Caso 1: o número total de amostras é 1.

Quando existe uma única medição, os três valores percentis diferem, mas apenas mostram o percentil 50, 95 e 99 do mesmo grupo. Não é possível determinar o erro entre a estimativa e as medições reais porque a medição não é conhecida.

Por exemplo, suponha que o histograma de medições é o apresentado na tabela seguinte:

Número do grupo Limite inferior Limite superior Contagem Intervalo de percentil
0 1 0 0
1 1 2 0 0
2 2 4 0 0
3 4 8 0 0
4 8 16 0 0
5 16 32 0 0
6 32 64 0 0
7 64 128 0 0
8 128 256 1 0 - 100
9 256 512 0 0
10 512 1024 0 0
11 1024 0 0

Para calcular o percentil 50, faça o seguinte:

  1. Use as contagens de grupos para determinar o grupo que contém o percentil 50. Neste exemplo, o número do grupo 8 contém o percentil 50.
  2. Calcule a estimativa através da seguinte regra:

    pth percentage = bucket_low +
                    (bucket_up - bucket_low)*(p - p_low)/(p_up - p_low)
    

    Na expressão anterior, p_low e p_up são os limites inferior e superior do intervalo de percentis para o grupo. Da mesma forma, bucket_low e bucket_up são os limites inferior e superior do grupo. Os valores de p_low e p_up dependem da forma como as contagens são distribuídas pelos diferentes grupos.

Por exemplo, o percentil 50 é calculado da seguinte forma:

   50th percentile = 128 + (256-128)*(50-0)/(100-0)
                   = 128 + 128 * 50 / 100
                   = 128 + 64
                   = 192

Para calcular o percentil 95, substitua 50 por 95 na expressão anterior. Para este exemplo em que existe exatamente uma amostra, os percentis são os seguintes:

Percentil Número do grupo Valor
50.º 8 192
95.º 8 249,6
99.º 8 254,7

O erro entre a estimativa e as medições reais pode ser limitado, mas não é possível determiná-lo porque a medição é desconhecida.

Caso 2: o número total de amostras é 10.

Quando existem 10 exemplos, o percentil 50 pode estar num grupo diferente dos percentis 95 e 99. No entanto, não existem medições suficientes para permitir que os percentis 95 e 99 estejam em grupos diferentes.

Por exemplo, suponha que o histograma de medições é o apresentado na tabela seguinte:

Número do grupo Limite inferior Limite superior Contagem Intervalo de percentil
0 1 4 0 - 40
1 1 2 2 40 - 60
2 2 4 1 60 - 70
3 4 8 1 70 - 80
4 8 16 1 80 - 90
5 16 32 0 0
6 32 64 0 0
7 64 128 0 0
8 128 256 1 90 - 100
9 256 512 0 0
10 512 1024 0 0
11 1024 0 0

Pode usar o procedimento descrito anteriormente para calcular os percentis 50, 95 e 99. Por exemplo, o percentil 50, que está no grupo número 1, é calculado da seguinte forma:

50th percentile = 1 + (2-1)*(50-40)/(60-40)
                = 1 + (1 * 10 / 20)
                = 1 + 0.5
                = 1.5

Da mesma forma, o percentil 95 é calculado da seguinte forma:

95th percentile = 128 + (256-128)*(95-90)/(100-90)
                = 128 + 128 * 5 / 10
                = 128 + 64
                = 192

Usando o processo descrito anteriormente, é possível calcular os percentis. Cada linha na tabela seguinte apresenta um percentil, o intervalo correspondente e o valor calculado:

Percentil Número do grupo Valor Erro máximo
50.º 1 1,5 0,5
95.º 8 192 74
99.º 8 243.2 115,2

Neste exemplo e no exemplo anterior, o percentil 95 está no grupo número 8. No entanto, o cálculo do percentil é diferente. A diferença deve-se à forma como as amostras são distribuídas. No primeiro exemplo, todas as amostras estão no mesmo conjunto, enquanto no exemplo mais recente, as amostras estão em conjuntos diferentes.

Exemplo com dados reais

Esta secção contém um exemplo que ilustra como pode determinar o modelo de agrupamento usado por uma métrica específica. Esta secção também ilustra como pode avaliar o potencial erro nos valores percentuais calculados.

Identifique o modelo de depósito

Para determinar os contentores usados para uma métrica num intervalo de tempo específico, chame o método projects.timeSeries/list da API Cloud Monitoring.

Por exemplo, para identificar o modelo de agrupamento de uma métrica, faça o seguinte:

  1. Aceda à página Web projects.timeSeries/list.
  2. No APIs Explorer, introduza o filtro que especifica a métrica, uma hora de início e uma hora de fim.

    Por exemplo, para obter informações sobre a métrica que armazena as latências dos pedidos da API, introduza o seguinte:

    metric.type="serviceruntime.googleapis.com/api/request_latencies"
    resource.type="consumed_api"
    

    Neste exemplo, o campo de filtro especifica um tipo de métrica e um tipo de recurso. Para mais informações sobre estes filtros, consulte o artigo Monitorizar filtros.

  3. Clique em Enter.

Segue-se a resposta da API list para uma métrica com valor de distribuição que está disponível num Google Cloud projeto:

{
  "timeSeries": [
    {
      "metric": {...},
      "resource": {...},
      },
      "metricKind": "DELTA",
      "valueType": "DISTRIBUTION",
      "points": [
        {
          "interval": {
            "startTime": "2020-11-03T15:05:00Z",
            "endTime": "2020-11-03T15:06:00Z"
          },
          "value": {
            "distributionValue": {
              "count": "3",
              "mean": 25.889,
              "bucketOptions": {
                "exponentialBuckets": {
                  "numFiniteBuckets": 66,
                  "growthFactor": 1.4,
                  "scale": 1
                }
              },
              "bucketCounts": [
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "3"
              ]
            }
          }
        },

Na resposta da API, o campo value descreve os dados armazenados na matriz points. Os campos count e mean comunicam que, para o intervalo de tempo especificado, houve 3 medições e o respetivo valor médio foi de 25,889. O campo bucketOptions mostra que o modelo exponencial está configurado para ter 66 grupos, uma escala de 1 e um fator de crescimento de 1, 4.

Para calcular os limites inferior e superior do intervalo com o índice n, use as seguintes regras:

  • Limite inferior (1 ≤ n < N) = escala * (fator de crescimento)(n-1)
  • Limite superior (0 ≤ n < N-1) = escala * (fator de crescimento)n

Nas expressões anteriores, N é o número total de grupos.

Os intervalos desta métrica, juntamente com o ponto médio de cada intervalo, são apresentados na tabela seguinte:

nº contentor Limite inferior Limite superior Ponto intermédio
0 1 Não aplicável
1 1 1,40 1,20
2 1,40 1,96 1,68
9 14,76 20,66 17,71
10 20,66 28,93 24,79
11 28,93 40,50 34,71

Valide os cálculos dos percentis

Agora que a configuração do grupo está definida, pode prever os valores dos percentis 50, 95 e 99 para qualquer conjunto de medições. Por exemplo, se existir uma amostra e estiver no grupo número 10, o valor do percentil 50 é 24,79.

Para obter os valores do 50.º, 95.º e 99.º percentil da métrica, pode usar o método da API projects.timeSeries/list e incluir um período de alinhamento e um alinhador. Neste exemplo, foram selecionadas as seguintes definições:

  • Aligner: ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95 ou ALIGN_PERCENTILE_99
  • Período de alinhamento: 60 s

Para a seleção ALIGN_PERCENTILE_50, cada valor na série cronológica é o 50.º percentil de um grupo:

{
  "timeSeries": [
    {
      "metric": {...},
      "resource": {...},
      "metricKind": "GAUGE",
      "valueType": "DOUBLE",
      "points": [
        {
          "interval": {
            "startTime": "2020-11-03T15:06:36Z",
            "endTime": "2020-11-03T15:06:36Z"
          },
          "value": {
            "doubleValue": 24.793256140799986
          }
        },
        {
          "interval": {
            "startTime": "2020-11-03T15:05:36Z",
            "endTime": "2020-11-03T15:05:36Z"
          },
          "value": {
            "doubleValue": 34.710558597119977
          }
        },
        {
          "interval": {
            "startTime": "2020-11-03T15:04:36Z",
            "endTime": "2020-11-03T15:04:36Z"
          },
          "value": {
            "doubleValue": 24.793256140799986
          }
        }
      ]
    },

Para duas das amostras, o percentil 50 está no grupo 10. Para a outra amostra, está no grupo 11.

A tabela seguinte mostra os resultados da execução do método projects.timeSeries/list com diferentes alinhadores. A primeira linha corresponde ao caso em que o alinhador não é especificado. Quando não especifica um alinhador, são devolvidos o modelo de agrupamento e os valores médios. As três linhas seguintes apresentam os dados devolvidos quando o alinhador está definido como ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95 e ALIGN_PERCENTILE_99:

Estatística Amostra às 15:06 Amostra às 15:05 Amostra às 15:04
média 25,889 33.7435 Não disponível.
Percentil 50 24,79 34,71 24,79
Percentil 95 28,51 39,91 28,51
Percentil 99 28,84 40,37 28,84

Como ilustram os dois exemplos com dados sintéticos, os valores dos percentis dependem da forma como as amostras são distribuídas. Quando todas as amostras estão no grupo de amostras, o percentil 50 é o ponto médio desse grupo. No entanto, quando as amostras estão em diferentes grupos, essa distribuição afeta as estimativas.

Para determinar se o percentil 50 é uma estimativa razoável da média, pode comparar o valor médio com o percentil 50. O valor médio é devolvido com os detalhes do intervalo.

O que se segue?

Para obter informações sobre como visualizar métricas com valor de distribuição, consulte o artigo Acerca das métricas com valor de distribuição.