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 = [
          "Strive not to be a success, but rather to be of value. - Albert Einstein",
          "Believe you can and you're halfway there. - Theodore Roosevelt",
          "The future belongs to those who believe in the beauty of their dreams. - Eleanor Roosevelt"
      ]
      
      @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 を使用します。あるいは、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:4 DD_ENV=<AGENT_ENV> bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)"
    

    Replace <YOUR_DD_API_KEY> with your Datadog API key, <YOUR_DD_SITE> with your Datadog site, and <AGENT_ENV> with the environment your Agent is installed on (for example, 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 サービスが表示されるはずです。

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

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

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

高度な APM セットアップ

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

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

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

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

  1. Datadog SDK をインストールします。

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

     from flask import Flask
     import random
     from ddtrace import tracer
    
     app = Flask(__name__)
    
     quotes = [
         "Strive not to be a success, but rather to be of value. - Albert Einstein",
         "Believe you can and you're halfway there. - Theodore Roosevelt",
         "The future belongs to those who believe in the beauty of their dreams. - Eleanor Roosevelt"
     ]
    
     @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 タブに表示されていることに注目してください。

次のステップ

トレーシングを設定し、アプリケーションが Datadog にデータを送信した後、追加の APM 機能を確認します。

Software Catalog

Software Catalog は、所有権メタデータ、パフォーマンスインサイト、セキュリティ分析、およびコスト配分を 1 か所に統合し、サービスの統合ビューを提供します。タグ、注釈、または service.datadog.yaml ファイルを使用してサービスメタデータを構成し、所有権情報、ランブック、およびドキュメントリンクでサービスを充実させます。

トレースの取り込みと保存

取り込みのコントロール保持フィルターを構成することで、コストを管理し、データ量を制御します。ingestion controls により、Datadog Agent または SDK レベルでサンプリングレートをカスタマイズでき、retention filters は検索および分析のためにインデックスされるスパンを決定します。

参考資料