すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Jaeger SDK for Cを使用して、C ++ アプリケーションからSimple Log Serviceにトレースデータをインポートする

最終更新日:Sep 03, 2024

このトピックでは、Jaeger SDK for C ++ を使用して、C ++ アプリケーションからSimple Log Serviceにトレースデータをインポートする方法について説明します。

前提条件

  • トレースインスタンスが作成されます。 詳細については、「トレースインスタンスの作成」をご参照ください。

  • Jaeger SDK for C ++ をコンパイルして実行できる開発環境を用意します。

    • CMakeエディタを使用する場合、バージョンは3.0以降でなければなりません。

    • GCCまたはg ++ コンパイラを使用する場合、バージョンは4.9.0以降でなければなりません。

手順

  1. SDKをダウンロードしてコンパイルします。

    1. Jaeger SDK for C ++ をダウンロードします。

    2. 指定したパスにパッケージを解凍します。

    3. パッケージの解凍後、指定したパスに移動し、次のコマンドを実行します。

      mkdir build
      cd build
      CXXFLAGS="-Wno-error=deprecated-copy" cmake ..
      make
  2. コードをコンパイルして実行します。

    1. 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;
      }
    2. ビルドディレクトリに移動します。

    3. makeコマンドを実行してアプリケーションをビルドします。

    4. 次のコードを実行します。

      次のコードの変数を実際の値に置き換える必要があります。 次の表に変数を示します。

      # 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ペアを使用することを推奨します。

      なし

次のステップ