Cara mengurai pesan OpenTelemetry 1.0.0 - Amazon CloudWatch

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Cara mengurai pesan OpenTelemetry 1.0.0

Bagian ini memberikan informasi untuk membantu Anda memulai dengan parsing OpenTelemetry 1.0.0.

Pertama, Anda harus mendapatkan binding khusus bahasa, yang memungkinkan Anda mengurai pesan OpenTelemetry 1.0.0 dalam bahasa pilihan Anda.

Untuk mendapatkan ikatan bahasa tertentu
  • Langkah-langkahnya tergantung pada bahasa pilihan Anda.

    • Untuk menggunakan Java, tambahkan dependensi Maven berikut ke proyek Java Anda: Java >> 0.14.1OpenTelemetry .

    • Untuk menggunakan bahasa lain, ikuti langkah-langkah ini:

      1. Pastikan bahasa Anda didukung dengan memeriksa daftar di Menghasilkan Kelas Anda.

      2. Instal alat kompilasi Protobuf dengan mengikuti langkah-langkah di Unduh Buffer Protokol.

      3. Unduh ProtoBuf definisi OpenTelemetry 1.0.0 di Rilis versi 1.0.0.

      4. Konfirmasikan bahwa Anda berada di folder root dari definisi OpenTelemetry 1.0.0 ProtoBuf yang diunduh. Kemudian buatlah folder src lalu jalankan perintah untuk menghasilkan ikatan bahasa khusus. Untuk informasi selengkapnya, silakan lihat Menghasilkan Kelas Anda.

        Berikut ini adalah contoh untuk cara menghasilkan ikatan Javascript.

        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

Bagian berikut mencakup contoh-contoh menggunakan ikatan bahasa khusus yang dapat Anda bangun dengan menggunakan petunjuk sebelumnya.

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

Contoh ini mengasumsikan bahwa folder akar dengan ikatan yang dihasilkan adalah ./

Argumen data dari fungsi parseRecord dapat menjadi salah satu dari jenis berikut:

  • Uint8Array ini adalah optimal

  • Buffer menjadi optimal di bawah simpul

  • Array.number adalah bilangan bulat 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

Anda harus membaca anti pembatas var-int oleh Anda sendiri atau gunakan metode internal _VarintBytes(size) dan _DecodeVarint32(buffer, position). Hal ini akan mengembalikan posisi dalam buffer langsung menyusul ukuran bita. Bagian baca akan mengonstruksi buffer baru yang terbatas pada pembacaan byte pesan saja.

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)

Kunjungi

Gunakan Buffer.DecodeMessage().

C#

Gunakan CodedInputStream. Kelas ini dapat membaca pesan dengan ukuran tak terbatas.

C++

Fungsi yang dijelaskan dalam google/protobuf/util/delimited_message_util.h dapat membaca pesan yang dibatasi ukuran.

Bahasa lain

Untuk bahasa lain, silakan lihat Unduh Protokol Buffer.

Saat menerapkan alat pengurai, pertimbangkan bahwa sebuah catatan Kinesis dapat berisikan beberapa pesan Protokol Buffer ExportMetricsServiceRequest , masing-masing dimulai dengan sebuah header dengan sebuah UnsignedVarInt32 yang menunjukkan panjang catatan dalam bita.