# Exporters

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

---


[OpenTelemetryコレクター](/docs/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 {#otlp}

### コレクターのセットアップ {#collector-setup}

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">Note</div>



OTLPコレクターまたはバックエンドがすでにセットアップされている場合は、このセクションをスキップして、アプリケーション用の[OTLPエクスポーター依存関係のセットアップ](#otlp-dependencies)に進むことができます。

</div>


OTLPエクスポーターを試し、検証するために、テレメトリーを直接コンソールに書き込む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]
```

次に、Docker コンテナでコレクターを実行します。

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

このコレクターは、OTLPを介してテレメトリーを受け取ることができるようになりました。後で、テレメトリーを監視バックエンドに送信するために[コレクターを設定](/docs/collector/configuration)することもできます。


{{__hugo_ctx/}}


## Dependencies {#otlp-dependencies}

If you want to send telemetry data to an OTLP endpoint (like the
[OpenTelemetry Collector](#collector-setup), [Jaeger](#jaeger) or
[Prometheus](#prometheus)), you can choose between two different protocols to
transport your data:

- HTTP/protobuf
- gRPC

Make sure that you have set the right cmake build variables while
[building OpenTelemetry C++ from source](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md):

- `-DWITH_OTLP_GRPC=ON`: To enable building OTLP gRPC exporter.
- `-DWITH_OTLP_HTTP=ON`: To enable building OTLP HTTP exporter.

## Usage

Next, configure the exporter to point at an OTLP endpoint in your code.

   <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

To debug your instrumentation or see the values locally in development, you can
use exporters writing telemetry data to the console (stdout).

While
[building OpenTelemetry C++ from source](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md)
the `OStreamSpanExporter` is included in the build by default.

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

### バックエンドのセットアップ {#jaeger-backend-setup}

[Jaeger](https://www.jaegertracing.io/)は、トレースデータを受信するためにOTLPをネイティブでサポートしています。UIがポート16686でアクセス可能で、OTLPがポート4317と4318で有効になったDockerコンテナでJaegerを実行できます。

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

メトリクスデータを[Prometheus](https://prometheus.io/)に送信するには、[PrometheusのOTLPレシーバーを有効にして](https://prometheus.io/docs/guides/opentelemetry/#enable-the-otlp-receiver)[OTLPエクスポーター](#otlp)を使用するか、Prometheusエクスポーターを使用できます。
Prometheusエクスポーターは、メトリクスを収集しリクエストに応じてPrometheusテキスト形式にシリアライズするHTTPサーバーを起動する`MetricReader`です。

### バックエンドのセットアップ {#prometheus-setup}

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">注意</div>



すでにPrometheusまたはPrometheus互換のバックエンドをセットアップしている場合は、このセクションをスキップして、アプリケーション用の[Prometheus](#prometheus-dependencies)または[OTLP](#otlp-dependencies)エクスポーターの依存関係をセットアップしてください。

</div>


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

UIがポート`9090`でアクセス可能なDockerコンテナでPrometheusを実行します。

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

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">注意</div>



PrometheusのOTLPレシーバーを使用する場合は、アプリケーションでメトリクス用のOTLPエンドポイントを`http://localhost:9090/api/v1/otlp`に設定してください。

すべてのDocker環境が`host.docker.internal`をサポートしているわけではありません。場合によっては、`host.docker.internal`を`localhost`またはマシンのIPアドレスに置き換える必要があるかもしれません。

</div>

{{__hugo_ctx/}}


## Dependencies {#prometheus-dependencies}

To send your trace data to [Prometheus](https://prometheus.io/), make sure that
you have set the right cmake build variables while
[building OpenTelemetry C++ from source](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md):

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

Update your OpenTelemetry configuration to use the
[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);
}
```

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.


## Zipkin {#zipkin}

### バックエンドのセットアップ {#zipkin-setup}

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">注意</div>



すでにZipkinまたはZipkin互換のバックエンドをセットアップしている場合は、このセクションをスキップして、アプリケーション用の[Zipkinエクスポーターの依存関係](#zipkin-dependencies)をセットアップしてください。

</div>


以下のコマンドを実行して、[Zipkin](https://zipkin.io/)をDockerコンテナで実行できます。

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


## Dependencies {#zipkin-dependencies}

To send your trace data to [Zipkin](https://zipkin.io/), make sure that you have
set the right cmake build variables while
[building OpenTelemetry C++ from source](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md):

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

Update your OpenTelemetry configuration to use the
[Zipkin Exporter](https://github.com/open-telemetry/opentelemetry-cpp/tree/main/exporters/zipkin)
and to send data to your Zipkin backend:

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

最後に、独自のエクスポーターを作成することもできます。
詳細については、[APIドキュメントのSpanExporterインターフェイス](https://opentelemetry-cpp.readthedocs.io/en/latest/otel_docs/classopentelemetry_1_1sdk_1_1trace_1_1SpanExporter.html)を参照してください。

## スパンとログレコードのバッチ処理 {#batching-span-and-log-records}

OpenTelemetry SDKは、スパンを1つずつ発行する（「シンプル」）か、バッチで発行するかを選択できるデフォルトのスパンプロセッサーとログレコードプロセッサーのセットを提供しています。
バッチ処理の使用が推奨されますが、スパンやログレコードをバッチ処理したくない場合は、かわりに以下のようにシンプルプロセッサーを使用できます。
{{__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>
