Konfigurationsdaten
Die in den Umgebungsvariablen ermittelten Konfigurationsdaten werden in der folgenden Tabelle definiert.
Fields | Spezifikation |
---|---|
project_id |
String Die Kennzeichnung des Projekts, an das Beobachtbarkeitsdaten gesendet werden. Wenn dieses Feld leer ist, versucht das gRPC-Beobachtbarkeits-Plug-in, die Projekt-ID aus den Umgebungsvariablen oder aus den Standardanmeldedaten abzurufen. Wenn nicht gefunden, geben die init-Funktionen für die Beobachtbarkeit einen Fehler zurück. |
cloud_logging |
Objekt Die Logging-Optionen sind in dieser Tabelle kategorisiert. Wenn er fehlt, ist das Logging deaktiviert. |
cloud_logging.client_rpc_events[] |
Liste Eine Liste von client_rpc_events -Konfigurationen, die die Konfiguration für ausgehende RPCs von der Binärdatei darstellen.Die client_rpc_events -Konfigurationen werden in Textreihenfolge ausgewertet. Die erste übereinstimmende Konfiguration wird verwendet. Wenn ein RPC nicht mit einem Eintrag übereinstimmt, wird mit dem nächsten Eintrag in der Liste fortgefahren. |
cloud_logging.client_rpc_events[].methods[] |
Liste [String] Eine Liste mit Methoden-IDs. Standardmäßig ist die Liste leer und entspricht keinen Methoden. Der Wert der Methode hat das Format [service]/[method] .* wird als Platzhalter für Folgendes akzeptiert:
Wenn angegeben, muss der Dienstname der vollständig qualifizierte Dienstname sein, einschließlich des Paketnamens. Beispiele:
|
cloud_logging.client_rpc_events[].exclude |
Bool Gibt an, ob die durch client_rpc_events[].methods[] gekennzeichneten Methoden vom Logging ausgeschlossen werden sollen.Der Standardwert ist "false". Das bedeutet, dass die durch client_rpc_events[].methods[] angegebenen Methoden im Logeintrag enthalten sind.Wenn der Wert "true" ist, kann der Platzhalter (*) nicht als der gesamte Wert in client_rpc_events[].methods[]. verwendet werden |
cloud_logging.client_rpc_events[].max_metadata_bytes |
Int Maximale Anzahl der zu protokollierenden Metadaten in Byte. Wenn die Größe der Metadaten das definierte Limit überschreitet, werden Schlüssel/Wert-Paare jenseits des Limits nicht protokolliert. Der Standardwert ist 0, d. h., es werden keine Metadaten protokolliert. |
cloud_logging.client_rpc_events[].max_message_bytes |
Int Maximale Anzahl von Byte jeder zu protokollierenden Nachricht. Wenn die Größe der Nachricht das festgelegte Limit überschreitet, wird der Inhalt jenseits des Limits abgeschnitten. Der Standardwert ist 0, d. h., es wird keine Nachrichtennutzlast protokolliert. |
cloud_logging.server_rpc_events[] |
Liste Eine Liste von server_rpc_events -Konfigurationen, steht für die Konfiguration eingehender RPCs an das Binärprogramm.Die server_rpc_events -Konfigurationen werden in Textreihenfolge ausgewertet. Die erste übereinstimmende Konfiguration wird verwendet. Wenn ein RPC nicht mit einem Eintrag übereinstimmt, wird mit dem nächsten Eintrag in der Liste fortgefahren. |
cloud_logging.server_rpc_events[].methods[] |
Liste [String] Eine Liste von Strings, die eine Gruppe von Methoden auswählen können. Standardmäßig ist die Liste leer und entspricht keinen Methoden. Der Wert der Methode hat das Format [service]/[method] .* wird als Platzhalter für Folgendes akzeptiert:
Wenn angegeben, muss der Dienstname der vollständig qualifizierte Dienstname sein, einschließlich des Paketnamens. Beispiele:
|
cloud_logging.server_rpc_events[].exclude |
Bool Gibt an, ob die durch server_rpc_events[].methods[] gekennzeichneten Methoden vom Logging ausgeschlossen werden sollen.Der Standardwert ist "false". Das bedeutet, dass die durch server_rpc_events[].methods[] angegebenen Methoden in Logs erfasst werden.Wenn der Wert "true" ist, kann der Platzhalter (*) nicht als ganzer Wert in einem Eintrag von server_rpc_events[].methods[] verwendet werden. |
cloud_logging.server_rpc_events[].max_metadata_bytes |
Int Maximale Anzahl der zu protokollierenden Metadaten in Byte. Wenn die Größe der Metadaten das definierte Limit überschreitet, werden Schlüssel/Wert-Paare jenseits des Limits nicht protokolliert. Der Standardwert ist 0, d. h., es werden keine Metadaten protokolliert. |
cloud_logging.server_rpc_events[].max_message_bytes |
Int Maximale Anzahl von Byte jeder zu protokollierenden Nachricht. Wenn die Größe der Nachricht das festgelegte Limit überschreitet, wird der Inhalt, der das Limit überschreitet, abgeschnitten. Der Standardwert ist 0, d. h., es wird keine Nachrichtennutzlast protokolliert. |
cloud_monitoring |
Objekt Aktiviert Cloud Monitoring. Es gibt keine Konfigurationsoptionen. Wenn Sie ein leeres Konfigurationsobjekt angeben, wird das Monitoring aktiviert. Wenn Sie kein Konfigurationsobjekt angeben, wird das Monitoring deaktiviert. Wenn beispielsweise keine anderen Optionen angegeben sind, aktiviert ein leerer Konfigurationsabschnitt das Monitoring. export GRPC_GCP_OBSERVABILITY_CONFIG='{ "project_id": "your-project-here", "cloud_monitoring": { } }' |
cloud_trace |
Objekt Ein leerer Konfigurationsabschnitt aktiviert das Tracing mit den Standardkonfigurationsoptionen. Wenn Sie kein Konfigurationsobjekt angeben, wird das Tracing deaktiviert. Ein leerer Konfigurationsabschnitt aktiviert beispielsweise das Tracing mit Standardkonfigurationsoptionen. export GRPC_GCP_OBSERVABILITY_CONFIG='{ "project_id": "your-project-here", "cloud_trace": { } }' Wenn das Tracing aktiviert ist, selbst bei einer Abtastrate von "0", wird die Entscheidung zum Abtasten eines bestimmten Trace weitergegeben. |
cloud_trace.sampling_rate |
Zahl Die globale Einstellung, die die Wahrscheinlichkeit bestimmt, dass ein RPC verfolgt wird. Beispiel:
Die Abtastrate ist standardmäßig 0 .Das Plug-in berücksichtigt die vorgelagerte Abtastentscheidung. Wenn ein RPC für das vorgelagerte Abtasten ausgewählt wird, erfasst das Plug-in die Spans und lädt die Daten in das Backend hoch, unabhängig von der Einstellung der Abtastrate für das Plug-in. |
labels |
Objekt Ein JSON-Objekt, das eine Reihe von Schlüssel/Wert-Paaren enthält. Sowohl der Schlüssel als auch der Wert sind Strings. Labels werden zusammen auf Cloud Logging, Cloud Monitoring und Cloud Trace angewendet. |
Trace-Definitionen
Dieser Abschnitt enthält Informationen zum Tracing.
Weitergabe von Trace-Kontext
Damit das dienstübergreifende Tracing funktioniert, muss der Dienstinhaber die Weitergabe von vorgelagertem (oder selbst gestartetem) Trace-Kontext zum nachgelagerten unterstützen. Der Trace-Kontext wird über gRPC-Metadaten zwischen Diensten weitergegeben. Aktivieren Sie die Cloud Monitoring, Cloud Logging, Cloud Trace APIs und Microservices APIs, mit denen Dienste in dieser Konfiguration ihre Telemetriedaten dem entsprechenden Dienst übergeben können.
Ohne die Unterstützung der Weitergabe können nachgelagerte Dienste keine Spans für einen Trace generieren. Vorhandene Spans sind nicht betroffen. Die Microdienst-Beobachtbarkeits-Plug-ins unterstützen das OpenCensus-Binärformat für die Codierung und deren Trace-Kontext.
Spans
Der Name eines Spans wird so formatiert:
Typ | Beispielwert | Nutzung |
---|---|---|
RPC-Span |
[Sent|Recv].helloworld.Greeter.SayHello
|
Der Span-Name ist der vollständige Methodenname, verbunden mit Punkten, ohne Präfix-Schrägstrich. Span-Namen haben das Präfix Sent. für CLIENT-RPC-Spans und Recv. für SERVER-RPC-Spans vor dem vollständigen Methodennamen. |
Versuchs-Span |
Attempt.helloworld.Greeter.SayHello
|
Fügt das Präfix Attempt. vor dem vollständigen Methodennamen ein. |
Span-Labels
Die Integrationen bieten verschiedene Span-Labels.
Bei Versuchs-Spans sind zwei zusätzliche Wiederholungsattribute (Span-Labels) angehängt:
Label | Beispielwert | Nutzung |
---|---|---|
previous-rpc-attempts | 0 |
Die Zahl der Wiederholungsversuche vor diesem RPC. |
transparent-retry | True/False
|
Gibt an, ob dieser RPC durch einen transparenten Wiederholungsversuch initiiert wird. |
Messwertdefinitionen
Die folgenden Messwerte sind verfügbar und werden in einem Dashboard mit dem Namen Microservices (gRPC) Monitoring für gängige Nutzerverhalten angezeigt:
Im Folgenden finden Sie Messwerte aus den clientseitigen gRPC-Messwerten:
Name des Messwerts | Beschreibung | Art, Typ, Einheit | Labels |
---|---|---|---|
custom.googleapis.com/opencensus/grpc.io/client/started_rpcs |
Die Anzahl der gestarteten Client-RPC-Versuche, einschließlich der noch nicht abgeschlossenen Versuche. | Kumulativ, Int64, 1 | grpc_client_method |
custom.googleapis.com/opencensus/grpc.io/client/completed_rpcs |
Die Anzahl der Client-RPCs, die abgeschlossen wurden, z. B. wenn eine Antwort vom Server empfangen oder gesendet wurde. | Kumulativ, Int64, 1 | grpc_client_method , grpc_client_status |
custom.googleapis.com/opencensus/grpc.io/client/roundtrip_latency |
End-to-End-Zeit benötigt um einen RPC-Versuch abzuschließen, einschließlich der Zeit für die Auswahl eines Subkanals. | Kumulativ, Verteilung, ms | grpc_client_method |
custom.googleapis.com/opencensus/grpc.io/client/api_latency |
Die Gesamtzeit, die von der gRPC-Bibliothek benötigt wird, um einen RPC abzuschließen, aus Sicht der Anwendung. | Kumulativ, Verteilung, ms | grpc_client_method , grpc_client_status |
custom.googleapis.com/opencensus/grpc.io/client/sent_compressed_message_bytes_per_rpc |
Die Gesamtzahl der komprimierten und nicht verschlüsselten Byte in allen Anfragenachrichten pro RPC-Versuch. | Kumulativ, Verteilung, nach | grpc_client_method , grpc_client_status |
custom.googleapis.com/opencensus/grpc.io/client/received_compressed_message_bytes_per_rpc |
Die Gesamtzahl der (komprimierten, nicht verschlüsselten) Byte in allen Antwortnachrichten pro RPC-Versuch. | Kumulativ, Verteilung, nach | grpc_client_method , grpc_client_status |
Die folgenden gRPC-Serverseitigen messwerte sind verfügbar:
Name des Messwerts | Beschreibung | Art, Typ, Einheit | Labels |
---|---|---|---|
custom.googleapis.com/opencensus/grpc.io/server/started_rpcs |
Die Anzahl der RPCs, die jemals auf dem Server empfangen wurden, einschließlich RPCs, die noch nicht abgeschlossen wurden. |
Kumulativ, Int64, 1 | grpc_server_method |
custom.googleapis.com/opencensus/grpc.io/server/completed_rpcs |
Die Gesamtzahl der abgeschlossenen RPCs, z. B. wenn eine Antwort vom Server gesendet wird. |
Kumulativ, Int64, 1 | grpc_server_method , grpc_server_status |
custom.googleapis.com/opencensus/grpc.io/server/sent_compressed_message_bytes_per_rpc |
Die Gesamtzahl der (komprimierten, nicht verschlüsselten) Byte in allen Antwortnachrichten pro RPC. |
Kumulativ, Verteilung, nach | grpc_server_method , grpc_server_status |
custom.googleapis.com/opencensus/grpc.io/server/received_compressed_message_bytes_per_rpc |
Die Gesamtzahl der (komprimierten, nicht verschlüsselten) Byte in allen Anfragenachrichten pro RPC. |
Kumulativ, Verteilung, nach | grpc_server_method , grpc_server_status |
custom.googleapis.com/opencensus/grpc.io/server/server_latency
|
Die Gesamtzeit, die ein RPC aus Sicht des Servertransport (HTTP2 / inproc / cronet) benötigt hat. |
Kumulativ, Verteilung, ms | grpc_server_method |
Jede Verteilung in der obigen Tabelle enthält ein Histogramm mit Buckets wie folgende:
Größe in Byte: 0, 1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864, 268435456, 1073741824, 4294967296
Latenz in ms: 0; 0,01; 0,05; 0,1; 0,3; 0,6; 0,8; 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1000, 2000, 5000, 10000, 20000, 50000, 100000
Tag-Beschreibung
grpc_client_method
: Vollständiger gRPC-Methodenname, einschließlich Paket, Dienst und Methode, z. B.google.bigtable.v2.Bigtable/CheckAndMutateRow
grpc_client_status
: empfangener gRPC-Serverstatuscode, z. B.OK
,CANCELLED
,DEADLINE_EXCEEDED
grpc_server_method
: Vollständiger gRPC-Methodenname, einschließlich Paket, Dienst und Methode, z. B.com.exampleapi.v4.BookshelfService/Checkout
grpc_server_status
: zurückgegebener gRPC-Server-Statuscode, z. B.OK
,CANCELLED
,DEADLINE_EXCEEDED
Logdatensatzdefinitionen
Die Logs für die Beobachtbarkeit von Mikrodiensten werden mithilfe des Lognamens in Cloud Logging hochgeladen. PROJECT_ID
ist der Platzhalter für den String, der Ihr Projekt darstellt:
logName=projects/[PROJECT_ID]/logs/microservices.googleapis.com%2Fobservability%2Fgrpc
Im Folgenden sehen Sie die JSON-Darstellung des generierten Logdatensatzes:
{
"authority": string,
"callId": string,
"type": string,
"logger": string,
"serviceName": string,
"methodName": string,
"peer": {
"type": string,
"address": string,
"ipPort": int
},
"payload": {
"timeout": string,
"metadata":
{
string: string,
string: string
},
"statusCode": string,
"statusMessage": string,
"statusDetails": string,
"message": string,
"messageLength": int,
},
"sequenceId": int
}
In der folgenden Tabelle werden die Felder aus dem Logeintrag beschrieben:
Fields | Spezifikation |
---|---|
authority | String Ein einzelner Prozess kann verwendet werden, um mehrere virtuelle Server mit unterschiedlichen Identitäten auszuführen. Der Wert unter "authority" ist der Name einer solchen Serveridentität. Er ist normalerweise ein Teil des URI in Form "host" oder "host:port". |
callId | String Identifiziert eindeutig einen [client/server]-Aufruf, der eine UUID ist. Jeder Aufruf kann mehrere Logeinträge enthalten. Sie haben alle dieselbe callId. |
Typ | String Der Typ des Logereignisses. Ereignistypen sind: EVENT_TYPE_UNKNOWN CLIENT_HEADER SERVER_HEADER CLIENT_MESSAGE SERVER_MESSAGE CLIENT_HALF_CLOSE SERVER_TRAILER CANCEL |
logger | String Der Typ des Ereignis-Loggers. Die Typen des Ereignis-Loggers sind: LOGGER_UNKNOWN , CLIENT , SERVER |
serviceName | String Der Name des Dienstes |
methodName | String Der Name der RPC-Methode. |
Peering-Komponente | Objekt Peer-Adressinformationen. Auf Clientseite wird der Peer bei Server-Header- und Trailer-Ereignissen protokolliert. Auf der Serverseite wird der Peer immer im Client-Header-Ereignis protokolliert. |
peer.type | String Der Typ der Adresse, ob IPv4, IPv6 oder UNIX. |
peer.address | String Der Inhalt der Adresse. |
peer.ip_port | Int Die Portnummer für die Adresse. Nur für IPv4- und IPv6-Adressen verfügbar. |
payload | Objekt Die Nutzlast kann je nach Ereignis eine Kombination aus Metadaten, Zeitlimit, Nachricht und Status enthalten.
|
payload.timeout | String Ein String, der google.protobuf.Duration darstellt, z. B. "1,2 s".Der RPC-Zeitüberschreitungswert. |
payload.metadata | Zuordnung[String, String] Wird von Header-Ereignis oder Trailer-Ereignis verwendet. |
payload.message | String (Byte) Die Nachrichtennutzlast. |
payload.messageLength | Int Größe der Nachricht, unabhängig davon, ob die vollständige Nachricht protokolliert wird (z. B. kann sie gekürzt oder weggelassen werden). |
payload.statusCode | String Der gRPC-Statuscode. |
payload.statusMessage | String Die gRPC-Statusmeldung. |
payload.statusDetails | String Der Wert des Metadatenschlüssels grpc-status-details-bin , falls vorhanden. Dies ist immer eine codierte google.rpc.Status -Nachricht. |
payloadTruncated | Bool True, wenn das Feld "Nachricht" oder "metadata" aufgrund der Konfigurationsoptionen entweder gekürzt oder weggelassen wird. |
sequenceId | Int Die Nachrichtensequenz-ID für diesen Aufruf. Die erste Nachricht hat den Wert 1, um sie von einem nicht festgelegten Wert zu unterscheiden. Zweck dieses Felds ist es, fehlende Einträge in Umgebungen zu erkennen, in denen die Langlebigkeit oder Reihenfolge nicht garantiert ist. |
Ressourcenlabels
Ressourcenlabels identifizieren die Quelle, die Beobachtbarkeitsdaten generiert. Jedes Ressourcenlabel ist ein Schlüssel/Wert-Paar, bei dem Schlüssel für die Quellumgebung (z. B. GKE oder Compute Engine) spezifische, vordefinierte Werte sind.
Für Messwerte und Tracing in GKE-Deployments werden Ressourcenlabels standardmäßig mit Ausnahme des Containernamens und des Namespace-Namens ausgefüllt. Die fehlenden Werte können mithilfe der Downward API ausgefüllt werden.
Im Folgenden finden Sie die Umgebungsvariablenschlüssel:
- CONTAINER_NAME
- NAMESPACE
Der Abschnitt env
im Folgenden enthält beispielsweise zwei Ressourcenlabels:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: app1
name: app1
spec:
replicas: 2
selector:
matchLabels:
run: app1
template:
metadata:
labels:
run: app1
spec:
containers:
- image: 'o11y-examples:1.00'
name: container1
ports:
- protocol: TCP
containerPort: 50051
env:
- name: CONTAINER_NAME
value: container1
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
Benutzerdefinierte Labels
Benutzerdefinierte Labels stellen zusätzliche vom Nutzer bereitgestellte Informationen in den Beobachtbarkeitsdaten dar. Labels bestehen aus einem Schlüssel und einem Wert. Das Schlüssel/Wert-Paar wird an Tracing-Daten als Span-Labels, an Messwertdaten als Messwertlabels und an Logging-Daten als Logeintrag-Labels angehängt. Alle benutzerdefinierten Labels sind vom Typ STRING.
Sie können in der Konfiguration benutzerdefinierte Labels angeben, indem Sie eine Liste von Schlüssel/Wert-Paaren für labels
angeben. Die Implementierung liest die Konfiguration und erstellt ein separates Label für jedes Schlüssel/Wert-Paar. Anschließend wird das Label an die Beobachtbarkeitsdaten angehängt. Beispiel:
"labels": {
"DATACENTER": "SAN_JOSE_DC",
"APP_ID": "24512"
}
Jeder Logeintrag enthält folgende zusätzliche Labels:
{
"DATACENTER": "SAN_JOSE_DC"
"APP_ID": "24512"
}
Nächste Schritte
- Informationen zu Messwertarten und -typen finden Sie unter Werttypen und Messwertarten.
- Informationen zu Verteilungen finden Sie auf der Referenzseite für Verteilungen.
- Informationen zum Darstellen von Verteilungsmesswerten finden Sie unter Verteilungsmesswerte.
- Informationen zu Einheiten, z. B.
1
,ms
oderBy
, finden Sie im Feld Einheit in derMetricDescriptor
-Referenz.