APM トレーシングの概要

概要

Datadog Application Performance Monitoring (APM) は、アプリケーションを詳細に可視化することで、パフォーマンスのボトルネックを特定し、問題をトラブルシューティングし、サービスを最適化することを可能にします。

このガイドでは、APM の始め方と最初のトレースを Datadog に送信する方法を説明します。

  1. Datadog APM をセットアップして、Datadog にトレースを送信します。
  2. アプリケーションを実行してデータを生成します。
  3. 収集したデータを Datadog で確認します。

前提条件

このガイドの手順を実行するには、以下の準備が必要です。

  1. Datadog アカウントの作成をまだ行っていない場合は、作成します。
  2. Datadog API キーを検索または作成します。
  3. Linux ホストまたは VM を起動します。

アプリケーションの作成

Datadog で観測するアプリケーションを作成するには

  1. Linux ホストまたは VM 上で、hello.py という名前の Python アプリケーションを新規作成します。例えば、nano hello.py とします。

  2. 以下のコードを hello.py に追加します。

    hello.py

      from flask import Flask
      import random
    
      app = Flask(__name__)
    
      quotes = [
          "成功するために努力するのではなく、むしろ価値あるものになるために努力しなさい。- アルバート・アインシュタイン",
          "できると信じれば、道は拓ける。- セオドア・ルーズベルト",
          "未来は、夢の美しさを信じる人のもの。- エレノア・ルーズベルト"
      ]
    
      @app.route('/')
      def index():
          quote = random.choice(quotes)+"\n"
          return quote
    
      if __name__ == '__main__':
          app.run(host='0.0.0.0', port=5050)
      

Datadog APM を設定する

アプリケーションのコードやデプロイプロセスを変更せずに Datadog APM をセットアップするには、Single Step APM Instrumentation を使用します。

: Single Step APM Instrumentation はベータ版です。または、Datadog トレーシングライブラリを使用して APM をセットアップすることもできます。
  1. インストールコマンドを実行します。

     DD_API_KEY=<YOUR_DD_API_KEY> DD_SITE="<YOUR_DD_SITE>" DD_APM_INSTRUMENTATION_ENABLED=host DD_APM_INSTRUMENTATION_LIBRARIES=python:2 DD_ENV=<AGENT_ENV> bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)"
    

    <YOUR_DD_API_KEY>Datadog API キー<YOUR_DD_SITE>Datadog サイト<AGENT_ENV> を Agent がインストールされている環境 (例えば development) に置き換えます。

  2. ホストまたは VM のサービスを再起動します。

  3. Agent が実行されていることを確認します。

    sudo datadog-agent status
    

この方法では、Datadog Agent を自動的にインストールし、Datadog APM を有効にし、実行時にアプリケーションをインスツルメントします。

アプリケーションの実行

Datadog APM を Single Step Instrumentation でセットアップすると、Datadog は実行時にアプリケーションを自動的にインスツルメントします。

hello.py を実行するには

  1. カレントディレクトリに Python 仮想環境を作成します。

    python3 -m venv ./venv
    
  2. venv 仮想環境をアクティブにします。

    source ./venv/bin/activate
    
  3. pipflask をインストールします。

    sudo apt-get install python3-pip
    pip install flask
    
  4. サービス名を設定して hello.py を実行します。

    export DD_SERVICE=hello
    python3 hello.py
    

アプリケーションのテスト

Datadog にトレースを送信するアプリケーションをテストします。

  1. 新しいコマンドプロンプトで以下を実行します。

    curl http://0.0.0.0:5050/
    
  2. ランダムな引用が返されることを確認します。

    Believe you can and you're halfway there. - Theodore Roosevelt
    

curl コマンドを実行するたびに、新しいトレースが Datadog に送信されます。

Datadog でトレースを調べる

  1. Datadog で APM > Services に移動します。すると hello という Python サービスが見つかるはずです。

    サービスカタログに新しい Python サービスが表示されています。
  2. サービスを選択して、レイテンシー、スループット、エラー率などのパフォーマンスメトリクスを表示します。

  3. APM > Traces に移動します。hello サービスのトレースが表示されるはずです。

    トレースエクスプローラーに hello サービスのトレースが表示されています。
  4. トレースを選択すると、パフォーマンスのボトルネックを特定するのに役立つフレームグラフを含む詳細が表示されます。

高度な APM セットアップ

ここまでは、Single Step Instrumentation を使用して、Datadog に自動的に hello.py アプリケーションをインスツルメントさせました。このアプローチは、コードに触れたりライブラリを手動でインストールしたりすることなく、一般的なライブラリや言語にまたがる重要なトレーシングをキャプチャしたい場合に推奨されます。

しかし、カスタムコードからトレースを収集する必要がある場合や、より細かい制御が必要な場合は、カスタムインスツルメンテーションを追加することができます。

これを説明するために、Datadog Python トレーシングライブラリを hello.py にインポートし、カスタムスパンとスパンタグを作成します。

カスタムインスツルメンテーションを追加するには

  1. Datadog トレーシングライブラリをインストールします。

    pip install ddtrace
    
  2. ハイライトした行を hello.py のコードに追加して、カスタムスパンタグ get_quote とカスタムスパンタグ quote を作成します。

     from flask import Flask
     import random
     from ddtrace import tracer
    
     app = Flask(__name__)
    
     quotes = [
         "成功するために努力するのではなく、むしろ価値あるものになるために努力しなさい。- アルバート・アインシュタイン",
         "できると信じれば、道は拓ける。- セオドア・ルーズベルト",
         "未来は夢の美しさを信じる人のもの。- エレノア・ルーズベルト"
     ]
    
     @app.route('/')
     def index():
         with tracer.trace("get_quote") as span:
             quote = random.choice(quotes)+"\n"
             span.set_tag("quote", quote)
             return quote
    
     if __name__ == '__main__':
         app.run(host='0.0.0.0', port=5050)
  3. 先ほどの仮想環境で hello.py を実行します。

    ddtrace-run python hello.py
    
  4. 別のコマンドプロンプトでいくつかの curl コマンドを実行します。

    curl http://0.0.0.0:5050/
    
  5. Datadog の APM > Traces に移動します。

  6. hello トレースを選択します。

  7. フレームグラフで新しいカスタム get_quote スパンを見つけ、その上にカーソルを合わせます。

    get_quote カスタムスパンがフレームグラフに表示されます。カーソルを合わせると quote スパンタグが表示されます。
  8. カスタム quote スパンタグが Info タブに表示されていることに注目してください。

参考資料