C++ による APM の設定
Datadog の調査レポート: サーバーレスの状態 レポート: サーバーレスの状態

C++ による APM の設定

概要

このガイドは、C++ APM ドキュメントの内容を拡張したものです。C++ による簡単な APM アプリを、トラブルシューティングの目的で VM にセットアップする方法について、手順を追って説明します。これらがすべてセットアップされた、すぐに使えるボックスを、Datadog の sandbox リポジトリから直接スピンアップすることもできます。

ボックスをセットアップする

基本の環境

最初に、新しい ubuntu/xenial64 Vagrant ボックスをスピンアップし、それに対して ssh を実行します。

vagrant init ubuntu/xenial64
vagrant up
vagrant ssh

次に、UI の指示に従って Agent をインストールします。

C++ の準備

g++cmake をインストールします。

sudo apt-get update
sudo apt-get -y install g++ cmake

この 2 行を実行すると、最新バージョンの C++ を入手できます。

get_latest_release() {
  wget -qO- "https://api.github.com/repos/$1/releases/latest" |
    grep '"tag_name":' |
    sed -E 's/.*"([^"]+)".*/\1/';
}
DD_OPENTRACING_CPP_VERSION="$(get_latest_release DataDog/dd-opentracing-cpp)"

Github からレート制限のメッセージが表示された場合は、数分間待ってからもう一度コマンドを実行してください。アップデートが完了したら、正しく実行されたことを C++ のバージョンをチェックして確認します。

echo $DD_OPENTRACING_CPP_VERSION

次に、dd-opentracing-cpp ライブラリをダウンロードしてインストールします。

wget https://github.com/DataDog/dd-opentracing-cpp/archive/${DD_OPENTRACING_CPP_VERSION}.tar.gz -O dd-opentracing-cpp.tar.gz

tar ファイルをダウンロードしたら、ライブラリ用に新しいディレクトリと .build ファイルを作成します。

mkdir -p dd-opentracing-cpp/.build

続いて、ファイルを解凍します。

tar zxvf dd-opentracing-cpp.tar.gz -C ./dd-opentracing-cpp/ --strip-components=1

ライブラリのコンテンツリストがコンソールに表示されます。

dd-opentracing-cpp-1.0.1/test/integration/nginx/nginx.conf
dd-opentracing-cpp-1.0.1/test/integration/nginx/nginx_integration_test.sh

次に、.build ディレクトリに移動します。

cd dd-opentracing-cpp/.build

最後に、依存関係をインストールします。

sudo ../scripts/install_dependencies.sh
cmake ..
make
sudo make install

簡単なアプリの作成

新しいファイルを tracer_example.cpp という名前で作成し、以下のコードを入力します。

#include <datadog/opentracing.h>
#include <iostream>
#include <string>

int main(int argc, char* argv[]) {
  datadog::opentracing::TracerOptions tracer_options{"localhost", 8126, "compiled-in example"};
  auto tracer = datadog::opentracing::makeTracer(tracer_options);

  // スパンを作成する。
  {
    auto span_a = tracer->StartSpan("A");
    span_a->SetTag("tag", 123);
    auto span_b = tracer->StartSpan("B", {opentracing::ChildOf(&span_a->context())});
    span_b->SetTag("tag", "value");
  }

  tracer->Close();
  return 0;
}

これで、親スパンである span_a と、子スパンである span_b の 2 つのスパンが生成され、タグ付けされます。

次に、libdd_opentracinglibopentracing に対してリンクを作成します。

g++ -std=c++14 -o tracer_example tracer_example.cpp -ldd_opentracing -lopentracing

最後に、アプリを実行します。

LD_LIBRARY_PATH=/usr/local/lib/ ./tracer_example

トレースの送信

これでアプリが作成されたので、トレースの送信を開始して、トレース Agent の動作を確認できます。

最初に、トレース Agent のログを追跡します。

tail -f /var/log/datadog/trace-agent.log

次に、新しいタブを開いて、サンプルアプリを数回実行します。

LD_LIBRARY_PATH=/usr/local/lib/ ./tracer_example

トレース Agent タブに、次のように表示されます。

2019-08-09 20:02:26 UTC | TRACE | INFO | (pkg/trace/info/stats.go:108 in LogStats) | [lang:cpp lang_version:201402 tracer_version:v1.0.1] -> traces received: 1, traces filtered: 0, traces amount: 363 bytes, events extracted: 0, events sampled: 0

すると、Datadog の APM サービスページにサービスが次のように表示されます。

サービスをクリックすると、トレースが表示されます。

その他の参考資料

お役に立つドキュメント、リンクや記事: