Splunk Observability Cloud 用に C++ アプリケーションをインストルメンテーションする 🔗
OpenTelemetry Collector を使用して、C++ アプリケーションのトレースを Splunk APM に送信できます。
以下の手順に従って、C++ アプリケーションをインストルメンテーションしてください:
前提条件 🔗
開始する前に、以下のコンポーネントがインストールされていることを確認してください:
C++ バージョン 14 以降をサポートする C++ コンパイラ
Make
CMake バージョン 3.20 以上
さらに、Splunk Distribution of OpenTelemetry Collector をインストールする必要があります。以下のディストリビューションが利用可能です:
Collector をインストールしたら、環境で Collector のインスタンスが実行されていることを確認します。
1. OpenTelemetry C++ ライブラリをビルドする 🔗
C++ コードをインストルメンテーションするには、OpenTelemetry C++ ライブラリをインストールし、ビルドします。以下の手順に従ってください:
プロジェクトディレクトリに、
opentelemetry-cpp
という新しいディレクトリを作成します。opentelemetry-cpp
ディレクトリで、OpenTelemetry C++ リポジトリをクローンします:git clone https://github.com/open-telemetry/opentelemetry-cpp.git
次に、以下のコマンドを実行して、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 は、アプリケーションが生成するスパンを収集します。このプロセスを開始するには、アプリケーションコードを編集して、追跡したい操作のスパンを作成します。
スパンを作成するには、以下の手順に従ってください:
トレーサーオブジェクトを作成します。スパンの作成と開始にはトレーサーが必要です。
auto provider = opentelemetry::trace::Provider::GetTracerProvider(); auto tracer = provider->GetTracer("foo_library", "1.0.0");
スパンを開始します。アプリケーションは、関連する操作が呼び出されるたびにスパンを発行します。
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 を参照してください。