Percentiles y métricas con valores de distribución

En este documento se describe cómo interpretar los percentiles y el modelo de histograma de los datos de métricas con el tipo de valor Distribution. Una métrica de distribución define intervalos de valores, llamados segmentos, y registra el recuento de los valores medidos que se incluyen en cada segmento. Las métricas de distribución no registran los valores de las medidas individuales, sino un histograma de recuentos en segmentos. Los servicios usan este tipo de valor cuando las mediciones individuales son demasiado numerosas para recogerlas, pero la información estadística sobre esas mediciones (como medias o percentiles) es valiosa.

Cuando representas una métrica con valores de distribución en un mapa de calor, puedes usar una opción de la barra de herramientas del gráfico para superponer los percentiles 50, 95 y 99. Para mostrar una métrica con valores de distribución en un gráfico de líneas, debe configurar el gráfico para que convierta el valor de distribución en un valor numérico. Para hacer esta conversión, puedes usar un alineador que seleccione un percentil.

En la siguiente sección de esta página se usa un ejemplo sintético para mostrar cómo se determinan los percentiles. En el ejemplo se muestra que los valores de percentil dependen del número de contenedores, de la anchura de los contenedores, de la distribución de las mediciones y del recuento total de muestras. Los valores de percentil no dependen de los valores medidos reales, ya que estos no están disponibles en el histograma.

Ejemplo con datos sintéticos

Imagina un modelo de contenedor Exponential con una escala de 1, un factor de crecimiento de 2 y 10 contenedores finitos. Este histograma contiene 12 segmentos: los 10 segmentos finitos, 1 segmento que solo especifica un límite superior y 1 que solo especifica un límite inferior. En este ejemplo, el contenedor finito con el índice n+1 tiene el doble de anchura que el contenedor finito con el índice n.

En los siguientes ejemplos se muestra que la anchura del contenedor determina el error máximo entre el percentil calculado y las mediciones. También muestran que el número de muestras de un histograma es importante. Por ejemplo, si el número de muestras es inferior a 20, los percentiles 95 y 99 siempre estarán en el mismo contenedor.

Caso 1: El número total de muestras es 1.

Cuando hay una sola medición, los tres valores de percentil son diferentes, pero solo muestran los percentiles 50, 95 y 99 del mismo contenedor. No se puede determinar el error entre la estimación y las mediciones reales porque no se conoce la medición.

Por ejemplo, supongamos que el histograma de las mediciones es el que se muestra en la siguiente tabla:

Número de segmento Límite inferior Límite superior Recuento Intervalo de percentiles
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 el percentil 50, siga estos pasos:

  1. Usa los recuentos de los segmentos para determinar el segmento que contiene el percentil 50. En este ejemplo, el contenedor número 8 contiene el percentil 50.
  2. Calcula la estimación con la siguiente regla:

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

    En la expresión anterior, p_low y p_up son los límites inferior y superior del intervalo de percentiles del contenedor. Del mismo modo, bucket_low y bucket_up son los límites inferior y superior del contenedor. Los valores de p_low y p_up dependen de cómo se distribuyan los recuentos entre los diferentes contenedores.

Por ejemplo, el percentil 50 se calcula de la siguiente manera:

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

Para calcular el percentil 95, sustituye 50 por 95 en la expresión anterior. En este ejemplo, en el que hay exactamente una muestra, los percentiles son los siguientes:

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

El error entre la estimación y las mediciones reales se puede acotar, pero no se puede determinar porque no se conoce la medición.

Caso 2: El número total de muestras es 10.

Cuando hay 10 muestras, el percentil 50 puede estar en un contenedor diferente al de los percentiles 95 y 99. Sin embargo, no hay suficientes mediciones para que los percentiles 95 y 99 estén en segmentos diferentes.

Por ejemplo, supongamos que el histograma de las mediciones es el que se muestra en la siguiente tabla:

Número de segmento Límite inferior Límite superior Recuento Intervalo de percentiles
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

Puedes usar el procedimiento descrito anteriormente para calcular los percentiles 50, 95 y 99. Por ejemplo, el percentil 50, que está en el contenedor número 1, se calcula de la siguiente manera:

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

Del mismo modo, el percentil 95 se calcula de la siguiente manera:

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

Siguiendo el proceso descrito anteriormente, se pueden calcular los percentiles. En cada fila de la tabla siguiente se indica un percentil, el contenedor correspondiente y el valor calculado:

Percentil Número de segmento Valor Error máximo
50 1 1,5 0,5
95.º 8 192 74
99 8 243,2 115,2 NZD

En este ejemplo y en el anterior, el percentil 95 se encuentra en el contenedor número 8. Sin embargo, el cálculo del percentil es diferente. La diferencia se debe a cómo se distribuyen las muestras. En el primer ejemplo, todas las muestras están en el mismo contenedor, mientras que, en el ejemplo más reciente, las muestras están en contenedores diferentes.

Ejemplo con datos reales

En esta sección se incluye un ejemplo que muestra cómo puede determinar el modelo de contenedor que usa una métrica concreta. En esta sección también se explica cómo evaluar el posible error de los valores de percentil calculados.

Identificar el modelo de segmento

Para determinar los contenedores que se han usado en una métrica durante un intervalo de tiempo específico, llama al método projects.timeSeries/list de la API Cloud Monitoring.

Por ejemplo, para identificar el modelo de contenedor de una métrica, haga lo siguiente:

  1. Ve a la página web projects.timeSeries/list.
  2. En APIs Explorer, introduce el filtro que especifica la métrica, la hora de inicio y la hora de finalización.

    Por ejemplo, para obtener información sobre la métrica que almacena las latencias de las solicitudes de API, introduce lo siguiente:

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

    En este ejemplo, el campo de filtro especifica un tipo de métrica y un tipo de recurso. Para obtener más información sobre estos filtros, consulta Filtros de monitorización.

  3. Pulsa Intro.

A continuación se muestra la respuesta de la API list de una métrica con valores de distribución que está disponible en un proyecto: Google Cloud

{
  "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"
              ]
            }
          }
        },

En la respuesta de la API, el campo value describe los datos almacenados en la matriz points. Los campos count y mean indican que, en el intervalo de tiempo especificado, se han realizado 3 mediciones y su valor medio ha sido 25,889. El campo bucketOptions muestra que el modelo exponencial está configurado para tener 66 contenedores, una escala de 1 y un factor de crecimiento de 1, 4.

Para calcular los límites inferior y superior del segmento con el índice n, sigue estas reglas:

  • Límite inferior (1 ≤ n < N) = escala * (factor de crecimiento)(n-1)
  • Límite superior (0 ≤ n < N-1) = escala * (factor de crecimiento)n

En las expresiones anteriores, N es el número total de contenedores.

Los contenedores de esta métrica, junto con el punto medio de cada contenedor, se muestran en la siguiente tabla:

n segmento Límite inferior Límite superior Punto medio
0 1 No aplicable
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
...

Verificar los cálculos de percentiles

Ahora que se conoce la configuración del segmento, puede predecir los valores de los percentiles 50, 95 y 99 de cualquier conjunto de mediciones. Por ejemplo, si hay una muestra y está en el contenedor número 10, el valor del percentil 50 es 24,79.

Para obtener los valores del percentil 50, 95 y 99 de la métrica, puede usar el método de la API projects.timeSeries/list e incluir un periodo de alineación y un alineador. En este ejemplo, se han seleccionado los siguientes ajustes:

  • Alineador: ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95 o ALIGN_PERCENTILE_99
  • Periodo de alineación: 60 s

En el caso de la selección ALIGN_PERCENTILE_50, cada valor de la serie temporal es el percentil 50 de un segmento:

{
  "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
          }
        }
      ]
    },

En dos de las muestras, el percentil 50 está en el contenedor 10, mientras que en la otra muestra está en el contenedor 11.

En la siguiente tabla se muestran los resultados de ejecutar el método projects.timeSeries/list con diferentes alineadores. La primera fila corresponde al caso en el que no se especifica el alineador. Si no especificas un alineador, se devuelven el modelo de contenedor y los valores medios. En las tres filas siguientes se muestran los datos devueltos cuando el alineador se define como ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95 y ALIGN_PERCENTILE_99:

Estadística Ejemplo a las 15:06 Muestra a las 15:05 Ejemplo a las 15:04
media 25.889 33.7435 No está disponible.
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 se muestra en los dos ejemplos con datos sintéticos, los valores de los percentiles dependen de cómo se distribuyan las muestras. Cuando todas las muestras se encuentran en el contenedor de muestras, el percentil 50 es el punto medio de ese contenedor. Sin embargo, cuando las muestras están en segmentos diferentes, esa distribución afecta a las estimaciones.

Para determinar si el percentil 50 es una estimación razonable de la media, puedes comparar el valor medio con el percentil 50. El valor medio se devuelve con los detalles del segmento.

Siguientes pasos

Para obtener información sobre cómo visualizar métricas con valores de distribución, consulta el artículo Acerca de las métricas con valores de distribución.