Perzentile und Verteilungsmesswerte

Dieses Dokument hilft, Perzentile und das Histogrammmodell für Messwertdaten mit dem Werttyp Distribution zu verstehen. Ein Verteilungsmesswert definiert Buckets genannte Wertebereiche und erfasst die Anzahl der gemessenen Werte, die in die einzelnen Buckets fallen. Verteilungsmesswerte melden keine einzelnen Messwerte. Sie melden ein Mengenhistogramm in Buckets. Dieser Wertetyp wird von Diensten verwendet, wenn die einzelnen Messungen zu zahlreich sind, um sie zu erfassen, aber statistische Informationen, wie z. B. Durchschnittswerte oder Perzentile, zu diesen Messungen wertvoll sind.

Wenn Sie einen Messwert mit Verteilungswert in einer Heatmap darstellen, können Sie mit einer Option in der Diagrammsymbolleiste die 50., 95. und 99. Perzentile überlagern. Wenn Sie einen Messwert mit Verteilungswert in einem Liniendiagramm anzeigen möchten, müssen Sie das Diagramm so konfigurieren, dass der Verteilungswert in einen numerischen Wert umgewandelt wird. Sie können diese Umwandlung mit einem Ausrichtungstool durchführen, mit dem ein Prozentrang ausgewählt wird.

Im nächsten Abschnitt dieser Seite wird anhand eines synthetischen Beispiels veranschaulicht, wie Perzentile ermittelt werden. Das Beispiel zeigt, dass die Prozentrangwerte von der Anzahl der Buckets, der Breite der Buckets, der Verteilung der Messwerte und der Gesamtzahl der Stichproben abhängen. Die Perzentilwerte hängen nicht von den tatsächlich gemessenen Werten ab, da diese Werte im Histogramm nicht verfügbar sind.

Beispiel mit synthetischen Daten

Angenommen, Sie haben ein Exponential-Bucket-Modell mit einer Skala von 1, einem Wachstumsfaktor von 2 und 10 endlichen Buckets. Dieses Histogramm enthält 12 Buckets: 10 endliche Buckets, einen Bucket mit nur einer Obergrenze und einen mit nur einer Untergrenze. In diesem Beispiel ist der endliche Bucket mit dem Index n+1 doppelt so breit wie der endliche Bucket mit dem Index n.

Die folgenden Beispiele zeigen, dass die Breite des Buckets den maximalen Fehler zwischen dem berechneten Prozentrang und den Messungen bestimmt. Außerdem zeigen sie, dass die Anzahl der Samples in einem Histogramm wichtig ist. Ist die Anzahl der Stichproben beispielsweise kleiner als 20, so befinden sich das 95. und 99. Perzentil immer im selben Bucket.

Fall 1: Die Gesamtzahl der Samples ist 1.

Bei einer einzelnen Messung unterscheiden sich die drei Perzentilwerte, es werden aber nur das 50., 95. und 99. Perzentil desselben Buckets angezeigt. Der Fehler zwischen der Schätzung und den tatsächlichen Messungen kann nicht ermittelt werden, da die Messung nicht bekannt ist.

Angenommen, das Histogramm der Messungen entspricht folgender Tabelle:

Bucket-Nummer Untergrenze Obergrenze Anzahl Perzentilbereich
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 1.024 0 0
11 1.024 0 0

So berechnen Sie das 50. Perzentil:

  1. Sie bestimmen anhand der Bucket-Anzahl, welcher Bucket das 50. Perzentil enthält. In diesem Beispiel enthält Bucket 8 den 50. Perzentilwert.
  2. Berechnen Sie die Schätzung mit der folgenden Regel:

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

    Im vorherigen Ausdruck sind p_low und p_up die Unter- und Obergrenze des Prozentrangbereichs für den Bucket. bucket_low und bucket_up sind die Unter- und Obergrenze des Buckets. Die Werte für p_low und p_up hängen davon ab, wie die Anzahl der Elemente auf die verschiedenen Gruppen verteilt ist.

Das 50. Perzentil wird beispielsweise so berechnet:

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

Wenn Sie den 95. Perzentilwert berechnen möchten, ersetzen Sie im vorherigen Ausdruck 50 durch 95. In diesem Beispiel mit genau einer Stichprobe sind die Perzentile folgende:

Perzentil Bucket-Nummer Wert
50. 8 192
95. 8 249.6
99. 8 254.7

Der Fehler zwischen der Schätzung und den tatsächlichen Messungen kann begrenzt, aber nicht ermittelt werden, da die Messung nicht bekannt ist.

Fall 2: Die Gesamtzahl der Samples beträgt 10.

Bei zehn Stichproben kann sich das 50. Perzentil in einem anderen Bucket als das 95. und 99. Perzentil befinden. Es gibt jedoch noch nicht genügend Messungen, damit das 95. und 99. Perzentil in verschiedenen Buckets sein könnten.

Angenommen, das Histogramm der Messungen entspricht folgender Tabelle:

Bucket-Nummer Untergrenze Obergrenze Anzahl Perzentilbereich
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 1.024 0 0
11 1.024 0 0

Mit der zuvor beschriebenen Methode können Sie das 50., 95. und 99. Perzentil berechnen. Das 50. Perzentil, das sich in Bucket 1 befindet, wird beispielsweise so berechnet:

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

Das 95. Perzentil wird so berechnet:

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

Mit dem zuvor beschriebenen Prozess können die Perzentile berechnet werden. Jede Zeile der folgenden Tabelle listet ein Perzentil, den entsprechende Bucket und den berechneten Wert auf:

Perzentil Bucket-Nummer Wert Maximaler Fehler
50. 1 1,5 0,5
95. 8 192 74
99. 8 243,2 115,2

In diesem Beispiel und im vorherigen Beispiel befindet sich das 95. Perzentil im Bucket 8. Die Berechnung des Perzentils ist jedoch unterschiedlich. Der Unterschied liegt an der Verteilung der Stichproben. Im ersten Beispiel befinden sich alle Samples im selben Bucket, während sie im letzten Beispiel in verschiedenen Buckets sind.

Beispiel mit realen Daten

In diesem Abschnitt wird anhand eines Beispiels veranschaulicht, wie Sie das von einem bestimmten Messwert verwendete Bucket-Modell ermitteln. Außerdem wird gezeigt, wie Sie den potenziellen Fehler in den berechneten Perzentilwerten einschätzen können.

Bucket-Modell identifizieren

Wenn Sie die für einen Messwert in einem bestimmten Zeitraum verwendeten Bucket ermitteln möchten, rufen Sie die Methode projects.timeSeries/list der Cloud Monitoring API auf.

So ermitteln Sie beispielsweise das Bucket-Modell für einen Messwert:

  1. Rufen Sie die Webseite projects.timeSeries/list auf.
  2. Geben Sie im APIs Explorer den Filter ein, in dem der Messwert, eine Startzeit und eine Endzeit angegeben sind.

    Wenn Sie beispielsweise Informationen zum Messwert abrufen möchten, in dem API-Anfragelatenzen gespeichert sind, geben Sie Folgendes ein:

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

    In diesem Beispiel wird im Filterfeld ein Messwerttyp und ein Ressourcentyp angegeben. Weitere Informationen zu diesen Filtern finden Sie unter Filter überwachen.

  3. Drücken Sie die Eingabetaste.

Im Folgenden finden Sie die list-API-Antwort für einen Verteilungswert, der in einem Google Cloud-Projekt verfügbar ist:

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

In der API-Antwort beschreibt das value-Feld die im points-Array gespeicherten Daten. Die Felder count und mean geben an, dass für das angegebene Zeitintervall drei Messungen erfolgten und deren Durchschnittswert bei 25,889 lag. Das bucketOptions-Feld zeigt, dass das exponentielle Modell so konfiguriert ist, dass es 66 Buckets, eine Skalierung von 1 und einen Wachstumsfaktor von 1,4 hat.

Verwenden Sie folgende Regeln, um die Unter- und Obergrenzen für den Bucket mit dem Index n zu berechnen:

  • Untergrenze (1 ≤ n < N) = Skalierung * (Wachstumsfaktor)(n-1)
  • Obergrenze (0 ≤ n < N-1) = Skalierung * (Wachstumsfaktor)n

In den vorherigen Ausdrücken ist N die Gesamtzahl der Bucket.

Die Buckets für diesen Messwert sowie der Mittelpunkt der einzelnen Buckets sind in folgender Tabelle aufgeführt:

n-ter Bucket Untergrenze Obergrenze Mittelwert
0 1 Nicht zutreffend
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

Perzentilberechnungen prüfen

Nachdem die Bucket-Konfiguration nun bekannt ist, können Sie für jede Reihe von Messungen die Werte für das 50., 95. und 99. Perzentil vorhersagen. Beispiel: Wenn es nur eine Stichprobe gibt und sie sich in Bucket 10 befindet, ist der Wert des 50.Perzentils 24,79.

Sie können die Werte für den 50., 95. und 99. Perzentil des Messwerts abrufen. Dazu nutzen Sie die API-Methode projects.timeSeries/list und geben einen Ausrichtungszeitraum nebst Aligner an. In diesem Beispiel wurden folgende Einstellungen ausgewählt:

  • Aligner: ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95 oder ALIGN_PERCENTILE_99
  • Ausrichtungszeitraum: 60 s

Bei der Auswahl ALIGN_PERCENTILE_50 ist jeder Wert in der Zeitachse das 50. Perzentil eines Buckets:

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

Bei zwei der Stichproben befindet sich das 50. Perzentil in Bucket 10, für das andere Beispiel befindet es sich in Bucket 11.

In der folgenden Tabelle sind die Ergebnisse der Ausführung der projects.timeSeries/list-Methode mit verschiedenen Alignern zu sehen. Die erste Zeile entspricht dem Fall, in dem der Aligner nicht angegeben ist. Wenn Sie keinen Aligner angeben, werden das Bucket-Modell und die Mittelwerte zurückgegeben. In den nächsten drei Zeilen sind die Daten aufgeführt, die zurückgegeben werden, wenn der Aligner auf ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95 und ALIGN_PERCENTILE_99 festgelegt ist:

Statistik Stichprobe bei 15:06 Stichprobe bei 15:05 Stichprobe bei 15:04
Mittel 25.889 33.7435 Nicht verfügbar.
50. Perzentil 24.79 34.71 24.79
95. Perzentil 28.51 39.91 28.51
99. Perzentil 28.84 40.37 28.84

Wie die beiden Beispiele mit synthetischen Daten zeigen, hängen die Werte der Perzentile davon ab, wie die Stichproben verteilt sind. Wenn sich alle Samples im Sample-Bucket befinden, ist das 50. Perzentil der Mittelpunkt dieses Buckets. Wenn sich die Stichproben jedoch in verschiedenen Buckets befinden, wirkt sich diese Verteilung auf die Schätzungen aus.

Um festzustellen, ob der 50. Perzentilwert eine angemessene Schätzung des Mittelwerts ist, können Sie den Mittelwert mit dem 50. Perzentilwert vergleichen. Der Mittelwert wird mit den Bucket-Details zurückgegeben.

Nächste Schritte

Informationen zum Visualisieren von Verteilungsmesswerten finden Sie unter Verteilungsmesswerte.