Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Wie analysiert man 1.0.0-Nachrichten OpenTelemetry
Dieser Abschnitt enthält Informationen, die Ihnen den Einstieg in das Parsen von OpenTelemetry 1.0.0 erleichtern.
Zunächst sollten Sie sich sprachspezifische Bindungen besorgen, mit denen Sie OpenTelemetry 1.0.0-Nachrichten in Ihrer bevorzugten Sprache analysieren können.
So erhalten Sie sprachspezifische Bindungen
-
Die Schritte hängen von Ihrer bevorzugten Sprache ab.
Gehen Sie folgendermaßen vor, um eine andere Sprache zu verwenden:
Stellen Sie sicher, dass Ihre Sprache unterstützt wird, indem Sie die Liste unter Generieren Ihrer Klassen
überprüfen. Installieren Sie den Protobuf-Compiler, indem Sie die Schritte unter Protokollpuffer herunterladen
befolgen. Laden Sie die OpenTelemetry ProtoBuf 1.0.0-Definitionen in der Release-Version 1.0.0 herunter.
Vergewissern Sie sich, dass Sie sich im Stammordner der heruntergeladenen OpenTelemetry ProtoBuf 1.0.0-Definitionen befinden. Dann erstellen Sie einen
src
-Ordner und führen Sie den Befehl aus, um sprachspezifische Bindungen zu generieren. Weitere Informationen finden Sie unter Generieren Ihrer Klassen. Nachfolgend finden Sie ein Beispiel für das Generieren von Javascript-Bindungen.
protoc --proto_path=./ --js_out=import_style=commonjs,binary:src \ opentelemetry/proto/common/v1/common.proto \ opentelemetry/proto/resource/v1/resource.proto \ opentelemetry/proto/metrics/v1/metrics.proto \ opentelemetry/proto/collector/metrics/v1/metrics_service.proto
Der folgende Abschnitt enthält Beispiele für die Verwendung der sprachspezifischen Bindungen, die Sie mit den vorherigen Anweisungen erstellen können.
Java
package com.example; import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class MyOpenTelemetryParser { public List<ExportMetricsServiceRequest> parse(InputStream inputStream) throws IOException { List<ExportMetricsServiceRequest> result = new ArrayList<>(); ExportMetricsServiceRequest request; /* A Kinesis record can contain multiple `ExportMetricsServiceRequest` records, each of them starting with a header with an UnsignedVarInt32 indicating the record length in bytes: ------ --------------------------- ------ ----------------------- |UINT32|ExportMetricsServiceRequest|UINT32|ExportMetricsService... ------ --------------------------- ------ ----------------------- */ while ((request = ExportMetricsServiceRequest.parseDelimitedFrom(inputStream)) != null) { // Do whatever we want with the parsed message result.add(request); } return result; } }
JavaScript
In diesem Beispiel wird davon ausgegangen, dass der Stammordner mit den generierten Bindungen ./
ist.
Das Datenargument der Funktion parseRecord
kann einer der folgenden Typen sein:
Uint8Array
dies ist optimal.Buffer
optimal unter KnotenArray.
8-Bit-Ganzzahlennumber
const pb = require('google-protobuf') const pbMetrics = require('./opentelemetry/proto/collector/metrics/v1/metrics_service_pb') function parseRecord(data) { const result = [] // Loop until we've read all the data from the buffer while (data.length) { /* A Kinesis record can contain multiple `ExportMetricsServiceRequest` records, each of them starting with a header with an UnsignedVarInt32 indicating the record length in bytes: ------ --------------------------- ------ ----------------------- |UINT32|ExportMetricsServiceRequest|UINT32|ExportMetricsService... ------ --------------------------- ------ ----------------------- */ const reader = new pb.BinaryReader(data) const messageLength = reader.decoder_.readUnsignedVarint32() const messageFrom = reader.decoder_.cursor_ const messageTo = messageFrom + messageLength // Extract the current `ExportMetricsServiceRequest` message to parse const message = data.subarray(messageFrom, messageTo) // Parse the current message using the ProtoBuf library const parsed = pbMetrics.ExportMetricsServiceRequest.deserializeBinary(message) // Do whatever we want with the parsed message result.push(parsed.toObject()) // Shrink the remaining buffer, removing the already parsed data data = data.subarray(messageTo) } return result }
Python
Sie müssen die var-int
-Trennzeichen selbst lesen oder die internen Methoden _VarintBytes(size)
und _DecodeVarint32(buffer, position)
verwenden. Diese geben die Position im Puffer direkt nach den Größenbytes zurück. Die Leseseite erstellt einen neuen Puffer, der darauf beschränkt ist, nur die Bytes der Nachricht zu lesen.
size = my_metric.ByteSize() f.write(_VarintBytes(size)) f.write(my_metric.SerializeToString()) msg_len, new_pos = _DecodeVarint32(buf, 0) msg_buf = buf[new_pos:new_pos+msg_len] request = metrics_service_pb.ExportMetricsServiceRequest() request.ParseFromString(msg_buf)
Go
Verwenden Sie Buffer.DecodeMessage()
.
C#
Verwenden Sie CodedInputStream
. Diese Klasse kann Nachrichten mit größenbegrenztem Abstand lesen.
C++
Die in google/protobuf/util/delimited_message_util.h
beschriebenen Funktionen können größenbegrenzte Nachrichten lesen.
Andere Sprachen
Informationen zu anderen Sprachen finden Sie unter Herunterladen von Protokollpuffern
Bedenken Sie bei der Implementierung des Parsers, dass ein Kinesis-Datensatz mehrere ExportMetricsServiceRequest
Protokollpuffer-Nachrichten enthalten kann, von denen jede mit einem Header mit einem UnsignedVarInt32
beginnt, das die Datensatzlänge in Byte angibt.