前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Language APIs & SDKs-C++-Exporters

Language APIs & SDKs-C++-Exporters

作者头像
方亮
发布于 2024-05-24 11:22:17
发布于 2024-05-24 11:22:17
10400
代码可运行
举报
文章被收录于专栏:方亮方亮
运行总次数:0
代码可运行
大纲

  • *Exporters*
    • *Available exporters*
    • *OTLP*
      • *Collector Setup*
      • *Dependencies*
    • *Usage*
      • *Console*
    • *Jaeger*
    • *Prometheus*
      • *Backend Setup*
      • *Dependencies*
    • *Zipkin*
      • *Backend Setup*
      • *Dependencies#*
    • *Other available exporters*
    • *Batching span and log records*

Exporters

导出器

Send telemetry to the OpenTelemetry Collector to make sure it’s exported correctly. Using the Collector in production environments is a best practice. To visualize your telemetry, export it to a backend such as Jaeger , Zipkin , Prometheus , or a vendor-specific backend. 将遥测数据发送到OpenTelemetry Collector以确保其导出正确。在生产环境中使用收集器是最佳实践。要可视化您的遥测数据,请将其导出到后端,例如 Jaeger、Zipkin、 Prometheus或特定于供应商的后端。

Available exporters

可用的导出器

The registry contains a list of exporters for C++. 注册表包含C++的导出器列表。

Among exporters, OpenTelemetry Protocol (OTLP) exporters are designed with the OpenTelemetry data model in mind, emitting OTel data without any loss of information. Furthermore, many tools that operate on telemetry data support OTLP (such as Prometheus , Jaeger, and most vendors), providing you with a high degree of flexibility when you need it. To learn more about OTLP, see OTLP Specification. 在导出器中,OpenTelemetry Protocol (OTLP)导出器在设计时考虑了 OpenTelemetry 数据模型,可在不丢失任何信息的情况下发出OTel数据。此外,许多对遥测数据进行操作的工具都支持OTLP(例如Prometheus、Jaeger和大多数供应商),在您需要时为您提供高度的灵活性。要了解有关OTLP的更多信息,请参阅OTLP规范。

This page covers the main OpenTelemetry C++ exporters and how to set them up. 本页介绍了主要的 OpenTelemetry C++ 导出器以及如何设置它们。

OTLP

Collector Setup

收集器设置

Note 笔记 If you have a OTLP collector or backend already set up, you can skip this section and setup the OTLP exporter dependencies for your application. 如果您已经设置了OTLP收集器或后端,则可以跳过本节并为您的应用程序设置OTLP导出器依赖项。

To try out and verify your OTLP exporters, you can run the collector in a docker container that writes telemetry directly to the console. 要尝试和验证OTLP导出器,您可以在Docker容器中运行收集器,将遥测数据直接写入控制台。

In an empty directory, create a file called collector-config.yaml with the following content: 在空目录中,创建一个包含collector-config.yaml以下内容的文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
exporters:
  debug:
    verbosity: detailed
service:
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [debug]
    metrics:
      receivers: [otlp]
      exporters: [debug]
    logs:
      receivers: [otlp]
      exporters: [debug]

Now run the collector in a docker container: 现在在 Docker 容器中运行收集器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -p 4317:4317 -p 4318:4318 --rm -v $(pwd)/collector-config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector

This collector is now able to accept telemetry via OTLP. Later you may want to configure the collector to send your telemetry to your observability backend. 该收集器现在能够通过OTLP接受遥测数据。稍后您可能需要配置收集器以将遥测数据发送到可观测性后端。

Dependencies

If you want to send telemetry data to an OTLP endpoint (like the OpenTelemetry Collector, Jaeger or Prometheus), you can choose between two different protocols to transport your data: 如果您想将遥测数据发送到OTLP端点(例如 OpenTelemetry Collector、Jaeger或 Prometheus),您可以选择两种不同的协议来传输数据:

  • HTTP/protobuf
  • gRPC

Make sure that you have set the right cmake build variables while building OpenTelemetry C++ from source : 确保在从源代码构建OpenTelemetry C++时设置了正确的cmake构建变量:

  • -DWITH_OTLP_GRPC=ON: To enable building OTLP gRPC exporter. 启用构建 OTLP gRPC 导出器。
  • -DWITH_OTLP_HTTP=ON: To enable building OTLP HTTP exporter. 启用构建 OTLP HTTP 导出器。

Usage

用法

Next, configure the exporter to point at an OTLP endpoint in your code. 接下来,将导出器配置为指向代码中的 OTLP 端点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// HTTP/proto
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/batch_span_processor_factory.h"
#include "opentelemetry/sdk/trace/batch_span_processor_options.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/provider.h"
#include "opentelemetry/sdk/trace/tracer_provider.h"

#include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h"
#include "opentelemetry/metrics/provider.h"
#include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
#include "opentelemetry/sdk/metrics/meter_context_factory.h"
#include "opentelemetry/sdk/metrics/meter_provider.h"
#include "opentelemetry/sdk/metrics/meter_provider_factory.h"

#include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h"
#include "opentelemetry/logs/provider.h"
#include "opentelemetry/sdk/logs/logger_provider_factory.h"
#include "opentelemetry/sdk/logs/processor.h"
#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"

namespace trace_api = opentelemetry::trace;
namespace trace_sdk = opentelemetry::sdk::trace;

namespace metric_sdk = opentelemetry::sdk::metrics;
namespace metrics_api = opentelemetry::metrics;

namespace otlp = opentelemetry::exporter::otlp;

namespace logs_api = opentelemetry::logs;
namespace logs_sdk = opentelemetry::sdk::logs;


void InitTracer()
{
  trace_sdk::BatchSpanProcessorOptions bspOpts{};
  otlp::OtlpHttpExporterOptions opts;
  opts.url = "http://localhost:4318/v1/traces";
  auto exporter  = otlp::OtlpHttpExporterFactory::Create(opts);
  auto processor = trace_sdk::BatchSpanProcessorFactory::Create(std::move(exporter), bspOpts);
  std::shared_ptr<trace_api::TracerProvider> provider =  trace_sdk::TracerProviderFactory::Create(std::move(processor));
  trace_api::Provider::SetTracerProvider(provider);
}

void InitMetrics()
{
  otlp::OtlpHttpMetricExporterOptions opts;
  opts.url = "http://localhost:4318/v1/metrics";
  auto exporter = otlp::OtlpHttpMetricExporterFactory::Create(opts);
  metric_sdk::PeriodicExportingMetricReaderOptions reader_options;
  reader_options.export_interval_millis = std::chrono::milliseconds(1000);
  reader_options.export_timeout_millis  = std::chrono::milliseconds(500);
  auto reader = metric_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter), reader_options);
  auto context = metric_sdk::MeterContextFactory::Create();
  context->AddMetricReader(std::move(reader));
  auto u_provider = metric_sdk::MeterProviderFactory::Create(std::move(context));
  std::shared_ptr<metrics_api::MeterProvider> provider(std::move(u_provider));
  metrics_api::Provider::SetMeterProvider(provider);
}

void InitLogger()
{
  otlp::OtlpHttpLogRecordExporterOptions opts;
  opts.url = "http://localhost:4318/v1/logs";
  auto exporter  = otlp::OtlpHttpLogRecordExporterFactory::Create(opts);
  auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
  std::shared_ptr<logs_api::LoggerProvider> provider =
      logs_sdk::LoggerProviderFactory::Create(std::move(processor));
  logs_api::Provider::SetLoggerProvider(provider);
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// gRPC
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/batch_span_processor_factory.h"
#include "opentelemetry/sdk/trace/batch_span_processor_options.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/provider.h"
#include "opentelemetry/sdk/trace/tracer_provider.h"

#include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h"
#include "opentelemetry/metrics/provider.h"
#include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
#include "opentelemetry/sdk/metrics/meter_context_factory.h"
#include "opentelemetry/sdk/metrics/meter_provider.h"
#include "opentelemetry/sdk/metrics/meter_provider_factory.h"

#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h"
#include "opentelemetry/logs/provider.h"
#include "opentelemetry/sdk/logs/logger_provider_factory.h"
#include "opentelemetry/sdk/logs/processor.h"
#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"

namespace trace_api = opentelemetry::trace;
namespace trace_sdk = opentelemetry::sdk::trace;

namespace metric_sdk = opentelemetry::sdk::metrics;
namespace metrics_api = opentelemetry::metrics;

namespace otlp = opentelemetry::exporter::otlp;

namespace logs_api = opentelemetry::logs;
namespace logs_sdk = opentelemetry::sdk::logs;

void InitTracer()
{
  trace_sdk::BatchSpanProcessorOptions bspOpts{};
  opentelemetry::exporter::otlp::OtlpGrpcExporterOptions opts;
  opts.endpoint = "localhost:4317";
  opts.use_ssl_credentials = true;
  opts.ssl_credentials_cacert_as_string = "ssl-certificate";
  auto exporter  = otlp::OtlpGrpcExporterFactory::Create(opts);
  auto processor = trace_sdk::BatchSpanProcessorFactory::Create(std::move(exporter), bspOpts);
  std::shared_ptr<opentelemetry::trace_api::TracerProvider> provider =
      trace_sdk::TracerProviderFactory::Create(std::move(processor));
  // Set the global trace provider
  trace_api::Provider::SetTracerProvider(provider);
}

void InitMetrics()
{
  otlp::OtlpGrpcMetricExporterOptions opts;
  opts.endpoint = "localhost:4317";
  opts.use_ssl_credentials = true;
  opts.ssl_credentials_cacert_as_string = "ssl-certificate";
  auto exporter = otlp::OtlpGrpcMetricExporterFactory::Create(opts);
  metric_sdk::PeriodicExportingMetricReaderOptions reader_options;
  reader_options.export_interval_millis = std::chrono::milliseconds(1000);
  reader_options.export_timeout_millis  = std::chrono::milliseconds(500);
  auto reader = metric_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter), reader_options);
  auto context = metric_sdk::MeterContextFactory::Create();
  context->AddMetricReader(std::move(reader));
  auto u_provider = metric_sdk::MeterProviderFactory::Create(std::move(context));
  std::shared_ptr<opentelemetry::metrics::MeterProvider> provider(std::move(u_provider));
  metrics_api::Provider::SetMeterProvider(provider);
}

void InitLogger()
{
  otlp::OtlpGrpcLogRecordExporterOptions opts;
  opts.endpoint = "localhost:4317";
  opts.use_ssl_credentials = true;
  opts.ssl_credentials_cacert_as_string = "ssl-certificate";
  auto exporter  = otlp::OtlpGrpcLogRecordExporterFactory::Create(opts);
  auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
  nostd::shared_ptr<logs_api::LoggerProvider> provider(
      logs_sdk::LoggerProviderFactory::Create(std::move(processor)));
  logs_api::Provider::SetLoggerProvider(provider);
}
Console

To debug your instrumentation or see the values locally in development, you can use exporters writing telemetry data to the console (stdout). 要调试您的装置或在开发环境中查看本地值,您可以使用导出器将遥测数据写入控制台(stdout)。

While building OpenTelemetry C++ from source the OStreamSpanExporter is included in the build by default. 从源代码构建OpenTelemetry C++时, 默认情况下将其OStreamSpanExporter包含在构建中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "opentelemetry/exporters/ostream/span_exporter_factory.h"
#include "opentelemetry/sdk/trace/exporter.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/simple_processor_factory.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/provider.h"

#include "opentelemetry/exporters/ostream/metrics_exporter_factory.h"
#include "opentelemetry/sdk/metrics/meter_provider.h"
#include "opentelemetry/sdk/metrics/meter_provider_factory.h"
#include "opentelemetry/metrics/provider.h"

#include "opentelemetry/exporters/ostream/log_record_exporter_factory.h"
#include "opentelemetry/logs/provider.h"
#include "opentelemetry/sdk/logs/logger_provider_factory.h"
#include "opentelemetry/sdk/logs/processor.h"
#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"

namespace trace_api      = opentelemetry::trace;
namespace trace_sdk      = opentelemetry::sdk::trace;
namespace trace_exporter = opentelemetry::exporter::trace;

namespace metrics_sdk      = opentelemetry::sdk::metrics;
namespace metrics_api      = opentelemetry::metrics;
namespace metrics_exporter = opentelemetry::exporter::metrics;

namespace logs_api = opentelemetry::logs;
namespace logs_sdk = opentelemetry::sdk::logs;
namespace logs_exporter = opentelemetry::exporter::logs;

void InitTracer()
{
  auto exporter  = trace_exporter::OStreamSpanExporterFactory::Create();
  auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
  std::shared_ptr<opentelemetry::trace::TracerProvider> provider = trace_sdk::TracerProviderFactory::Create(std::move(processor));
  trace_api::Provider::SetTracerProvider(provider);
}

void InitMetrics()
{
    auto exporter = metrics_exporter::OStreamMetricExporterFactory::Create();
    auto u_provider = metrics_sdk::MeterProviderFactory::Create();
    std::shared_ptr<opentelemetry::metrics::MeterProvider> provider(std::move(u_provider));
    auto *p = static_cast<metrics_sdk::MeterProvider *>(u_provider.get());
    p->AddMetricReader(std::move(exporter));
    metrics_api::Provider::SetMeterProvider(provider);
}

void InitLogger()
{
  auto exporter = logs_exporter::OStreamLogRecordExporterFactory::Create();
  auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
  nostd::shared_ptr<logs_api::LoggerProvider> provider(
      logs_sdk::LoggerProviderFactory::Create(std::move(processor)));
  logs_api::Provider::SetLoggerProvider(provider);
}

Jaeger

Jaeger natively supports OTLP to receive trace data. You can run Jaeger in a docker container with the UI accessible on port 16686 and OTLP enabled on ports 4317 and 4318: Jaeger原生支持OTLP接收Trace数据。您可以在docker容器中运行Jaeger,并在端口16686上访问 UI,并在端口 4317和4318上启用 OTLP:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --rm \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest

Now following the instruction to setup the OTLP exporters. 现在按照说明设置OTLP导出器。

**

Prometheus

To send your metric data to Prometheus , you can either enable Prometheus’ OTLP Receiver and use the OTLP exporter or you can use the PrometheusHttpServer , a MetricReader, that starts an HTTP server that will collect metrics and serialize to Prometheus text format on request. 要将指标数据发送到Prometheus,您可以启用Prometheus的OTLP接收器并使用OTLP导出器,也可以使用PrometheusHttpServer——一个MetricReader来启动HTTP服务器,该服务器将收集指标并根据请求序列化为 Prometheus文本格式。

Backend Setup

后端设置

Note 笔记 If you have Prometheus or a Prometheus-compatible backend already set up, you can skip this section and setup the Prometheus or OTLP exporter dependencies for your application. 如果您已经设置了Prometheus或与Prometheus兼容的后端,则可以跳过本节并为您的应用程序设置Prometheus或OTLP导出器依赖项。

You can run Prometheus in a docker container, accessible on port 9090 by following these instructions: 您可以在Docker容器中运行Prometheus ,可以按照以下说明在9090端口上进行访问:

Create a file called prometheus.yml with the following content: 创建一个名为prometheus.yml的文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrape_configs:
  - job_name: dice-service
    scrape_interval: 5s
    static_configs:
      - targets: [host.docker.internal:9464]

Run Prometheus in a docker container with the UI accessible on port 9090: 在 docker 容器中运行 Prometheus,并在端口9090上访问UI:

Note 笔记 When using Prometheus’ OTLP Receiver, make sure that you set the OTLP endpoint for metrics in your application to http://localhost:9090/api/v1/otlp. 使用 Prometheus 的 OTLP 接收器时,请确保将应用程序中指标的OTLP 端点设置为http://localhost:9090/api/v1/otlp。 Not all docker environments support host.docker.internal. In some cases you may need to replace host.docker.internal with localhost or the IP address of your machine. 并非所有docker环境都支持host.docker.internal。在某些情况下,您可能需要替换host.docker.internal为localhost或您计算机的IP地址。

Dependencies

依赖关系

To send your trace data to Prometheus , make sure that you have set the right cmake build variables while building OpenTelemetry C++ from source : 要将Trace数据发送到Prometheus ,请确保在从源代码构建 OpenTelemetry C++时设置了正确的 cmake 构建变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake -DWITH_PROMETHEUS=ON ...

Update your OpenTelemetry configuration to use the Prometheus Exporter: 更新您的 OpenTelemetry 配置以使用 Prometheus Exporter

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "opentelemetry/exporters/prometheus/exporter_factory.h"
#include "opentelemetry/exporters/prometheus/exporter_options.h"
#include "opentelemetry/metrics/provider.h"
#include "opentelemetry/sdk/metrics/meter_provider.h"
#include "opentelemetry/sdk/metrics/meter_provider_factory.h"

namespace metrics_sdk      = opentelemetry::sdk::metrics;
namespace metrics_api      = opentelemetry::metrics;
namespace metrics_exporter = opentelemetry::exporter::metrics;

void InitMetrics()
{
    metrics_exporter::PrometheusExporterOptions opts;
    opts.url = "localhost:9464";
    auto prometheus_exporter = metrics_exporter::PrometheusExporterFactory::Create(opts);
    auto u_provider = metrics_sdk::MeterProviderFactory::Create();
    auto *p = static_cast<metrics_sdk::MeterProvider *>(u_provider.get());
    p->AddMetricReader(std::move(prometheus_exporter));
    std::shared_ptr<metrics_api::MeterProvider> provider(std::move(u_provider));
    metrics_api::Provider::SetMeterProvider(provider);
}

With the above you can access your metrics at http://localhost:9464/metrics . Prometheus or an OpenTelemetry Collector with the Prometheus receiver can scrape the metrics from this endpoint. 通过上述内容,您可以在http://localhost:9464/metrics访问您的指标。 Prometheus或带有Prometheus接收器的 OpenTelemetry Collector可以从此端点抓取指标。

Zipkin

Backend Setup

后端设置

Note 笔记 If you have Zipkin or a Zipkin-compatible backend already set up, you can skip this section and setup the Zipkin exporter dependencies for your application. 如果您已经设置了Zipkin或与Zipkin兼容的后端,则可以跳过本节并为您的应用程序设置Zipkin导出器依赖项 。

You can run Zipkin on in a Docker container by executing the following command: 您可以通过执行以下命令在Docker容器中运行Zipkin :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --rm -d -p 9411:9411 --name zipkin openzipkin/zipkin
Dependencies#

依赖关系

To send your trace data to Zipkin , make sure that you have set the right cmake build variables while building OpenTelemetry C++ from source :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake -DWITH_ZIPKIN=ON ...*

Update your OpenTelemetry configuration to use the Zipkin Exporter  and to send data to your Zipkin backend: 要将Trace数据发送到Zipkin ,请确保在从源代码构建OpenTelemetry C++时设置了正确的cmake构建变量 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h"
#include "opentelemetry/sdk/resource/resource.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/simple_processor_factory.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/provider.h"

namespace trace     = opentelemetry::trace;
namespace trace_sdk = opentelemetry::sdk::trace;
namespace zipkin    = opentelemetry::exporter::zipkin;
namespace resource  = opentelemetry::sdk::resource;

void InitTracer()
{
  zipkin::ZipkinExporterOptions opts;
  resource::ResourceAttributes attributes = {{"service.name", "zipkin_demo_service"}};
  auto resource                           = resource::Resource::Create(attributes);
  auto exporter                           = zipkin::ZipkinExporterFactory::Create(opts);
  auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
  std::shared_ptr<opentelemetry::trace::TracerProvider> provider =
      trace_sdk::TracerProviderFactory::Create(std::move(processor), resource);
  // Set the global trace provider
  trace::Provider::SetTracerProvider(provider);
}

Other available exporters

其他可用的导出器

There are many other exporters available. For a list of available exporters, see the registry. 还有许多其他导出器商可供选择。有关可用导出器商的列表,请参阅注册表。

Finally, you can also write your own exporter. For more information, see the SpanExporter Interface in the API documentation. 最后,您还可以编写自己的导出器。有关更多信息,请参阅 API 文档中的 SpanExporter 接口。

Batching span and log records

批处理跨度和日志记录

The OpenTelemetry SDK provides a set of default span and log record processors, that allow you to either emit spans one-by-on (“simple”) or batched. Using batching is recommended, but if you do not want to batch your spans or log records, you can use a simple processor instead as follows: OpenTelemetry SDK 提供了一组默认的Span和日志记录处理器,允许您逐个(“简单”)或批量发出Span。建议使用批处理,但如果您不想对Span或日志记录进行批处理,则可以使用简单的处理器,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Bash
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/batch_span_processor_factory.h"
#include "opentelemetry/sdk/trace/batch_span_processor_options.h"

opentelemetry::sdk::trace::BatchSpanProcessorOptions options{};

auto exporter  = opentelemetry::exporter::otlp::OtlpHttpExporterFactory::Create(opts);
auto processor = opentelemetry::sdk::trace::BatchSpanProcessorFactory::Create(std::move(exporter), options);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Simple
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/simple_processor_factory.h"

auto exporter  = opentelemetry::exporter::otlp::OtlpHttpExporterFactory::Create(opts);
auto processor = opentelemetry::sdk::trace::SimpleSpanProcessorFactory::Create(std::move(exporter));
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
超异构计算,Intel的一盘大棋
软硬件融合逐步深化并体系化后,逐渐形成很多观点。比如超异构计算,比如开放生态,比如“软件定义一切,硬件加速一切”,比如完全可编程等等。当这些观点想去寻求共鸣的时候,发现Intel已经在做了很多相关的布局。
chaobowx
2022/12/16
7290
超异构计算,Intel的一盘大棋
再论软硬件融合
前面专门写过一篇“软硬件融合”的系统性介绍文章,之后有很多朋友私信交流。不断汲取大家对软硬件以及软硬件相互协作方面的观点,逐步深化和完善“软硬件融合”概念和技术体系。
chaobowx
2023/12/26
2690
再论软硬件融合
异构计算面临的挑战和未来发展趋势
在过去的一年(2022年),软硬件融合公众号的很多文章,都围绕着“超异构计算”这个重要的主题展开。也和很多朋友交流超异构计算相关的话题,大家提到的最主要的一个问题是:超异构和异构的本质区别在哪里?
chaobowx
2023/02/28
2.1K0
异构计算面临的挑战和未来发展趋势
超异构计算:大算力芯片的未来
计算的问题应该能够:分解成可以同时解决的离散工作;随时执行多条程序指令;使用多个计算资源比使用单个计算资源在更短的时间内解决问题。
chaobowx
2022/12/16
1.3K0
超异构计算:大算力芯片的未来
“黄金年代”之后,计算机体系结构将何去何从?
软件热点层出不穷,并且快速迭代;CPU性能瓶颈,摩尔定律失效;图灵奖获得者John Hennessy和David Patterson在2017年提出了“计算机体系结构的黄金年代”,给出的解决方案是特定领域架构DSA。
chaobowx
2022/12/16
6240
“黄金年代”之后,计算机体系结构将何去何从?
大芯片面临的共同挑战
最近一直思考:何谓“大芯片”?大芯片的标准是什么?CPU、GPU、AI、DPU以及HPU等各种超大规模的大芯片,其底层逻辑到底是什么?
chaobowx
2022/12/16
6030
大芯片面临的共同挑战
第四代算力革命(三):面向未来十年的新一代计算架构
编者按: 新华社北京2022年2月17日电,记者了解到,国家发展改革委、中央网信办、工业和信息化部、国家能源局近日联合印发文件,同意在京津冀、长三角、粤港澳大湾区、成渝、内蒙古、贵州、甘肃、宁夏启动建设国家算力枢纽节点,并规划了张家口集群等10个国家数据中心集群。至此,全国一体化大数据中心体系完成总体布局设计,“东数西算”工程正式全面启动。 当前,算力已成为全球战略竞争新焦点,是国民经济发展的重要引擎,全球各国的算力水平与经济发展水平呈现显著的正相关。在2020年全球算力中,美国占36%,中国占31%,欧洲
SDNLAB
2022/03/03
1.3K0
超异构融合:边缘计算腾飞的契机
内容来源:2022年11月12日,由边缘计算社区主办的全球边缘计算大会·上海站圆满落幕。我们非常荣幸邀请到了上海矩向科技有限公司CEO黄朝波黄总来分享,黄总发表了主题为《超异构融合:边缘计算腾飞的契机》精彩演讲。
边缘计算
2022/12/18
6020
超异构融合:边缘计算腾飞的契机
处理器“三国鼎立”:从CPU、GPU到DPU
当2020年10月份,NVIDIA在其GTC 2020大会上大张旗鼓的宣传DPU之后,整个行业热了起来,大家都在问:什么是DPU?DPU到底能干什么?DPU和GPU有什么区别?号称数据中心三大处理器之一的DPU,“何德何能”与CPU、GPU并驾齐驱?
SDNLAB
2021/07/27
4.4K0
处理器“三国鼎立”:从CPU、GPU到DPU
软硬件融合的时代
按照单位计算的复杂度,处理器平台大致分为CPU、协处理器、GPU、FPGA、ASIC。从左往右,单位计算越来越复杂,灵活性越来越低。也即是说CPU具有最高的灵活性以及相对最低的性能;而ASIC则具有最高的性能以及相对最低的灵活性。
老秃胖驴
2021/01/18
1.5K0
软硬件融合的时代
大算力芯片,向左(定制)还是向右(通用)?
2015年,亚马逊AWS收购Annapurna,开始了芯片自研之路。差不多同一时间,谷歌自研的AI芯片TPU也开始在内部使用。从此,互联网云计算公司纷纷开始了自研芯片之路,这成为了这些年IC行业重要的趋势。
chaobowx
2022/12/16
5040
大算力芯片,向左(定制)还是向右(通用)?
ChatGPT的根基:算力基础决定上层应用
如果将ChatGPT部署到谷歌搜索中,需要512,820 个 A100 HGX服务器和总共4,102,568 个 A100 GPU,服务器和网络的总硬件成本超过1,000亿美元。
chaobowx
2023/03/08
1.2K0
ChatGPT的根基:算力基础决定上层应用
为什么要从“软硬件协同”走向“软硬件融合”?
软硬件协同,是上世纪90年代提出的概念。在那个时候,系统已经变得相对复杂,需要更加准确严谨的软硬件划分,然后软硬件再协同。
chaobowx
2022/12/16
9960
为什么要从“软硬件协同”走向“软硬件融合”?
从DPU看大芯片的发展趋势:融合
DPU芯片,跟之前的GPU、AI芯片最大的不同在于,DPU是集成多种领域加速于一体的集成加速平台。如果说GPU、AI加速芯片,是CPU+xPU单个异构计算的分离趋势,那么DPU的出现,则预示着,整个计算系统,在从单异构的分离逐渐走向多异构的融合。
chaobowx
2022/12/16
6590
从DPU看大芯片的发展趋势:融合
超异构 x Chiplet:双剑合璧,实现算力指数级提升
Chiplet标准UCIe已经得到很多主流大厂的认可,席卷之势愈发明显。但就Chiplet的价值挖掘,目前可见的,都还停留在如何降成本和简单地扩大设计规模方面。我们觉得,Chiplet的价值还没有得到充分挖掘。
chaobowx
2022/12/16
3330
超异构 x Chiplet:双剑合璧,实现算力指数级提升
一种新的处理器类型:通用超异构处理器
我记得之前看过专门介绍各种PU List的文章,最大的感受是:处理器类型很多很多,从APU到ZPU,26个字母都已经被用光了。大家可能对这些PU都耳熟能详,但要说到各个PU之间的关系和协作,可能大家了解甚少。今天我们会进行基本的介绍。
chaobowx
2022/12/16
6330
一种新的处理器类型:通用超异构处理器
构筑超异构计算时代,英特尔 AI 全布局
作者 | 伍杏玲 出品 | AI 科技大本营(ID:rgznai100) 我们正值数据井喷时代,据 IDC 发布《数据时代 2025》报告显示,全球每年产生的数据将从 2018 年的 33ZB 增长到 2025 年的 175ZB。其中大部分为非结构化数据,对数据实时性的需求不断增强。 此时仅使用深度学习等技术来处理的话,消耗巨大,那么数据爆炸的当下,我们该如何提高算力来面对“AI+”时代? 英特尔将目光投向 XPU 战略。 软硬件双管齐下,构筑超异构计算时代 在 2018 年英特尔架构日上,英特尔首次向业
AI科技大本营
2023/05/08
5210
构筑超异构计算时代,英特尔 AI 全布局
CPU关键技术演进路线
后摩尔定律时代,单靠制程工艺的提升带来的性能受益已经十分有限,Dennard Scaling规律约束,芯片功耗急剧上升,晶体管成本不降反升;单核的性能已经趋近极限,多核架构的性能提升亦在放缓。AIoT时代来临,下游算力需求呈现多样化及碎片化,通用处理器难以应对。
肉眼品世界
2022/06/15
7080
CPU关键技术演进路线
从NVIDIA自动驾驶芯片Thor,看大芯片的发展趋势
北京时间,9月21凌晨,NVIDIA GTC 2022秋季发布会上,CEO黄仁勋发布了其2024年将推出的自动驾驶芯片。因为其2000TFLOPS的性能过于强大,英伟达索性直接把它全新命名为Thor,代替了之前1000TOPS的Altan。
chaobowx
2022/12/16
1.4K0
从NVIDIA自动驾驶芯片Thor,看大芯片的发展趋势
算力新生态,透视异构计算的机会和挑战 | Q推荐
作者 | 万佳   算力助推经济增长,成为数字经济发展新引擎。今年 4 月,由 IDC、浪潮信息和清华大学全球产业研究院联合推出的《2021—2022 全球计算力指数评估报告》显示,计算力指数平均每提高 1 点,数字经济和 GDP 将分别增长 3.5‰和 1.8‰。中国信通院发布的《中国算力发展指数白皮书》表明,在算力中每投入 1 元,将带动 3-4 元经济产出。算力发展指数每提高 1 点,GDP 增长约 1293 亿元。 虽然算力变得愈加重要,但是其发展却面临供需矛盾问题。一方面,对算力的需求增长迅猛。无
深度学习与Python
2023/03/29
5010
算力新生态,透视异构计算的机会和挑战 | Q推荐
相关推荐
超异构计算,Intel的一盘大棋
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档