Sie können Log-, Messwert- und Trace-Daten im OTLP-Format in Google Cloud Observability aufnehmen, indem Sie die Telemetry (OTLP) API verwenden, die das OpenTelemetry Protocol implementiert. Mit dieser API können Sie anbieterneutrale Telemetriedaten aus OpenTelemetry SDKs und Collectors erfassen, ohne benutzerdefinierte Google Cloud Exporters zu verwenden.
Wenn Sie Telemetrie mit der Telemetry API an Ihr Projekt senden, verarbeitet Google Cloud Observability jedes Signal so:
- Logdaten:Konvertiert OTLP-Logdatensätze in Logeinträge und leitet sie zur Speicherung weiter.
- Messwertdaten:Ordnet Messwertdaten Prometheus-Zeitreihen in Cloud Monitoring zu.
- Trace-Daten:Speichert verteilte Traces in einem Format, das im Allgemeinen mit OTLP übereinstimmt.
Wenn Sie Arbeitslasten in Google Kubernetes Engine ausführen, können Sie Managed OpenTelemetry für GKE verwenden, anstatt einen OpenTelemetry Collector manuell bereitzustellen und zu verwalten.
Protokollunterstützung
Der OTLP-Endpunkt unterstützt alle OTLP-Transport- und ‑Serialisierungsprotokolle, einschließlich http/protobuf, http/json und grpc. Wenn Sie Daten direkt aus Anwendungen exportieren, die SDKs verwenden, empfehlen wir die Verwendung des gRPC-OTLP-Exporters anstelle von HTTP-Exportern, da die meisten SDK-Exporter keine Unterstützung für das dynamische Aktualisieren von Tokens bieten.
Authentifizierung
Sie müssen Ihre Exporter mit den Anmeldedaten konfigurieren, die zum Senden von Daten an Ihr Google Cloud -Projekt erforderlich sind. Wenn Sie beispielsweise Collectors verwenden, authentifizieren Sie sich in der Regel mit der Erweiterung googleclientauth mit Google-Anmeldedaten.
Ein Beispiel für die Authentifizierung bei Verwendung des direkten Exports von Tracedaten finden Sie unter Authentifizierung konfigurieren. In diesem Beispiel wird veranschaulicht, wie Sie den Exporter mit Ihren Google Cloud Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) konfigurieren und Ihrer Anwendung eine sprachspezifische Google Auth-Bibliothek hinzufügen.
Wenn Sie Telemetriedaten mit der Telemetry API an Ihr Google Cloud -Projekt senden möchten, müssen Sie außerdem Folgendes tun:
Kontingentprojekt konfigurieren Weitere Informationen finden Sie unter Kontingentprojekt festlegen.
Weisen Sie dem Nutzer oder dem Dienstkonto, das von der Anwendung verwendet wird, die folgenden IAM-Rollen (Identity and Access Management) zu:
- Rolle Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) für das Kontingentprojekt. - Die Rolle Cloud Telemetry Writer (
roles/telemetry.writer) für das Projekt. Mit dieser Rolle kann Ihre Anwendung Log-, Messwert- und Tracedaten schreiben.
- Rolle Service Usage Consumer (
OTLP-Aufnahme
In diesem Abschnitt wird beschrieben, wie Ihre Log-, Messwert- und Trace-Daten von OTLP in Google Cloud Observability-Datenstrukturen konvertiert werden.
Datenaufnahme von Protokollen
Wenn Sie die Telemetry API zum Erfassen von OTLP-formatierten Logs verwenden, werden Ihre Logdaten in Cloud Logging-Logeinträge konvertiert. Eine eingehende OTLP-formatierte Log-Anfrage in JSON hat die folgende allgemeine Struktur:
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"scope": { ...}
"logRecords": [...]
}
]
}
]
Jedes Element in jedem logRecords-Array wird zu einem einzelnen Cloud Logging-Logeintrag. Die resource-Attribute bestimmen die überwachte Ressource im resultierenden LogEntry. Weitere Informationen dazu, welche Attribute für die Aufnahme von OTLP-formatierten Logs erforderlich sind, finden Sie unter OTLP-Attribute zur Zuordnung von Ressourcentypen.
Zur Unterstützung der Aufnahme von OTLP-formatierten Logs enthält die Cloud Logging-Struktur LogEntry ein zusätzliches Feld: otel. Da sich die Datenmodelle von OTLP und Cloud Logging in der Struktur unterscheiden, wird im Feld otel eine Kopie der Ressourcen-, Bereichs- und Entitätsmetadaten aus der eingehenden OTLP-Anfrage gespeichert.
Wenn Sie beispielsweise eine OTLP-resourceLogs-Nutzlast wie die folgende an die Telemetry API senden, enthält jeder resultierende Logeintrag ein resource-Feld (für die überwachte Ressource) und ein otel-Feld, wie auf den anderen Tabs zu sehen ist:
resourceLogs
{
"resourceLogs": [
{
"resource": {
"attributes": [
{
"key": "gcp.project_id",
"value": { "stringValue": "PROJECT_ID" }
},
{
"key": "gcp.resource_type",
"value": { "stringValue": "global" }
}
]
},
"scopeLogs": [
{
"scope": {
"name": "my.library",
"version": "1.0.0",
"attributes": [
{
"key": "my.scope.attribute",
"value": { "stringValue": "some scope attribute" }
}
]
},
"logRecords": [ ... ]
}
]
}
]
}
resource
{
...
"resource": {
"labels": {
"project_id": "PROJECT_ID"
},
"type": "global"
},
...
}
otel
{
...
"otel": {
"resource": {
"attributes": {
"gcp.project_id": "PROJECT_ID",
"gcp.resource_type": "global"
}
},
"scope": {
"attributes": {
"my.scope.attribute": "some scope attribute"
},
"name": "my.library",
"version": "1.0.0"
}
},
...
}
Da Cloud Logging-Logeinträge in sich geschlossen sind und nicht mit externen Ressourcenschemas verknüpft werden, werden alle OTLP-Ressourcen-, ‑Bereichs- und ‑Entitätsmetadaten in jeden Logeintrag kopiert.
Aufnahme von Messwertdaten
OTLP für Prometheus-Messwerte funktioniert nur, wenn Sie den OpenTelemetry Collector in Version 0.140.0 oder höher verwenden.
Wenn Messwerte mit einem OpenTelemetry Collector und dem otlphttp-Exporter in Cloud Monitoring aufgenommen oder direkt mit einem OpenTelemetry SDK gesendet werden, werden die OTLP-Messwerte Cloud Monitoring-Messwertstrukturen zugeordnet. Weitere Informationen zu diesen Zuordnungen finden Sie hier:
- Zuordnung zwischen OTLP-Ressourcen und überwachten Cloud Monitoring-Ressourcen.
- Zuordnung zwischen OTLP-Messwerten und Cloud Monitoring-Messwerten
Google Cloud Observability konvertiert Messwerte in das Prometheus-Zeitreihenformat. Messwertnamen dürfen entweder keine Domain oder die Domain prometheus.googleapis.com haben.
Nach der Konvertierung enthält der Messwertname das Präfix prometheus.googleapis.com und ein zusätzliches Suffix, das auf der OTLP-Punktart basiert. Der resultierende Cloud Monitoring-Messwert hat die folgende Struktur:
prometheus.googleapis.com/{metric_name}/{suffix}
Außerdem wird für jede eindeutige OpenTelemetry-Ressource der Messwert target_info hinzugefügt, der alle Ressourcenattribute mit Ausnahme von service.name, service.instance.id und service.namespace enthält.
Da Messwertnamen und Labelschlüssel in Cloud Monitoring nicht vollständig UTF‑8 unterstützen, können Messwertdaten abgelehnt werden:
- Messwertnamen, die nicht dem regulären Ausdruck
[a-zA-Z][a-zA-Z0-9_:./-]*entsprechen, werden abgelehnt. Die einzigen Sonderzeichen, die in Messwertnamen zulässig sind, sind_:./-. - Datenpunkte mit Attributen (Label-Schlüsseln), die nicht dem regulären Ausdruck
[a-zA-Z_][a-zA-Z0-9_.]*entsprechen, werden abgelehnt. Die einzigen Sonderzeichen, die in Labelschlüsseln zulässig sind, sind_.. Alle Sonderzeichen sind in Labelwerten zulässig.
Damit Ihre Messwerte aus diesen Gründen nicht abgelehnt werden, verwenden Sie die Funktion replace_pattern, um Ihre Messwertnamen und Attribute zu transformieren.
Trace-Datenaufnahme
Unabhängig davon, ob Sie die Telemetry API oder die Cloud Trace API verwenden, werden eingehende Trace-Daten in einem Format gespeichert, das mit OTLP kompatibel ist. Wir empfehlen jedoch die Verwendung der Telemetry API, da sie höhere Erfassungsquoten als die Cloud Trace API bietet.
Im Folgenden finden Sie ein Beispiel für Trace-Daten, die von einer Anwendung an Ihr Google Cloud -Projekt gesendet werden könnten:
{
"resourceSpans": [
{
"resource": {
"attributes": [...]
},
"scopeSpans": [
{
"scope": { ...},
"spans": [...]
}
]
}
]
}
Jedes Element in jedem scopeSpans.spans-Array wird zu einem einzelnen gespeicherten Span:
- Das Feld
resourcejedes Zeitraums enthält eine Kopie derresourceSpans.resource.attributes-Daten. - Das Feld
instrumentation_scopejedes Zeitraums enthält eine Kopie derscopeSpans.scope-Daten. - Jeder Span entspricht einem Eintrag im Array
scopeSpans.spans. Felder wietraceId,spanIdundkindwerden ähnlichen Feldern im Trace-Schema zugeordnet.
Weitere Informationen finden Sie in folgenden Dokumenten:
Abrechnung
Die Abrechnung von Log-, Messwert- und Tracedaten, die über die Telemetry API aufgenommen werden, hängt vom Telemetriesignal ab. Weitere Informationen
Abrechnung von Logdaten
Wenn Sie die Telemetry API zum Erfassen von Logs verwenden, kann sich das Logvolumen ändern. Das kann sich auf die Speicher- und Abrechnungswerte von Cloud Logging auswirken.
Die größten Änderungen an Speicher und Abrechnung für Ihr Google Cloud -Projekt treten ein, wenn Folgendes zutrifft:
- Das Feld „
resource“ enthält Attribute mit hoher Kardinalität oder eine große Anzahl von Attributen. Diese Ressourcenattribute bestimmen die überwachte Ressource im resultierendenLogEntry. - Das Feld
scopeLogsenthält eine große Anzahl von Elementen in denlogRecords-Arrays. Die FelderscopeLogs.scopewerden für jeden einzelnen Logeintrag in das Feldotelkopiert.
Da diese Ressourcen- und Bereichsmetadaten in jeden einzelnen Logeintrag kopiert werden, kann das gespeicherte Logvolumen zunehmen.
Um das Speichervolumen zu minimieren, empfehlen wir Folgendes:
- Verwenden Sie einen OpenTelemetry Collector-Prozessor, z. B. einen
transform-Prozessor, um unnötige Ressourcen- oder Bereichsattribute zu entfernen, bevor Sie die Daten exportieren. - Wenn Sie die zusätzlichen Metadaten im Feld
otelnicht benötigen, verwenden Sie die Legacy-Zuordnungsoptiongcp.use_legacy_mapping. Dadurch wird verhindert, dass das Feldotelausgefüllt wird.
Abrechnung von Messwertdaten
Die Abrechnung für OTLP-Messwerte erfolgt unter der SKU „Aufgenommene Prometheus-Stichproben“, die auch für Messwerte aus Google Cloud Managed Service for Prometheus verwendet wird.
Abrechnung von Trace-Daten
Die API, die Sie zum Senden von Trace-Daten an Ihr Projekt verwenden, hat keinen Einfluss darauf, wie die Gebühren für diese Daten berechnet werden.
Log-, Messwert- und Trace-Daten abfragen
Mit den Explorer-Seiten „Log-Explorer“, „Metrics Explorer“ und „Trace-Explorer“ können Sie Ihre Log-, Messwert- und Tracedaten abfragen. Sie können Ihre Log- und Tracedaten auch mit SQL auf der Seite „Observability Analytics“ analysieren.
Die folgenden Tipps können hilfreich sein, wenn Sie Ihre Messwertdaten mit dem Metrics Explorer abfragen:
Wichtig: Wenn Sie Messwertnamen und Labelschlüssel mit Sonderzeichen abfragen, die nicht dem Doppelpunkt (
:) und dem Unterstrich (_) entsprechen, müssen Sie sie gemäß der UTF-8-Spezifikation von PromQL in geschweifte Klammern ({}) und Anführungszeichen (") setzen. Die folgenden Abfragen sind beispielsweise gültig:{"my.metric.name"}{"my.metric.name", "label.key.KEY"="value"}
Wenn Sie das Label
lebeim Abfragen exponentieller Histogramme beibehalten, kann das zu unerwarteten Ergebnissen führen. Je typischer diehistogram_quantile(.99, sum by (le) (metric))-Anfragen sind, desto wahrscheinlicher ist es, dass sie funktionieren.Unter bestimmten Umständen, z. B. bei sehr spärlichen Deltas, werden Deltamesswerte möglicherweise nicht richtig abgefragt.
Limits und Kontingente
Die Limits für die Telemetry API gelten für alle Signaltypen.
Außerdem gelten die folgenden Kontingente und Limits:
- Log-Daten: Es gelten die Kontingente und Limits der Cloud Logging API.
Messwertdaten: Es gelten die Kontingente und Limits der Cloud Monitoring API. Messwerte dürfen beispielsweise nicht mehr als 200 Labels haben.
Das Standardkontingent für Messwerte, die von der Telemetry API aufgenommen werden, beträgt 60.000 Anfragen pro Minute. Bei einer maximalen Batchgröße von 200 Punkten pro Anfrage entspricht dieses Kontingent einem effektiven Standardkontingent von 200.000 Samples pro Sekunde. Sie können eine Kontingenterhöhung anfordern.
Trace-Daten: Es gelten keine zusätzlichen Kontingente oder Limits.
Nächste Schritte
- Informationen zur Migration zu
otlphttp-Exporter von einem anderen Exporter finden Sie unter Zum OTLP-Exporter migrieren. - Eine Anleitung zum Bereitstellen und Verwenden des OpenTelemetry Collectors mit der Telemetry API finden Sie unter Collector bereitstellen und verwenden.
- Informationen zum Schreiben von OTLP-formatierten Logs in die Telemetry API finden Sie unter OTLP-formatierte Logs in die Telemetry API schreiben.
- Informationen zum Senden von Messwerten an die Telemetry API aus Anwendungen, in denen SDKs verwendet werden, finden Sie unter SDKs zum Senden von Messwerten aus Anwendungen verwenden.
- Informationen zur Verwendung eines OpenTelemetry Collectors und der Telemetry API mit der OpenTelemetry-Instrumentierung ohne Code finden Sie unter OpenTelemetry-Instrumentierung ohne Code für Java verwenden.