# Експортери

LLMS index: [llms.txt](/llms.txt)

---


Надсилайте телеметрію до [OpenTelemetry Collector](/docs/collector/), щоб переконатися, що вона експортується правильно. Використання Collector у виробничих середовищах є найкращою практикою. Щоб візуалізувати вашу телеметрію, експортуйте її до бекенду, такого як [Jaeger](https://jaegertracing.io/), [Zipkin](https://zipkin.io/), [Prometheus](https://prometheus.io/) або [бекенд, специфічний для постачальника](/ecosystem/vendors/).



## Доступні експортери {#available-exporters}

Реєстр містить [список експортерів для C++][reg].




Серед експортерів, експортери [OpenTelemetry Protocol (OTLP)][OTLP] розроблені з урахуванням моделі даних OpenTelemetry, що передають дані OTel без втрати інформації. Крім того, багато інструментів, які працюють з телеметричними даними, підтримують OTLP (таких як [Prometheus][], [Jaeger][] і більшість [постачальників][vendors]), надаючи вам високий ступінь гнучкості, коли це потрібно. Щоб дізнатися більше про OTLP, дивіться [Специфікацію OTLP][OTLP].

[Jaeger]: /blog/2022/jaeger-native-otlp/
[OTLP]: /docs/specs/otlp/
[Prometheus]: https://prometheus.io/docs/prometheus/2.55/feature_flags/#otlp-receiver
[reg]: </ecosystem/registry/?component=exporter&language=cpp>
[vendors]: /ecosystem/vendors/



Ця сторінка охоплює основні експортери OpenTelemetry C++ та як їх налаштувати.







## OTLP

### Налаштування Collector {#collector-setup}

> [!NOTE]
>
> Якщо у вас вже налаштований OTLP collector або бекенд, ви можете пропустити цей розділ і [налаштувати залежності OTLP експортерів](#otlp-dependencies) для вашого застосунку.

Щоб спробувати та перевірити ваші OTLP експортери, ви можете запустити collector у docker контейнері, який записує телеметрію безпосередньо в консоль.

У порожній теці створіть файл з назвою `collector-config.yaml` з наступним вмістом:

```yaml
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]
```

Тепер запустіть collector у docker контейнері:

```shell
docker run -p 4317:4317 -p 4318:4318 --rm -v $(pwd)/collector-config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector
```

Цей collector тепер може приймати телеметрію через OTLP. Пізніше ви можете [налаштувати collector](/docs/collector/configuration), щоб надсилати вашу телеметрію до вашого бекенду для спостереження.


{{__hugo_ctx/}}


## Залежності {#otlp-dependencies}

Якщо ви хочете надсилати телеметричні дані на точку доступу OTLP (наприклад, [OpenTelemetry Collector](#collector-setup), [Jaeger](#jaeger) або [Prometheus](#prometheus)), ви можете вибрати між двома різними протоколами для транспортування ваших даних:

- HTTP/protobuf
- gRPC

Переконайтеся, що ви встановили правильні змінні збірки cmake під час [збирання OpenTelemetry C++ з вихідного коду](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md):

- `-DWITH_OTLP_GRPC=ON`: Щоб увімкнути збірку OTLP gRPC експортера.
- `-DWITH_OTLP_HTTP=ON`: Щоб увімкнути збірку OTLP HTTP експортера.

## Використання {#usage}

Далі, налаштуйте експортер для вказівки на точку доступу OTLP у вашому коді.

   <ul class="nav nav-tabs" id="tabs-1" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
          data-td-tp-persist="http/proto" aria-controls="tabs-01-00" aria-selected="true">
        HTTP/Proto
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
          data-td-tp-persist="grpc" aria-controls="tabs-01-01" aria-selected="false">
        gRPC
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-1-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/processor.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/batch_span_processor_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/batch_span_processor_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/tracer_provider_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/trace/provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/tracer_provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/metrics/provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/aggregation/default_aggregation.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/meter_context_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/meter_provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/meter_provider_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/logs/provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/logs/logger_provider_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/logs/processor.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/logs/simple_log_record_processor_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">trace_api</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">trace</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">trace_sdk</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">trace</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">metric_sdk</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">metrics</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">metrics_api</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">metrics</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">otlp</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">exporter</span><span class="o">::</span><span class="n">otlp</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">logs_api</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">logs</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">logs_sdk</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">logs</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">InitTracer</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">trace_sdk</span><span class="o">::</span><span class="n">BatchSpanProcessorOptions</span> <span class="n">bspOpts</span><span class="p">{};</span>
</span></span><span class="line"><span class="cl">  <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpExporterOptions</span> <span class="n">opts</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">url</span> <span class="o">=</span> <span class="s">&#34;http://localhost:4318/v1/traces&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">exporter</span>  <span class="o">=</span> <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">processor</span> <span class="o">=</span> <span class="n">trace_sdk</span><span class="o">::</span><span class="n">BatchSpanProcessorFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">),</span> <span class="n">bspOpts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">trace_api</span><span class="o">::</span><span class="n">TracerProvider</span><span class="o">&gt;</span> <span class="n">provider</span> <span class="o">=</span> <span class="n">trace_sdk</span><span class="o">::</span><span class="n">TracerProviderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">processor</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">trace_api</span><span class="o">::</span><span class="n">Provider</span><span class="o">::</span><span class="n">SetTracerProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">InitMetrics</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpMetricExporterOptions</span> <span class="n">opts</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">url</span> <span class="o">=</span> <span class="s">&#34;http://localhost:4318/v1/metrics&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">exporter</span> <span class="o">=</span> <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpMetricExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">metric_sdk</span><span class="o">::</span><span class="n">PeriodicExportingMetricReaderOptions</span> <span class="n">reader_options</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">reader_options</span><span class="p">.</span><span class="n">export_interval_millis</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">reader_options</span><span class="p">.</span><span class="n">export_timeout_millis</span>  <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="p">(</span><span class="mi">500</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">reader</span> <span class="o">=</span> <span class="n">metric_sdk</span><span class="o">::</span><span class="n">PeriodicExportingMetricReaderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">),</span> <span class="n">reader_options</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">context</span> <span class="o">=</span> <span class="n">metric_sdk</span><span class="o">::</span><span class="n">MeterContextFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">  <span class="n">context</span><span class="o">-&gt;</span><span class="n">AddMetricReader</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">reader</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">u_provider</span> <span class="o">=</span> <span class="n">metric_sdk</span><span class="o">::</span><span class="n">MeterProviderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">context</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">metrics_api</span><span class="o">::</span><span class="n">MeterProvider</span><span class="o">&gt;</span> <span class="n">provider</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">u_provider</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">metrics_api</span><span class="o">::</span><span class="n">Provider</span><span class="o">::</span><span class="n">SetMeterProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">InitLogger</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpLogRecordExporterOptions</span> <span class="n">opts</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">url</span> <span class="o">=</span> <span class="s">&#34;http://localhost:4318/v1/logs&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">exporter</span>  <span class="o">=</span> <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpLogRecordExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">processor</span> <span class="o">=</span> <span class="n">logs_sdk</span><span class="o">::</span><span class="n">SimpleLogRecordProcessorFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">logs_api</span><span class="o">::</span><span class="n">LoggerProvider</span><span class="o">&gt;</span> <span class="n">provider</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">      <span class="n">logs_sdk</span><span class="o">::</span><span class="n">LoggerProviderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">processor</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">logs_api</span><span class="o">::</span><span class="n">Provider</span><span class="o">::</span><span class="n">SetLoggerProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/processor.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/batch_span_processor_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/batch_span_processor_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/tracer_provider_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/trace/provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/tracer_provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/metrics/provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/aggregation/default_aggregation.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/meter_context_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/meter_provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/metrics/meter_provider_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/logs/provider.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/logs/logger_provider_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/logs/processor.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/logs/simple_log_record_processor_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">trace_api</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">trace</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">trace_sdk</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">trace</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">metric_sdk</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">metrics</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">metrics_api</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">metrics</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">otlp</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">exporter</span><span class="o">::</span><span class="n">otlp</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">logs_api</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">logs</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">namespace</span> <span class="n">logs_sdk</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">logs</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">InitTracer</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">trace_sdk</span><span class="o">::</span><span class="n">BatchSpanProcessorOptions</span> <span class="n">bspOpts</span><span class="p">{};</span>
</span></span><span class="line"><span class="cl">  <span class="n">opentelemetry</span><span class="o">::</span><span class="n">exporter</span><span class="o">::</span><span class="n">otlp</span><span class="o">::</span><span class="n">OtlpGrpcExporterOptions</span> <span class="n">opts</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">endpoint</span> <span class="o">=</span> <span class="s">&#34;localhost:4317&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">use_ssl_credentials</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">ssl_credentials_cacert_as_string</span> <span class="o">=</span> <span class="s">&#34;ssl-certificate&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">exporter</span>  <span class="o">=</span> <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpGrpcExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">processor</span> <span class="o">=</span> <span class="n">trace_sdk</span><span class="o">::</span><span class="n">BatchSpanProcessorFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">),</span> <span class="n">bspOpts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">opentelemetry</span><span class="o">::</span><span class="n">trace_api</span><span class="o">::</span><span class="n">TracerProvider</span><span class="o">&gt;</span> <span class="n">provider</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">      <span class="n">trace_sdk</span><span class="o">::</span><span class="n">TracerProviderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">processor</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Set the global trace provider
</span></span></span><span class="line"><span class="cl">  <span class="n">trace_api</span><span class="o">::</span><span class="n">Provider</span><span class="o">::</span><span class="n">SetTracerProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">InitMetrics</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpGrpcMetricExporterOptions</span> <span class="n">opts</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">endpoint</span> <span class="o">=</span> <span class="s">&#34;localhost:4317&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">use_ssl_credentials</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">ssl_credentials_cacert_as_string</span> <span class="o">=</span> <span class="s">&#34;ssl-certificate&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">exporter</span> <span class="o">=</span> <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpGrpcMetricExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">metric_sdk</span><span class="o">::</span><span class="n">PeriodicExportingMetricReaderOptions</span> <span class="n">reader_options</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">reader_options</span><span class="p">.</span><span class="n">export_interval_millis</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">reader_options</span><span class="p">.</span><span class="n">export_timeout_millis</span>  <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="p">(</span><span class="mi">500</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">reader</span> <span class="o">=</span> <span class="n">metric_sdk</span><span class="o">::</span><span class="n">PeriodicExportingMetricReaderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">),</span> <span class="n">reader_options</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">context</span> <span class="o">=</span> <span class="n">metric_sdk</span><span class="o">::</span><span class="n">MeterContextFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">  <span class="n">context</span><span class="o">-&gt;</span><span class="n">AddMetricReader</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">reader</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">u_provider</span> <span class="o">=</span> <span class="n">metric_sdk</span><span class="o">::</span><span class="n">MeterProviderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">context</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">opentelemetry</span><span class="o">::</span><span class="n">metrics</span><span class="o">::</span><span class="n">MeterProvider</span><span class="o">&gt;</span> <span class="n">provider</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">u_provider</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">metrics_api</span><span class="o">::</span><span class="n">Provider</span><span class="o">::</span><span class="n">SetMeterProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">InitLogger</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpGrpcLogRecordExporterOptions</span> <span class="n">opts</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">endpoint</span> <span class="o">=</span> <span class="s">&#34;localhost:4317&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">use_ssl_credentials</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">opts</span><span class="p">.</span><span class="n">ssl_credentials_cacert_as_string</span> <span class="o">=</span> <span class="s">&#34;ssl-certificate&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">exporter</span>  <span class="o">=</span> <span class="n">otlp</span><span class="o">::</span><span class="n">OtlpGrpcLogRecordExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">auto</span> <span class="n">processor</span> <span class="o">=</span> <span class="n">logs_sdk</span><span class="o">::</span><span class="n">SimpleLogRecordProcessorFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="n">nostd</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">logs_api</span><span class="o">::</span><span class="n">LoggerProvider</span><span class="o">&gt;</span> <span class="n">provider</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">      <span class="n">logs_sdk</span><span class="o">::</span><span class="n">LoggerProviderFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">processor</span><span class="p">)));</span>
</span></span><span class="line"><span class="cl">  <span class="n">logs_api</span><span class="o">::</span><span class="n">Provider</span><span class="o">::</span><span class="n">SetLoggerProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
    </div>
</div>


## Консоль {#console}

Щоб налагодити вашу інструментацію або побачити значення локально під час розробки, ви можете використовувати експортери, які записують телеметричні дані в консоль (stdout).

Під час [збирання OpenTelemetry C++ з вихідного коду](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md) експортер `OStreamSpanExporter` стандартно включений у збірку.

```cpp
#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-backend-setup}

[Jaeger](https://www.jaegertracing.io/) нативно підтримує OTLP для отримання даних трасування. Ви можете запустити Jaeger у docker контейнері з доступом до UI на порту 16686 та увімкненим OTLP на портах 4317 та 4318:

```shell
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
```

### Використання {#jaeger-usage}

Тепер дотримуйтесь інструкцій для налаштування [OTLP експортерів](#otlp-dependencies).
{{__hugo_ctx/}}



## Prometheus

Щоб надіслати ваші метрики до [Prometheus](https://prometheus.io/), ви можете або
[увімкнути OTLP Receiver Prometheus](https://prometheus.io/docs/guides/opentelemetry/#enable-the-otlp-receiver) і використовувати [OTLP експортер](#otlp), або ви можете використовувати експортер Prometheus, `MetricReader`, який запускає HTTP сервер, що збирає метрики та серіалізує їх у
текстовий формат Prometheus за запитом.

### Налаштування бекенду {#prometheus-setup}

> [!NOTE]
>
> Якщо у вас вже налаштований Prometheus або сумісний з Prometheus бекенд, ви можете пропустити цей розділ і налаштувати залежності експортера [Prometheus](#prometheus-dependencies) або [OTLP](#otlp-dependencies) для вашого застосунку.

Ви можете запустити [Prometheus](https://prometheus.io) у docker контейнері, доступному на порту `9090`, дотримуючись цих інструкцій:

Створіть файл під назвою `prometheus.yml` з наступним вмістом:

```yaml
scrape_configs:
  - job_name: dice-service
    scrape_interval: 5s
    static_configs:
      - targets: [host.docker.internal:9464]
```

Запустіть Prometheus у docker контейнері з доступом до UI на порту `9090`:

```shell
docker run --rm -v ${PWD}/prometheus.yml:/prometheus/prometheus.yml -p 9090:9090 prom/prometheus --web.enable-otlp-receiver
```

> [!NOTE]
>
> Коли використовуєте OTLP Receiver Prometheus, переконайтеся, що ви встановили OTLP endpoint для метрик у вашому застосунку на `http://localhost:9090/api/v1/otlp`.
>
> Не всі docker середовища підтримують `host.docker.internal`. У деяких випадках вам може знадобитися замінити `host.docker.internal` на `localhost` або IP адресу вашої машини.
{{__hugo_ctx/}}


### Залежності {#prometheus-dependencies}

Щоб надсилати ваші дані трасування до [Prometheus](https://prometheus.io/), переконайтеся, що ви встановили правильні змінні збірки cmake під час [збирання OpenTelemetry C++ з вихідного коду](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md):

```shell
cmake -DWITH_PROMETHEUS=ON ...
```

Оновіть вашу конфігурацію OpenTelemetry для використання [Prometheus Exporter](https://github.com/open-telemetry/opentelemetry-cpp/tree/main/exporters/prometheus):

```cpp
#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);
}
```

З вищенаведеним ви можете отримати доступ до ваших метрик за адресою <http://localhost:9464/metrics>. Prometheus або OpenTelemetry Collector з Prometheus приймачем можуть збирати
метрики з цієї кінцевої точки.


## Zipkin

### Налаштування бекенду {#zipkin-setup}

> [!NOTE]
>
> Якщо у вас вже налаштований Zipkin або сумісний з Zipkin бекенд, ви можете пропустити цей розділ і налаштувати [залежності експортера Zipkin](#zipkin-dependencies) для вашого застосунку.

Ви можете запустити [Zipkin](https://zipkin.io/) у Docker контейнері, виконавши наступну команду:

```shell
docker run --rm -d -p 9411:9411 --name zipkin openzipkin/zipkin
```
{{__hugo_ctx/}}


### Залежності {#zipkin-dependencies}

Щоб надсилати ваші дані трасування до [Zipkin](https://zipkin.io/), переконайтеся, що ви встановили правильні змінні збірки cmake під час [збирання OpenTelemetry C++ з вихідного коду](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md):

```shell
cmake -DWITH_ZIPKIN=ON ...
```

Оновіть вашу конфігурацію OpenTelemetry для використання [Zipkin Exporter](https://github.com/open-telemetry/opentelemetry-cpp/tree/main/exporters/zipkin) та для надсилання даних до вашого Zipkin бекенду:

```cpp
#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);
}
```


## Власні експортери користувача {#custom-exporters}

Нарешті, ви також можете написати свій власний експортер. Для отримання додаткової інформації дивіться [Інтерфейс SpanExporter в документації API](https://open-telemetry.github.io/opentelemetry-js/interfaces/_opentelemetry_sdk-trace-base.SpanExporter.html).

## Пакетування відрізків та записів журналу {#batching-span-and-log-records}

SDK OpenTelemetry надає набір стандартних процесорів відрізків та записів журналу, які дозволяють вам або генерувати відрізки по одному ("простий"), або пакетувати їх. Використання пакетування рекомендується, але якщо ви не хочете пакетувати свої відрізки або записи журналу, ви можете використовувати простий процесор наступним чином:
{{__hugo_ctx/}}


   <ul class="nav nav-tabs" id="tabs-6" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-06-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-00" role="tab"
          data-td-tp-persist="batch" aria-controls="tabs-06-00" aria-selected="true">
        Batch
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-06-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-01" role="tab"
          data-td-tp-persist="simple" aria-controls="tabs-06-01" aria-selected="false">
        Simple
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-6-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-06-00" role="tabpanel" aria-labelled-by="tabs-06-00-tab" tabindex="6">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/processor.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/batch_span_processor_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/batch_span_processor_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">trace</span><span class="o">::</span><span class="n">BatchSpanProcessorOptions</span> <span class="n">options</span><span class="p">{};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">exporter</span>  <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">exporter</span><span class="o">::</span><span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">processor</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">trace</span><span class="o">::</span><span class="n">BatchSpanProcessorFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">),</span> <span class="n">options</span><span class="p">);</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-06-01" role="tabpanel" aria-labelled-by="tabs-06-01-tab" tabindex="6">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_exporter_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/exporters/otlp/otlp_http_exporter_options.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/processor.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;opentelemetry/sdk/trace/simple_processor_factory.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">exporter</span>  <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">exporter</span><span class="o">::</span><span class="n">otlp</span><span class="o">::</span><span class="n">OtlpHttpExporterFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">opts</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">processor</span> <span class="o">=</span> <span class="n">opentelemetry</span><span class="o">::</span><span class="n">sdk</span><span class="o">::</span><span class="n">trace</span><span class="o">::</span><span class="n">SimpleSpanProcessorFactory</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">exporter</span><span class="p">));</span>
</span></span></code></pre></div>
    </div>
</div>
