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 auf einer Heatmap darstellen, können Sie eine Option in der Diagrammsymbolleiste verwenden, um das 50., 95. und 99. Perzentil zu überlagern. Wenn Sie einen Verteilungsmesswert in einem Liniendiagramm darstellen möchten, müssen Sie das Diagramm so konfigurieren, dass der Verteilungswert in einen numerischen Wert konvertiert wird. Sie können diese Umwandlung mithilfe eines Aligners durchführen, der ein Perzentil auswählt.

Im nächsten Abschnitt auf dieser Seite wird anhand eines synthetischen Beispiels gezeigt, wie Perzentile bestimmt werden. Das Beispiel zeigt, dass die Perzentilwerte von der Anzahl der Buckets, der Breite der Buckets, der Verteilung der Messungen und der Gesamtzahl der Stichproben abhängen. Die Perzentilwerte hängen nicht von den tatsächlichen Messwerten ab, da diese Werte im Histogramm nicht verfügbar sind.

Beispiel mit synthetischen Daten

Nehmen wir ein Exponential-Bucket-Modell mit einer Skala von 1, einem Wachstumsfaktor von 2 und 10 endlichen Buckets. Dieses Histogramm enthält 12 Buckets, die zehn endlichen Buckets, einen Bucket, der nur eine Obergrenze angibt, und einen 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 Messungen bestimmt. Sie zeigen auch, dass die Anzahl der Stichproben in einem Histogramm wichtig ist. Beträgt die Anzahl der Stichproben beispielsweise weniger als 20, befinden sich das 95. und 99. Perzentil immer im selben Bucket.

Fall 1: Die Gesamtzahl der Samples ist 1.

Wenn eine einzelne Messung vorhanden ist, 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 Messwerten kann nicht ermittelt werden, da die Messung nicht bekannt ist.

Angenommen, das Histogramm der Messungen entspricht folgender Tabelle:

Containernummer 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. Ermitteln Sie anhand der Bucket-Anzahl den Bucket, der das 50. Perzentil enthält. In diesem Beispiel enthält Bucket Nummer 8 das 50. Perzentil.
  2. Berechnen Sie die Schätzung mithilfe 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 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 Anzahl auf die verschiedenen Buckets verteilt wird.

Das 50. Perzentil wird beispielsweise so berechnet:

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

Ersetzen Sie 50 durch 95 im vorherigen Ausdruck, um das 95. Perzentil zu berechnen. In diesem Beispiel mit genau einem Beispiel sehen die Perzentile so aus:

Perzentil Containernummer 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:

Containernummer 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. Beispielsweise wird das 50. Perzentil, das sich in Bucket 1 befindet, so berechnet:

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

In ähnlicher Weise wird das 95. Perzentil 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 Containernummer 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 unterscheidet sich jedoch. Der Unterschied besteht darin, wie die Stichproben verteilt sind. Im ersten Beispiel befinden sich alle Stichproben im selben Bucket, im letzten Beispiel in verschiedenen Buckets.

Beispiel mit echten Daten

Dieser Abschnitt enthält ein Beispiel, das veranschaulicht, wie Sie das von einem bestimmten Messwert verwendete Bucket-Modell ermitteln können. In diesem Abschnitt wird auch gezeigt, wie Sie den potenziellen Fehler in den berechneten Perzentilwerten auswerten können.

Bucket-Modell identifizieren

Rufen Sie die Methode projects.timeSeries/list der Cloud Monitoring API auf, um die Buckets zu ermitteln, die für einen Messwert über ein bestimmtes Zeitintervall verwendet werden.

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

  1. Rufen Sie die projects.timeSeries/list-Webseite auf.
  2. Geben Sie im APIs Explorer den Filter ein, der den Messwert sowie eine Start- und Endzeit angibt.

    Um beispielsweise Informationen zu dem Messwert abzurufen, der Latenzen von API-Anfragen speichert, geben Sie Folgendes ein:

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

    In diesem Beispiel gibt das Filterfeld einen Messwerttyp und einen Ressourcentyp an. 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 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 Buckets.

Die folgende Tabelle zeigt die Buckets für diesen Messwert zusammen mit dem Mittelpunkt jedes Buckets:

n. 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 jeden Satz von Messungen die Werte des 50., 95. und 99. Perzentils vorhersagen. Wenn es beispielsweise eine Stichprobe gibt und diese sich in Bucket Nummer 10 befindet, ist der Wert für das 50.Perzentil 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 entspricht jeder Wert in der Zeitachse dem 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.

Die folgende Tabelle zeigt die Ergebnisse der Ausführung der Methode projects.timeSeries/list mit verschiedenen Alignern. 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 gesetzt 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

Die beiden Beispiele mit synthetischen Daten veranschaulichen, dass die Werte der Perzentile davon abhängen, wie die Stichproben verteilt sind. Wenn sich alle Stichproben im Beispiel-Bucket befinden, ist das 50. Perzentil der Mittelpunkt dieses Buckets. Befinden sich die Stichproben jedoch in verschiedenen Buckets, wirkt sich diese Verteilung auf die Schätzungen aus.

Wenn Sie feststellen möchten, 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.

Nächste Schritte

Weitere Informationen