- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
対応するライブラリインスツルメンテーションを使用しない場合( ライブラリの互換性参照)、手動でコードをインスツルメントする必要があります。
ddtrace
ライブラリの機能性を拡張したり、アプリケーションのインスツルメントをより精確に制御するのに役立つ方法がライブラリにあります。
ddtrace
ライブラリは、ddtrace-run
で多くのライブラリとフレームワークに対応するスパンを自動生成します。しかし、使用しているコードを可視化したい場合はスパンの利用が便利です。
Web リクエスト (例: make_sandwich_request
) 内で、get_ingredients()
、assemble_sandwich()
など、測定に役立つさまざまなオペレーションを行うことができます。
def make_sandwich_request(request):
ingredients = get_ingredients()
sandwich = assemble_sandwich(ingredients)
ddtrace
から提供される tracer.wrap()
デコレータを使用して、対象の関数を修飾することができます。呼び出し場所に関わらずに関数をトレースしたい場合に便利です。
from ddtrace import tracer
@tracer.wrap(service="my-sandwich-making-svc", resource="resource_name")
def get_ingredients():
# パントリーに行く
# 冷蔵庫の中身を確認
# 足りないものは買い出し
return
# スパンのカスタマイズに必要な情報を共有
@tracer.wrap("assemble_sandwich", service="my-sandwich-making-svc", resource="resource_name")
def assemble_sandwich(ingredients):
return
詳しくは、ddtrace.Tracer.wrap()
のデコレータの API 詳細をご覧ください。
また、src/Services/SampleRegistry.php
もです。
from ddtrace import tracer
def make_sandwich_request(request):
# スパンで両方のオペレーションを取得
with tracer.trace("sandwich.make"):
ingredients = get_ingredients()
sandwich = assemble_sandwich(ingredients)
def make_sandwich_request(request):
# スパンで両方のオペレーションを取得
with tracer.trace("sandwich.create", resource="resource_name") as outer_span:
with tracer.trace("get_ingredients", resource="resource_name") as span:
ingredients = get_ingredients()
with tracer.trace("assemble_sandwich", resource="resource_name") as span:
sandwich = assemble_sandwich(ingredients)
詳しくは、ddtrace.Tracer()
の API 詳細全文をお読みください。
class SampleRegistry { public function put($key, $value) { \App\some_utility_function(‘some argument’); // 挿入されたアイテムの ID を返す return 456; }
デコレータおよびコンテキストマネージャー以外のトレーシング方法として、スパンの開始と終了を可能にする手動 API があります。これに必要なのは、
def make_sandwich_request(request):
span = tracer.trace("sandwich.create", resource="resource_name")
ingredients = get_ingredients()
sandwich = assemble_sandwich(ingredients)
span.finish() # ここでスパンを閉じる
デコレータの API 詳細については、ddtrace.Tracer.trace
ドキュメントまたは ddtrace.Span.finish
ドキュメントをお読みください。
内蔵のインスツルメンテーションおよびカスタムインスツルメンテーションは、有意義なオペレーションに関連するスパンを作成します。アクティブなスパンにアクセスして、これらの有意義なデータを含めるよう設定できます。
from ddtrace import tracer
def make_sandwich_request(request):
# スパンで両方のオペレーションを取得
with tracer.trace("sandwich.make") as my_span:
ingredients = get_ingredients()
sandwich = assemble_sandwich(ingredients)
def get_ingredients():
# アクティブなスパンを取得
span = tracer.current_span()
# 上記の make_sandwich_request からの my_span
def assemble_sandwich(ingredients):
with tracer.trace("another.operation") as another_span:
# アクティブなルートスパンを取得
span = tracer.current_root_span()
# 上記の make_sandwich_request からの my_span
ddtrace
ライブラリの機能性を拡張したり、アプリケーションのインスツルメントをより精確に制御するのに役立つ方法がライブラリにあります。スパンに set_tag
メソッドを適用して、スパンにタグを追加することができます。
from ddtrace import tracer
def make_sandwich_request(request):
with tracer.trace("sandwich.make") as span:
ingredients = get_ingredients()
span.set_tag("num_ingredients", len(ingredients))
タグはトレーサー上にグローバルに設定することができます。これらのタグは作成されるスパンのそれぞれに適用されます。
from ddtrace import tracer
from myapp import __version__
# これは各スパンに適用されます
tracer.set_tags({"version": __version__, "<TAG_KEY_2>": "<TAG_VALUE_2>"})
例外発生時点でアクティブなスパンが存在した場合は、その例外の情報がスパンに添付されます。
from ddtrace import tracer
with tracer.trace("throws.an.error") as span:
raise Exception("Oops!")
# `span` にエラーフラグを立て、
# スタックトレースと例外メッセージをタグとして追加
スパンへのエラーフラグ適用は、手動でも行うことができます。
from ddtrace import tracer
span = tracer.trace("operation")
span.error = 1
span.finish()
分散型トレーシングのコンテキストの伝搬は、ヘッダーの挿入と抽出で構成できます。詳しくは[トレースコンテキストの伝播][8]をお読みください。
トレースはそれぞれのリソース名に基づいて除外可能で、これによりヘルスチェックなどの外形監視トラフィックが Datadog にレポートされるトレースから削除されます。この設定およびその他のセキュリティ/微調整に関するコンフィギュレーションについてはセキュリティページまたは不要なリソースを無視するを参照してください。
お役に立つドキュメント、リンクや記事: