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

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

OpenTelemetry Collector を使用して、C++ アプリケーションのトレースを Splunk APM に送信できます。以下の手順に従って、C++ アプリケーションをインストルメンテーションしてください:

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

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

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

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

前提条件

開始する前に、以下のコンポーネントをインストールします。

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

  • CMake バージョン 3.20 以上

さらに、Splunk Distribution of OpenTelemetry Collector をインストールします。次のディストリビューションを使用できます。

Collector をインストールしたら、環境で Collector のインスタンスを実行します。

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 .

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

インストルメンテーションを始める前に、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})

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

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

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

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

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

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

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

アプリケーションの実行中、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を使用した組織のアクセストークンの作成および管理」を参照してください。

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

サンプル C++ アプリケーションを使用するウォークスルーについては、「https://opentelemetry.io/docs/languages/cpp/」を参照してください。このウォークスルーでは、Splunk Distribution ではなく、アップストリームの OpenTelemetry Collector を使用しています。

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