Auf dieser Seite werden die Grundlagen zum Erstellen von OpenCensus-Messwerten für Verfügbarkeits- und Latenz-SLIs erläutert. Außerdem finden Sie Implementierungsbeispiele zum Definieren von SLOs mithilfe von OpenCensus-Messwerten.
Die Grundlagen von OpenCensus
OpenCensus ist eine einzelne Open-Source-Distribution von Bibliotheken, die auf der OpenCensus GitHub-Seite verfügbar sind und automatisch Traces und Messwerte erfassen und zu jedem Backend senden. OpenCensus kann zur Instrumentierung Ihrer Dienste verwendet werden, um benutzerdefinierte Messwerte auszugeben, die in Cloud Monitoring aufgenommen werden können. Sie können diese Messwerte dann als SLIs verwenden.
Ein Beispiel dafür, wie Sie mit OpenCensus Monitoring-Messwerte erstellen, die nicht explizit für SLIs gedacht sind, finden Sie unter Benutzerdefinierte Messwerte mit OpenCensus.
Messwerte
Um mit OpenCensus Messwertdaten für Ihren Dienst zu erfassen, müssen Sie folgende OpenCensus-Konstrukte verwenden:
-
Measure
stellt den zu erfassenden Messwerttyp dar, angegeben durch einen Messwertnamen. EinMeasure
kann Werte vom Typ Int64 oder Float64 aufzeichnen. -
Measurement
: Zeichnet einen bestimmten Datenpunkt auf, der von einemMeasure
für ein bestimmtes Ereignis erfasst und geschrieben wurde. Beispielsweise kann einMeasurement
die Latenz einer bestimmten Antwort aufzeichnen. -
View
gibt eine Aggregation an, die aufMeasure
angewendet wurde. OpenCensus unterstützt folgende Aggregationstypen:- Anzahl: Die Anzahl der Messpunkte.
- Verteilung: Eine Histogrammverteilung der Messpunkte.
- Summe: Eine Summe an Messwerten.
- LastValue: Der letzte von der Messung erfasste Wert.
Weitere Informationen finden Sie unter OpenCensus-Stats/-Messwerte. In OpenCensus werden Messwerte oft als Stats bezeichnet.
Instrumentierung
Die OpenCensus-Bibliotheken sind für verschiedene Sprachen verfügbar. Sprachspezifische Informationen zur Instrumentierung Ihres Dienstes zur Ausgabe von Messwerten finden Sie unter Sprachunterstützung in OpenCensus. Darüber hinaus finden Sie unter Benutzerdefinierte Messwerte mit OpenCensus Beispiele für Sprachen, die häufig für das Monitoring verwendet werden.
Im Standardfall gehen Sie so vor:
- Instrumentieren Sie Ihren Dienst für die Aufzeichnung und den Export von Messwerten.
- Definieren Sie einen Exporter, der die Messwerte empfängt.
Für jeden Messwert müssen Sie einen Measure
definieren, um den Werttyp anzugeben: Int64 oder Float64. Außerdem müssen Sie die View
definieren und registrieren, um den Aggregationstyp (Anzahl, Verteilung, Summe oder letzter Wert) anzugeben. Wenn Sie den Verteilungsaggregationstyp verwenden möchten, müssen Sie die Grenzen des Histogramm-Buckets auch explizit angeben. Außerdem geben Sie in der View
einen Namen für den Messwert an.
Exporter
Schließlich müssen Sie einen Exporter verwenden, um die Messwerte zu erfassen und in Cloud Monitoring oder ein anderes Backend zu schreiben. Informationen zu den für Monitoring verfügbaren sprachspezifischen Exportern finden Sie unter OpenCensus-Exporter.
Sie können auch einen eigenen Exporter schreiben. Weitere Informationen finden Sie unter Benutzerdefinierten Exporter schreiben.
Messwerte für SLIs erstellen
Ihre Anwendung muss OpenCensus-Messwerte erstellen, die als SLIs in Cloud Monitoring verwendet werden können:
- Verwenden Sie für Verfügbarkeits-SLIs für Anfrage- und Fehlerzahlen einen
Measure
mit Zählungsaggregation. - Verwenden Sie für Latenz-SLIs einen
Measure
mit Verteilungsaggregation.
Messwerte für Verfügbarkeits-SLIs
Sie geben einen anfragebasierten Verfügbarkeits-SLI in der Cloud Monitoring API an, indem Sie mit der Struktur TimeSeriesRatio
ein Verhältnis von „guten” oder „schlechten” Anfragen zu den gesamten Anfragen festlegen. Dieses Verhältnis wird im Feld goodTotalRatio
einer RequestBasedSli
-Struktur verwendet.
Ihre Anwendung muss OpenCensus-Messwerte erstellen, mit denen dieses Verhältnis erstellt werden kann. In Ihrer Anwendung müssen Sie mindestens zwei der folgenden Elemente erstellen:
Ein Messwert, mit dem alle Ereignisse gezählt werden. Verwenden Sie diesen Messwert im
totalServiceFilter
des Verhältnisses.Sie können einen OpenCensus-Messwert des Typs Int64 mit Zahlaggregation erstellen und für jede empfangene Anfrage den Wert
1
erfassen.Verwenden Sie diesen Messwert im
badServiceFilter
des Verhältnisses, um "schlechte" Ereignisse zu zählen.Sie können einen OpenCensus-Messwert des Typs Int64 mit Zahlaggregation erstellen und für jeden Fehler oder jede fehlgeschlagene Anfrage den Wert
1
erfassen.Verwenden Sie diesen Messwert im
goodServiceFilter
des Verhältnisses, um "gute" Ereignisse zu zählen.Sie können einen OpenCensus-Messwert des Typs Int64 mit Zahlaggregation erstellen und für jede erfolgreiche Antwort den Wert
1
erfassen.
Messwerte für Latenz-SLIs
Sie geben einen anfragebasierten Latenz-SLI in der Cloud Monitoring API mithilfe einer DistributionCut
-Struktur aus. Diese Struktur wird im Feld distributionCut
einer RequestBasedSli
-Struktur verwendet.
Sie können ein Int64- oder Float64-Measure
mit einem View
erstellen, indem Sie den Verteilungsaggregationstyp verwenden. Sie müssen die Bucket-Grenzen auch explizit definieren. Beachten Sie, dass es wichtig ist, die Buckets so zu definieren, dass Sie den Prozentsatz der Anfragen, die innerhalb des gewünschten Schwellenwerts liegen, genau messen können. Eine Erläuterung dieses Themas finden Sie unter SLOs implementieren im
Site Reliability Engineering Workbook.
Implementierungsbeispiel
In diesem Abschnitt wird ein Beispiel vorgestellt, in dem Messwerte für grundlegende Verfügbarkeits- und Latenz-SLIs mithilfe von OpenCensus in Node.js implementiert werden.
Instrumentierung
So instrumentieren Sie Ihren Dienst für die Ausgabe von Messwerten mit OpenCensus:
- Fügen Sie die erforderlichen Bibliotheken hinzu:
Go
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
- Definieren und registrieren Sie den Exporter:
Go
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
- Definieren Sie für jeden Messwert einen
Measure
:Go
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
- Definieren und registrieren Sie die
View
für jedeMeasure
mit dem entsprechenden Zusammenfassungstyp sowie die Antwortlatenz für die Bucket-Grenzwerte:
Go
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
- Aufzeichnen von Werten für die Messwerte „Anfrageanzahl” und „Fehleranzahl”:
Go
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
- Latenzwerte aufzeichnen:
Go
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Aufgenommene Messwerte
Wenn Ihre Messwerte nach Cloud Monitoring exportiert werden, werden sie als Messwerttypen mit einem Präfix angezeigt, das angibt, dass sie von OpenCensus stammen. So wird beispielsweise der Name jedes OpenCensus-View
in der Node.js-Implementierung so zugeordnet:
request_count_sli
wird zucustom.googleapis.com/opencensus/request_count_sli
.error_count_sli
wird zucustom.googleapis.com/opencensus/error_count_sli
.response_latency_sli
wird zucustom.googleapis.com/opencensus/response_latency_sli
.
Sobald Ihr Dienst ausgeführt wird, können Sie prüfen, ob die Messwerte in Monitoring aufgenommen werden. Dazu suchen Sie diese im Metrics Explorer.
Verfügbarkeits-SLIs
In Cloud Monitoring geben Sie anfragebasierte Verfügbarkeits-SLIs mit einer TimeSeriesRatio
-Struktur an. Das folgende Beispiel zeigt ein SLO, das die aufgenommenen OpenCensus-Messwerte verwendet und erwartet, dass der Dienst eine Verfügbarkeit von 98% erzielt. Der Wert ergibt sich aus dem Verhältnis von error_count_sli
zu request_count_sli
über ein rollierendes 28-Tage-Fenster:
{
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"custom.googleapis.com/opencensus/request_count_sli\",
"badServiceFilter":
"metric.type=\"custom.googleapis.com/opencensus/error_count_sli\"
}
}
},
"goal": 0.98,
"rollingPeriod": "2419200s",
"displayName": "98% Availability, rolling 28 days"
}
Latenz-SLIs
In Cloud Monitoring geben Sie anfragebasierte Latenz-SLIs mit einer DistributionCut
-Struktur an. Folgendes Beispiel zeigt ein SLO, das den aufgenommenen OpenCensus-Latenzmesswert verwendet und erwartet, dass 98 % der Anfragen in weniger als 1.000 ms über ein rollierendes Zeitfenster von einem Tag abgeschlossen wurden:
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"custom.googleapis.com/opencensus/response_latency_sli\",
"range": {
"min": 0,
"max": 1000
}
}
}
},
"goal": 0.98,
"rollingPeriod": "86400s",
"displayName": "98% requests under 1000 ms"
}