Come analizzare i messaggi 1.0.0 OpenTelemetry - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Come analizzare i messaggi 1.0.0 OpenTelemetry

Questa sezione fornisce informazioni per aiutarti a iniziare con l'analisi della 1.0.0. OpenTelemetry

Innanzitutto, dovresti ottenere associazioni specifiche per la lingua, che ti consentano di analizzare i messaggi 1.0.0 nella tua lingua preferita. OpenTelemetry

Per ottenere associazioni specifiche della lingua

Nella sezione seguente sono inclusi esempi di utilizzo delle associazioni specifiche della lingua che puoi creare utilizzando le istruzioni precedenti.

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

Questo esempio presuppone che la cartella principale con le associazioni generate sia ./

L'argomento dati della funzione parseRecord può essere uno dei seguenti tipi:

  • Uint8Array è ottimale

  • Buffer ottimale sotto il nodo

  • Array.number numero intero a 8 bit

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

È necessario leggere i delimitatori var-int in autonomia o utilizzare i metodi interni _VarintBytes(size) e _DecodeVarint32(buffer, position). Questi restituiscono la posizione nel buffer subito dopo i byte di dimensione. Il lato lettura costruisce un nuovo buffer che è limitato alla lettura solo dei byte del messaggio.

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

Utilizza Buffer.DecodeMessage().

C#

Utilizza CodedInputStream. Questa classe può leggere messaggi delimitati da dimensioni.

C++

Le funzioni descritte in google/protobuf/util/delimited_message_util.h possono leggere messaggi delimitati dalle dimensioni.

Altre lingue

Per le altre lingue, consulta Download Protocol Buffers.

Nell'implementare il parser, considera che un record Kinesis può contenere più messaggi di buffer di protocollo ExportMetricsServiceRequest, ognuno dei quali inizia con un'intestazione con un UnsignedVarInt32 che indica la lunghezza del record in byte.