概要
Datadog Application Performance Monitoring (APM) は、アプリケーションを詳細に可視化することで、パフォーマンスのボトルネックを特定し、問題をトラブルシューティングし、サービスを最適化することを可能にします。
このガイドでは、APM の始め方と最初のトレースを Datadog に送信する方法を説明します。
- Datadog APM をセットアップして、Datadog にトレースを送信します。
- アプリケーションを実行してデータを生成します。
- 収集したデータを Datadog で確認します。
前提条件
このガイドの手順を実行するには、以下の準備が必要です。
- Datadog アカウントの作成をまだ行っていない場合は、作成します。
- Datadog API キーを検索または作成します。
- Linux ホストまたは VM を起動します。
アプリケーションの作成
Datadog で観測するアプリケーションを作成するには
Linux ホストまたは VM 上で、hello.py
という名前の Python アプリケーションを新規作成します。例えば、nano 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 を使用します。
インストールコマンドを実行します。
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
) に置き換えます。
ホストまたは VM のサービスを再起動します。
Agent が実行されていることを確認します。
sudo datadog-agent status
この方法では、Datadog Agent を自動的にインストールし、Datadog APM を有効にし、実行時にアプリケーションをインスツルメントします。
アプリケーションの実行
Datadog APM を Single Step Instrumentation でセットアップすると、Datadog は実行時にアプリケーションを自動的にインスツルメントします。
hello.py
を実行するには
カレントディレクトリに Python 仮想環境を作成します。
venv
仮想環境をアクティブにします。
source ./venv/bin/activate
pip
と flask
をインストールします。
sudo apt-get install python3-pip
pip install flask
サービス名を設定して hello.py
を実行します。
export DD_SERVICE=hello
python3 hello.py
アプリケーションのテスト
Datadog にトレースを送信するアプリケーションをテストします。
新しいコマンドプロンプトで以下を実行します。
curl http://0.0.0.0:5050/
ランダムな引用が返されることを確認します。
Believe you can and you're halfway there. - Theodore Roosevelt
curl
コマンドを実行するたびに、新しいトレースが Datadog に送信されます。
Datadog でトレースを調べる
Datadog で APM > Services に移動します。すると hello
という Python サービスが見つかるはずです。
サービスを選択して、レイテンシー、スループット、エラー率などのパフォーマンスメトリクスを表示します。
APM > Traces に移動します。hello
サービスのトレースが表示されるはずです。
トレースを選択すると、パフォーマンスのボトルネックを特定するのに役立つフレームグラフを含む詳細が表示されます。
高度な APM セットアップ
ここまでは、Single Step Instrumentation を使用して、Datadog に自動的に hello.py
アプリケーションをインスツルメントさせました。このアプローチは、コードに触れたりライブラリを手動でインストールしたりすることなく、一般的なライブラリや言語にまたがる重要なトレーシングをキャプチャしたい場合に推奨されます。
しかし、カスタムコードからトレースを収集する必要がある場合や、より細かい制御が必要な場合は、カスタムインスツルメンテーションを追加することができます。
これを説明するために、Datadog Python トレーシングライブラリを hello.py
にインポートし、カスタムスパンとスパンタグを作成します。
カスタムインスツルメンテーションを追加するには
Datadog トレーシングライブラリをインストールします。
ハイライトした行を 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)
先ほどの仮想環境で hello.py
を実行します。
ddtrace-run python hello.py
別のコマンドプロンプトでいくつかの curl
コマンドを実行します。
curl http://0.0.0.0:5050/
Datadog の APM > Traces に移動します。
hello トレースを選択します。
フレームグラフで新しいカスタム get_quote
スパンを見つけ、その上にカーソルを合わせます。
カスタム quote
スパンタグが Info タブに表示されていることに注目してください。
参考資料