Cette page a été traduite par l'API Cloud Translation.
Switch to English

Représentation graphique des métriques de distribution

Cette page explique comment créer et interpréter un graphique pour afficher les données de métrique ayant le type de valeur Distribution. Ce type de valeur est utilisé par les services lorsque les mesures individuelles sont trop nombreuses à collecter, mais que des informations statistiques, telles que des moyennes ou des centiles, concernent ces mesures.

Prenons l'exemple d'un service qui mesure la latence HTTP des requêtes. Les concepteurs choisissent de signaler les données de latence pour les requêtes HTTP terminées à l'aide d'un type de valeur de distribution. Les données doivent être consignées toutes les minutes. Le service définit un ensemble de buckets où chaque bucket définit une plage de valeurs de latence. Lorsqu'une requête HTTP se termine, le service incrémente le nombre dans le bucket dont la plage inclut la valeur de latence de la requête. Ces compteurs par bucket créent un histogramme des valeurs pour cette minute.

Si les buckets sont [0, 4), [4, 8), [8, 12) et [12, 16) et si les latences des requêtes au cours d'un intervalle d'une minute sont de 5, 1, 3, 5, 6, 15 et 30, alors l'histogramme de ces données est [2, 3, 1, 1] :

Bucket Mesures de latence Nombre de valeurs dans le bucket
[0,4) 1, 3 2
[4,8) 5, 5, 6 3
[8,12) 15 1
[12, 16) 30 1

Lorsque ces données sont écrites dans la série temporelle, un objet Point est créé. Pour les métriques ayant une valeur de distribution, cet objet inclut l'histogramme des valeurs. Pour cette période d'échantillonnage, l'expression Point contiendra [2, 3, 1, 1]. Les mesures individuelles ne sont pas écrites dans la série temporelle.

Étant donné que ces données HTTP sont consignées chaque minute, une série temporelle peut inclure les histogrammes suivants :

Bucket Histogramme pour
1:00
Histogramme pour
1:01
Histogramme pour
1:02
Histogramme pour
1:03
[0, 4) 2 6 10 3
[4, 8) 3 1 1 8
[8,12) 1 0 2 2
[12, 16) 1 6 0 1

Graphiques de cartes de densité

Les graphiques de carte de densité sont conçus pour afficher une série temporelle unique avec des valeurs de distribution. Pour ces graphiques, l'axe des abscisses représente le temps, l'axe des coordonnées représente les buckets et la valeur est représentée par couleur. Plus la couleur est élevée, plus la valeur est élevée. Par exemple, les zones sombres de la carte de densité indiquent des compteurs de buckets inférieurs à ceux des zones jaunes ou blanches.

La figure suivante représente une carte de densité pour l'exemple. Dans cet exemple, les sommes sont comprises entre 0 et 10. Lorsque la valeur est zéro, elle s'affiche en noir. Lorsque la valeur est 10, elle s'affiche en jaune. Les valeurs intermédiaires, telles que six, s'affichent en orange.

Graphique de carte de densité pour l'exemple

Étant donné que les graphiques de carte de densité ne peuvent représenter qu'une seule série temporelle, vous devez définir les options d'agrégation pour combiner toutes les séries temporelles en une seule série temporelle :

  • Vérifiez que le champ Grouper par est vide.
  • Sélectionnez sum pour la fonction de regroupement.

Graphiques en courbes et à barres

Les graphiques en courbes, les graphiques à barres empilées et les graphiques en courbes empilées ne peuvent pas afficher les valeurs de distribution. Si vous disposez d'une métrique avec une valeur de distribution et que vous souhaitez l'afficher à l'aide de l'un de ces types de graphique, vous devez convertir l'histogramme pour un Point (par exemple, [2, 3, 1, 1]), en valeur numérique. Pour ce faire, plusieurs méthodes s'offrent à vous. Vous pouvez par exemple calculer la somme ou sélectionner un centile.

Prenons l'exemple de données qui indique les latences des requêtes HTTP à l'aide d'une métrique de distribution. Le tableau suivant illustre l'histogramme de la série temporelle en fonction du temps. La dernière colonne affiche la somme des valeurs de l'histogramme. Cette dernière colonne peut être représentée par un tracé x-y :

Time Histogramme1 Somme des valeurs de l'histogramme
1:00 [2, 3, 1, 1] 7
1:01 [6, 1, 0, 6] 13
1:02 [10, 1, 2, 0] 13
1:03 [3, 8, 2, 1] 14

1Les buckets d'histogramme sont [0, 4), [4, 8), [8, 12) et [12, 16). L'histogramme [2, 3, 1, 1] indique deux échantillons dans le bucket [0, 4).

Dans cet exemple, la somme est une mesure significative, car elle peut être considérée comme le taux d'achèvement d'une requête HTTP :

Graphique en courbes pour l'exemple

Métriques d'agrégation et de distribution

L'agrégation, soit le processus de régularisation des points dans une série temporelle et de combinaison de plusieurs séries temporelles, est identique pour les métriques de type de distribution et les métriques dont le type de valeur est un nombre entier ou double. Toutefois, le type de graphique prend en compte les contraintes liées aux choix d'alignement et de regroupement des séries temporelles.

Graphiques de cartes de densité

La fonction d'alignement et la fonction de regroupement doivent être sélectionnées de sorte que le résultat soit une série temporelle unique avec une valeur de distribution.

Pour la fonction d'alignement, vous pouvez sélectionner sum ou delta. Ces fonctions combinent, au niveau du bucket, tous les échantillons d'une seule série temporelle qui se trouvent dans la même période d'alignement. Le résultat est une valeur de distribution. Par exemple, si deux échantillons adjacents d'une série temporelle sont [2, 3, 1, 1] et [2, 5, 4, 1], la fonction d'alignement sum produit [4, 8, 5, 2].

Pour la fonction de regroupement, la seule option est sum. Cette fonction regroupe les valeurs des mêmes buckets pour les différentes séries temporelles. Le résultat est une valeur de distribution. Par exemple, si à l'heure 1:00, l'histogramme de la série temporelle A est
[2, 3, 1, 1] et l'histogramme de la série temporelle B est [1, 5, 2, 2], la somme de ces histogrammes est [3, 8, 3, 3].

Graphique en courbes

La fonction d'alignement et la fonction de regroupement doivent être sélectionnées de sorte que, une fois l'agrégation terminée, les valeurs de distribution sont converties en valeurs numériques. Vous pouvez convertir une valeur de distribution en une valeur numérique avec la fonction d'alignement ou avec la fonction de regroupement.

  • Si vous sélectionnez un centile pour la fonction d'alignement, chaque valeur de distribution est convertie en valeur numérique lors de l'étape d'alignement de l'agrégation. Le regroupement de séries temporelles est facultatif.

    Par exemple, pour afficher le 99e centile de chaque série temporelle, définissez la fonction d'alignement sur 99th percentile, assurez-vous que les options de regroupement sont vides, puis définissez la fonction de regroupement sur none. Avec cette configuration, le graphique peut afficher plusieurs lignes, une pour chaque série temporelle.

  • Si vous sélectionnez sum ou delta comme fonction d'alignement, à la fin de la phase d'alignement, chaque exemple contient une valeur de distribution. Avec ces fonctions d'alignement, vous devez sélectionner une fonction de regroupement. La fonction de regroupement convertit la valeur de distribution en valeur numérique.

    Par exemple, pour afficher le 99e centile de toutes les séries temporelles, définissez la fonction d'alignement sur sum, assurez-vous que les options de regroupement sont vides, et définissez la fonction de regroupement sur 99th percentile. Étant donné que les options de regroupement sont vides, la fonction de regroupement combine les valeurs de distribution de toutes les séries temporelles en une nouvelle valeur de distribution, puis sélectionne le 99e centile. Avec cette configuration, le graphique affiche une seule ligne.

Comprendre les centiles de distribution

Lorsque vous tracez une métrique à valeur de distribution sur une carte de densité, vous avez la possibilité de superposer le 50e centile, le 95e centile et le 99e centile. Si vous affichez une métrique à valeur de distribution sur un graphique en courbes, vous devez la convertir en métrique numérique et, pour y parvenir, vous pouvez sélectionner un centile. En revanche, le processus d'interprétation ou de génération de ces centiles peut ne pas être clair.

La valeur du centile est une valeur calculée. Le calcul prend en compte le nombre de buckets, la largeur des buckets et le nombre total d'échantillons. Comme les valeurs mesurées réelles ne sont pas connues, le calcul du centile ne peut pas s'appuyer sur ces données.

Exemple avec des données synthétiques

Prenons l'exemple d'un modèle de bucket Exponential avec une échelle de un et un facteur de croissance de deux. Cela produit une série de buckets dans lesquels le (i+1)e se trouve deux fois plus grand que le bucket ith.

Scénario 1 : le nombre total d'échantillons est de 1.

Supposons que l'histogramme des mesures se présente comme indiqué dans le tableau suivant :

Bucket nombre
[0, 1) 0
[1, 2) 0
[2, 4) 0
[4, 8) 0
[8, 16) 0
[16, 32) 0
[32, 64) 0
[64, 128) 0
[128, 256) 1

Pour calculer le 50e centile, procédez comme suit :

  1. Vous utilisez le nombre de buckets pour déterminer que le bucket [128, 256) contient le 50e centile.
  2. Nous supposons que les valeurs mesurées dans le bucket sélectionné sont distribuées de manière uniforme. Par conséquent, la meilleure estimation du 50e centile correspond au milieu du bucket.

En utilisant la même logique, vous pouvez calculer n'importe quel centile pour un bucket :

Centile bucket valeur
50e [128, 256) 192
95e [128, 256) 249.6
99e [128, 256) 254.7

Lorsqu'il n'y a qu'une seule mesure, les trois valeurs de centiles diffèrent, mais elles n'affichent que les 50e, 95e et 99e centiles du même bucket. L'erreur entre l'estimation et les mesures réelles ne peut pas être déterminée, car la mesure n'est pas connue. Il s'agit simplement d'une seule lecture dont la valeur se trouvait dans l'intervalle [128, 256). Cette valeur peut être de 128 ou être de 255.

Scénario 2 : le nombre total d'échantillons est de 10.

Supposons que l'histogramme des mesures se présente comme indiqué dans le tableau suivant :

Bucket nombre
[0, 1) 4
[1, 2) 2
[2, 4) 1
[4, 8) 1
[8, 16) 1
[16, 32) 0
[32, 64) 0
[64, 128) 0
[128, 256) 1

À l'aide du processus décrit précédemment, les centiles peuvent être calculés et présentés dans le tableau suivant :

Centile bucket valeur erreur max.
50e [1, 2) 1.5 0,5
95e [128, 256) 249.6 121.6
99e [128, 256) 254.7 126.7

Comme le montre cet exemple, lorsqu'il y a 10 échantillons, le 50e centile peut se trouver dans un bucket différent des 95e et 99e centiles. Toutefois, il n'existe toujours pas suffisamment de mesures pour permettre aux 95e et 99e centiles de se trouver dans des buckets différents.

Exemple avec des données réelles

Cette section contient un exemple détaillé qui vous montre comment déterminer le modèle de bucket utilisé par une métrique particulière et comment évaluer l'erreur potentielle dans les valeurs de centile calculées.

Déterminer le modèle de bucket

Pour déterminer les buckets utilisés pour cette métrique, utilisez la méthode projects.timeSeries/list de l'API Cloud Monitoring.

Pour cet exemple, les données affichées ont été extraites d'un projet Google Cloud existant à l'aide de l'explorateur d'API avec les paramètres suivants :

  • Filtre de statistique : metric.type="networking.googleapis.com/google-service/backend_latencies" resource.type="google_service_gce_client" resource.label."zone"="us-central1-f"
  • Heure de fin : 2020-11-03T10:06:36-05:00
  • Date/heure de début : 2020-11-03T10:04:00-05:00

La réponse à cette requête inclut le modèle de bucket et le nombre d'échantillons de la distribution :

{
  "timeSeries": [
    {
      "metric": {
        "labels": {
          "service_name": "monitoring.googleapis.com",
          "protocol": "HTTP/2.0",
          "response_code_class": "200",
          "service_region": "us-central1"
        },
        "type": "networking.googleapis.com/google-service/backend_latencies"
      },
      "resource": {
          [redacted]
        }
      },
      "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"
              ]
            }
          }
        },

Ce résultat montre que Service Networking écrit les données de latence du backend en utilisant un modèle exponentiel avec 66 buckets, l'échelle est de 1, et le facteur de croissance est de 1,4. La réponse de l'API indique que, pour l'intervalle de temps spécifié d'une minute, il existe trois mesures avec une valeur moyenne de 25,889.

Les buckets pour cette métrique, ainsi que le milieu de chaque bucket et la contribution au centile, sont présentés dans le tableau suivant :

énième intervalle Limite inférieure1 Limite supérieure2 Milieu Chaque contribution au centile
0 -infinité 0 N/A
1 0 1.4 0,7 0.014
2 1.4 1.96 1.58 0.0056
9 14.75 20.66 17.7 0.0591
10 20.66 28.93 24.78 0.0827
11 28.9 40.5 34.7 0.116

1 Limite inférieure = échelle * (facteur de croissance)^(i-1)
2 Limite supérieure = échelle * (facteur de croissance)^i

Sur la base de l'analyse précédente, nous pensons que si le 50e centile se trouve dans le bucket numéro 10, la valeur du 50e centile est de 24.78.

Vérifier les calculs de centiles

Pour récupérer les valeurs des 50e, 95e et 99e centiles, vous pouvez utiliser la méthode API projects.timeSeries/list, et inclure une période d'alignement et un aligneur. Dans cet exemple, les paramètres suivants ont été sélectionnés :

  • Aligneur : ALIGN_50, ALIGN_95 ou ALIGN_99
  • Période d'alignement : 60s

Pour la sélection ALIGN_50, les données suivantes ont été renvoyées par la méthode API :

{
  "timeSeries": [
    {
      "metric": {
         [redacted]
      },
      "resource": {
         [redacted]
         }
      },
      "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
          }
        }
      ]
    },

Après avoir exécuté les commandes pour les aligneurs des 95e et 99e centiles, nous disposons des données suivantes :

Statistique Échantillon @ 15:06 Échantillon @ 15:05 Échantillon @ 15:04
moyenne1 25.889 33.7435 Non disponible.
50e centile 24.79 34.71 24.79
95e centile 28.51 39.91 28.51
99e centile 28.84 40.37 28.84

1 La moyenne est signalée avec les détails du bucket.

Les valeurs de centile correspondent à ce qui est prévu. Les 50e centiles représentent tous les points médians d'un intervalle. De même, si vous connaissez le 99e centile dans le bucket 10, la valeur du 99e centile doit être d'environ 20,66 +(99*0,0827) ou 28,84. Cette valeur correspond à la valeur indiquée.

Dans ces données, les valeurs moyennes des données signalées aux moments 15:05 et 15:06 sont très similaires aux valeurs de 50% des centiles. Cela garantit que si le nombre d'échantillons dans l'histogramme est suffisamment important, le 50e centile est une estimation raisonnable de la population.

Résumé

Cette page vous offre un aperçu de la représentation graphique des métriques avec des valeurs de distribution. Pour ces métriques, chaque Point contient un intervalle de temps et une Distribution. Le fichier Distribution définit des buckets et inclut un histogramme des décomptes associés à chaque bucket.

Vous pouvez représenter des métriques avec des valeurs de distribution à l'aide d'une carte de densité. Si vous souhaitez utiliser des graphiques en courbes, vous devez convertir l'histogramme en valeur numérique. Une façon d'effectuer cette conversion consiste à tracer un centile spécifique de la distribution.

Les valeurs de centile des métriques de distribution sont calculées et l'algorithme dépend du nombre de buckets, de la largeur du bucket et de la forme de l'histogramme :

  • Les valeurs des 50e, 95e et 99e centiles sont toujours différentes. Toutefois, ils peuvent indiquer des centiles différents dans le même bucket.
  • Les centiles ne sont pas générés à partir des mesures, car ces valeurs ne sont pas disponibles.
  • La largeur du bucket détermine l'erreur maximale entre le centile calculé et les mesures.
  • Le nombre d'échantillons dans un histogramme est important. Par exemple, si ce nombre est inférieur à 20, les 95e et 99e centiles se trouvent toujours dans le même bucket.
  • Pour toute métrique de distribution, vous pouvez utiliser l'API Cloud Monitoring pour identifier le modèle de bucket utilisé pour cette métrique. Comme ce modèle est horodaté, un service peut modifier le modèle du bucket.