Perzentile und Verteilungsmesswerte

Messwerte mit dem Werttyp Distribution in Cloud Monitoring fassen Messungen mit hohem Volumen in Wertebereichen zusammen, die als Buckets bezeichnet werden, anstatt jeden einzelnen Datenpunkt aufzuzeichnen. Durch das Aufzeichnen von Bucket-Zählungen als Histogramm können Dienste große Mengen von Messwerten zusammenfassen, sodass Sie Statistiken wie Durchschnittswerte und Perzentile analysieren können.

Die Beispiele in diesem Dokument zeigen, wie die Anzahl der Buckets, die Bucket-Breite, die Verteilung der Messwerte und die Stichprobengröße die geschätzten Perzentilwerte bestimmen, ohne dass einzelne Messwerte gespeichert werden.

Beispiel mit synthetischen Daten

Betrachten Sie ein Exponential-Bucket-Modell mit einer Skalierung von 1, einem Wachstumsfaktor von 2 und 10 endlichen Buckets. Dieses Histogramm enthält 12 Buckets: die 10 endlichen Buckets, 1 Bucket, der nur eine Obergrenze angibt, und 1 Bucket, der nur eine Untergrenze angibt. 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 Perzentil und den Messwerten bestimmt. Sie zeigen auch, dass die Anzahl der Stichproben in einem Histogramm wichtig ist. Wenn die Anzahl der Stichproben beispielsweise kleiner als 20 ist, befinden sich das 95. und das 99. Perzentil immer im selben Bucket.

Fall 1: Die Gesamtzahl der Stichproben ist 1

Wenn es nur eine einzige Messung gibt, unterscheiden sich die drei Perzentilwerte, aber sie zeigen nur das 50., 95. und 99. Perzentil desselben Buckets an. 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. Verwenden Sie die Bucket-Anzahl, um den Bucket zu bestimmen, der das 50. Perzentil enthält. In diesem Beispiel enthält Bucket Nummer 8 das 50. Perzentil.
  2. Berechnen Sie die Schätzung anhand der folgenden Regel:

    pth percentile = 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 Perzentilbereichs für den Bucket. Ebenso sind bucket_low und bucket_up die Unter- und Obergrenze des Buckets. Die Werte für p_low und p_up hängen davon ab, wie die Zählungen auf die verschiedenen Buckets verteilt sind.

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 das 95. Perzentil berechnen möchten, ersetzen Sie im vorherigen Ausdruck 50 durch 95. In diesem Beispiel mit genau einer Stichprobe sind die Perzentile so:

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 Stichproben 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

Sie können das zuvor beschriebene Verfahren verwenden, um das 50., 95. und 99. Perzentil zu berechnen. Das 50. Perzentil, das sich in Bucket Nummer 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 Verfahren 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 und im vorherigen Beispiel befindet sich das 95. Perzentil in Bucket Nummer 8. Die Perzentilberechnung ist jedoch unterschiedlich. Der Unterschied ist auf die Verteilung der Stichproben zurückzuführen. Im ersten Beispiel befinden sich alle Stichproben im selben Bucket, während sie sich im letzten Beispiel in verschiedenen Buckets befinden.

Beispiel mit realen Daten

In diesem Abschnitt wird anhand eines Beispiels gezeigt, wie Sie das Bucket-Modell für einen bestimmten Messwert ermitteln können. In diesem Abschnitt wird auch veranschaulicht, wie Sie den potenziellen Fehler in den berechneten Perzentilwerten bewerten können.

Bucket-Modell identifizieren

Wenn Sie die Buckets ermitteln möchten, die für einen Messwert in einem bestimmten Zeitraum verwendet wurden, 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, der den Messwert, eine Startzeit und eine Endzeit angibt.

    Wenn Sie beispielsweise Informationen zum Messwert abrufen möchten, in dem die Latenzen von API-Anfragen gespeichert werden, geben Sie Folgendes ein:

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

    In diesem Beispiel werden im Filterfeld ein Messwerttyp und ein Ressourcentyp angegeben. Weitere Informationen zu diesen Filtern finden Sie unter Monitoring-Filter.

  3. Drücken Sie die Eingabetaste.

Im Folgenden finden Sie die list-API-Antwort für einen verteilungsbasierten Messwert, 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) = scale * (growth factor)n

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

Die Buckets für diesen Messwert sowie der Mittelpunkt jedes Buckets sind in der folgenden 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

Da die Bucket-Konfiguration nun bekannt ist, können Sie für jede Gruppe von Messwerten die Werte für das 50., 95. und 99. Perzentil vorhersagen. Wenn es beispielsweise eine Stichprobe gibt und diese sich in Bucket Nummer 10 befindet, beträgt der Wert des 50.Perzentils 24,79.

Wenn Sie die Werte für das 50., 95. und 99. Perzentil des Messwerts abrufen möchten, können Sie die API-Methode projects.timeSeries/list verwenden und einen Ausrichtungszeitraum und einen Aligner angeben. 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 Zeitreihe 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 liegt das 50. Perzentil in Bucket 10, bei der anderen Stichprobe in Bucket 11.

In der folgenden Tabelle sind die Ergebnisse der Ausführung der Methode projects.timeSeries/list mit verschiedenen Alignern aufgeführt. 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 werden 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 Stichproben im selben 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 das 50. Perzentil eine angemessene Schätzung des Mittelwerts ist, können Sie den Mittelwert mit dem 50. Perzentil vergleichen. Der Mittelwert wird mit den Bucket-Details zurückgegeben.