Docs » Splunk Observability Cloud でサポートされているインテグレーション » バックエンドアプリケーションをインストルメンテーションして、スパンを Splunk APM に送信する » Splunk Observability Cloud 向けに C++ アプリケーションをインストルメンテーションする » Splunk Observability Cloud 用に C++ アプリケーションをインストルメンテーションする

Splunk Observability Cloud 用に C++ アプリケーションをインストルメンテーションする 🔗

OpenTelemetry Collector を使用して、C++ アプリケーションのトレースを Splunk APM に送信できます。

以下の手順に従って、C++ アプリケーションをインストルメンテーションしてください:

  1. OpenTelemetry C++ ライブラリをビルドする

  2. 必要な依存関係を追加する

  3. OpenTelemetry トレーサーを初期化する

  4. アプリケーションのスパンを生成する

前提条件 🔗

開始する前に、以下のコンポーネントがインストールされていることを確認してください:

  • C++ バージョン 14 以降をサポートする C++ コンパイラ

  • Make

  • CMake バージョン 3.20 以上

さらに、Splunk Distribution of OpenTelemetry Collector をインストールする必要があります。以下のディストリビューションが利用可能です:

Collector をインストールしたら、環境で Collector のインスタンスが実行されていることを確認します。

1. OpenTelemetry C++ ライブラリをビルドする 🔗

C++ コードをインストルメンテーションするには、OpenTelemetry C++ ライブラリをインストールし、ビルドします。以下の手順に従ってください:

  1. プロジェクトディレクトリに、opentelemetry-cpp という新しいディレクトリを作成します。

  2. opentelemetry-cpp ディレクトリで、OpenTelemetry C++ リポジトリをクローンします:

    git clone https://github.com/open-telemetry/opentelemetry-cpp.git
    
  3. 次に、以下のコマンドを実行して、OpenTelemetry C++ ライブラリをビルドします:

    cd opentelemetry-cpp
    mkdir build
    cd build
    cmake ..
    cmake --build .
    

2. 必要な依存関係を追加する 🔗

インストルメンテーションを始める前に、C++ 用 OpenTelemetry インストルメンテーションは、いくつかの依存関係を必要とします。

CMakeLists.txt ファイルに以下のコードを追加し、これらの依存関係を含めます:

find_package(opentelemetry-cpp CONFIG REQUIRED)

target_include_directories(foo PRIVATE ${OPENTELEMETRY_CPP_INCLUDE_DIRS})
target_link_libraries(foo PRIVATE ${OPENTELEMETRY_CPP_LIBRARIES})

3. OpenTelemetry トレーサーを初期化する 🔗

OpenTelemetry トレーサーは、C++ アプリケーションと一緒に実行され、アプリケーションがコールを受信すると、テレメトリデータを生成します。

トレーサーを開始するには、以下のコードを main.cpp ファイルに追加します。このコードには、OpenTelemetry トレーサーを初期化したりクリーンアップしたりするために、アプリケーションで呼び出せる関数が追加されています。

#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"

using namespace std;
namespace trace_api = opentelemetry::trace;
namespace trace_sdk = opentelemetry::sdk::trace;
namespace trace_exporter = opentelemetry::exporter::trace;
namespace otlp = opentelemetry::exporter::otlp;

namespace {
    void InitTracer() {
        trace_sdk::BatchSpanProcessorOptions bspOpts{};
        // creates a new options object and sets the OTLP endpoint URL
        otlp::OtlpHttpExporterOptions opts;
        opts.url = "http://localhost:4318/v1/traces";

        // pass the options object as an argument for the exporter creator
        auto exporter = otlp::OtlpHttpExporterFactory::Create(opts);
        auto processor = trace_sdk::BatchSpanProcessorFactory::Create(std::move(exporter), bspOpts);
        std::shared_ptr<trace_api::TracerProvider> provider = trace_sdk::TracerProviderFactory::Create(std::move(processor));
        trace_api::Provider::SetTracerProvider(provider);
    }

    void CleanupTracer() {
        std::shared_ptr<opentelemetry::trace::TracerProvider> none;
        trace_api::Provider::SetTracerProvider(none);
    }
}

int main() {
    InitTracer();

    // Other application code

    CleanupTracer();
    return 0;
}

4. アプリケーションのスパンを生成する 🔗

OpenTelemetry Collector は、アプリケーションが生成するスパンを収集します。このプロセスを開始するには、アプリケーションコードを編集して、追跡したい操作のスパンを作成します。

スパンを作成するには、以下の手順に従ってください:

  1. トレーサーオブジェクトを作成します。スパンの作成と開始にはトレーサーが必要です。

    auto provider = opentelemetry::trace::Provider::GetTracerProvider();
    auto tracer = provider->GetTracer("foo_library", "1.0.0");
    
  2. スパンを開始します。アプリケーションは、関連する操作が呼び出されるたびにスパンを発行します。

    auto span = tracer->StartSpan("HandleRequest");
    

作成できるスパンの種類については、https://opentelemetry.io/docs/languages/cpp/instrumentation/#traces を参照してください。

アプリケーションの実行中、OpenTelemetry Collector のローカルインスタンスはこれらのスパンをリッスンし、Splunk Observability Cloud に送信します。その後、Splunk APM でデータを確認できます。

Splunk Observability Cloud に直接データを送信する 🔗

デフォルトでは、すべてのデータは Splunk Distribution of OpenTelemetry Collector のローカルインスタンスに送られます。

Splunk Observability Cloud に直接データを送信する必要がある場合は、次の環境変数を設定します:

OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_TRACES_HEADERS=x-sf-token=<access_token>
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.<realm>.signalfx.com

<realm> を Splunk Observability Cloud レルムに、<access-token> をインジェスト権限を持つ Splunk Observability Cloud アクセストークンに置き換えてください。

レルムとアクセストークンの詳細については、Splunk Observability Cloudを使用した組織のアクセストークンの作成および管理 を参照してください。

さらに詳しく 🔗

サンプル C++ アプリケーションを使用したチュートリアルについては、https://opentelemetry.io/docs/languages/cpp/ を参照してください。このチュートリアルでは、Splunk ディストリビューションではなく、アップストリームの OpenTelemetry Collector を使用しています。

OpenTelemetry C++ には、いくつかの設定例もあります。それらを見るには、https://github.com/open-telemetry/opentelemetry-cpp/tree/main/examples を参照してください。

This page was last updated on 2024年03月15日.