このトピックでは、Jaeger SDK for C ++ を使用して、C ++ アプリケーションからSimple Log Serviceにトレースデータをインポートする方法について説明します。
前提条件
トレースインスタンスが作成されます。 詳細については、「トレースインスタンスの作成」をご参照ください。
Jaeger SDK for C ++ をコンパイルして実行できる開発環境を用意します。
CMakeエディタを使用する場合、バージョンは3.0以降でなければなりません。
GCCまたはg ++ コンパイラを使用する場合、バージョンは4.9.0以降でなければなりません。
手順
SDKをダウンロードしてコンパイルします。
指定したパスにパッケージを解凍します。
パッケージの解凍後、指定したパスに移動し、次のコマンドを実行します。
mkdir build cd build CXXFLAGS="-Wno-error=deprecated-copy" cmake .. make
コードをコンパイルして実行します。
examplesディレクトリのApp.cppファイルを変更します。
App.cppファイルの内容を次の内容に置き換えます。 次の内容は、環境変数を使用してJaegerを初期化することを示します。 詳細については、「jaeger-client-cpp」をご参照ください。
#include <iostream> #include <jaegertracing/Tracer.h> #include <jaegertracing/utils/EnvVariable.h> namespace { void setUpTracer() { const auto serviceName = jaegertracing::utils::EnvVariable::getStringVariable("JAEGER_SERVICE_NAME"); auto config = jaegertracing::Config(); config.fromEnv(); auto tracer = jaegertracing::Tracer::make( serviceName, config, jaegertracing::logging::consoleLogger()); opentracing::Tracer::InitGlobal( std::static_pointer_cast<opentracing::Tracer>(tracer)); } void tracedSubroutine(const std::unique_ptr<opentracing::Span>& parentSpan) { auto span = opentracing::Tracer::Global()->StartSpan( "tracedSubroutine", { opentracing::ChildOf(&parentSpan->context()) }); } void tracedFunction() { auto span = opentracing::Tracer::Global()->StartSpan("tracedFunction"); tracedSubroutine(span); } } // anonymous namespace int main(int argc, char* argv[]) { setUpTracer(); tracedFunction(); // Not strictly necessary to close tracer, but might flush any buffered // spans. See more details in opentracing::Tracer::Close() documentation. opentracing::Tracer::Global()->Close(); return 0; }
ビルドディレクトリに移動します。
make
コマンドを実行してアプリケーションをビルドします。次のコードを実行します。
次のコードの変数を実際の値に置き換える必要があります。 次の表に変数を示します。
# If you want to print spans, set the required environment variable in the format of export JAEGER_REPORTER_LOG_SPANS=true. export JAEGER_SAMPLER_TYPE=const export JAEGER_SAMPLER_PARAM=1 export JAEGER_SERVICE_NAME=${service} export JAEGER_PROPAGATION=w3c export JAEGER_ENDPOINT="https://${endpoint}/jaeger/api/traces" export JAEGER_TAGS=sls.otel.project=${project},sls.otel.instanceid=${instance},sls.otel.akid=${access-key-id},sls.otel.aksecret=${access-key-secret},service.version=${version} ./app
表 1. 変数
変数
説明
例
${service}
サービスの名前です。 実際のシナリオに基づいて名前を入力します。
payment
${version}
サービスのバージョンです。 va.b.c形式でバージョンを指定することを推奨します。
v0.1.2
${endpoint}
エンドポイント。 形式は ${project}.${region-endpoint} です。
${project}: Simple Log Serviceプロジェクトの名前。
${region-endpoint}: プロジェクトのエンドポイント。 インターネット、クラシックネットワーク、または仮想プライベートクラウド (VPC) のエンドポイントを使用して、Simple Log Serviceにアクセスできます。 詳細については、「エンドポイント」をご参照ください。
Port: 10010に設定されているポート番号。
説明provider.WithTraceExporterEndpoint("stdout"), 形式で変数をstdoutに設定すると、データは標準出力として出力されます。
変数を空の値に設定した場合、トレースデータはSimple Log Serviceにアップロードされません。
test-project.cn-hangzhou.log.aliyuncs.com:10010
${project}
Simple Log Serviceプロジェクトの名前。
test-project
${instance}
トレースインスタンスのID。 詳細については、「トレースインスタンスの作成」をご参照ください。
テストトレース
${access-key-id}
Alibaba CloudアカウントのAccessKey ID。
Simple Log Serviceプロジェクトの書き込み権限のみを持つResource Access Management (RAM) ユーザーのAccessKeyペアを使用することを推奨します。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 特定のプロジェクトの書き込み権限をRAMユーザーに付与する方法については、「カスタムポリシーを使用してRAMユーザーに権限を付与する」をご参照ください。 AccessKeyペアの取得方法については、「AccessKeyペア」をご参照ください。
なし
${access-key-secret}
Alibaba CloudアカウントのAccessKeyシークレット。
Simple Log Serviceプロジェクトの書き込み権限のみを持つRAMユーザーのAccessKeyペアを使用することを推奨します。
なし