Python オープン標準

Python オープン標準

OpenTracing

OpenTracing のサポートは ddtrace パッケージに含まれています。pip を使用して、必要な opentracing パッケージをインストールします。

pip install ddtrace[opentracing]

トレーサーを初期化するための OpenTracing の規則は、新しいトレーサーを構成、インスタンス化し、グローバルな opentracing.tracer 参照を上書きする初期化メソッドを定義することです。

import time
import opentracing
from ddtrace.opentracer import Tracer, set_global_tracer

def init_tracer(service_name):
    config = {
      "agent_hostname": "localhost",
      "agent_port": 8126,
    }
    tracer = Tracer(service_name, config=config)
    set_global_tracer(tracer)
    return tracer

def my_operation():
  span = opentracing.tracer.start_span("<OPERATION_NAME>")
  span.set_tag("<TAG_KEY>", "<TAG_VALUE>")
  time.sleep(0.05)
  span.finish()

init_tracer("<SERVICE_NAME>")
my_operation()

トレーサーが、その他の OpenTracing アプリケーションと同様に使用できるようになりました。OpenTracing Python の使用方法については opentracing.io を参照してください。

OpenTelemetry

OpenTelemetry のサポートは、opentelemetry-exporter-datadog パッケージを使用してトレースを OpenTelemetry から Datadog にエクスポートすることで利用できます。

現在、この機能はベータ版です。期待どおりに機能しない場合は、サポートにお問い合わせください。

インストール

インストールするには

pip install opentelemetry-exporter-datadog

使用方法

アプリケーションに Datadog プロセッサーとエクスポーターをインストールし、オプションを構成します。次に、OpenTelemetry インターフェイスを使用して、トレースおよびその他の情報を生成します。

from opentelemetry import trace
from opentelemetry.exporter.datadog import (
    DatadogExportSpanProcessor,
    DatadogSpanExporter,
)
from opentelemetry.exporter.datadog.propagator import DatadogFormat
from opentelemetry.propagate import get_global_textmap, set_global_textmap
from opentelemetry.propagators.composite import CompositeHTTPPropagator
from opentelemetry.sdk.trace import TracerProvider

trace.set_tracer_provider(TracerProvider())

trace.get_tracer_provider().add_span_processor(
    DatadogExportSpanProcessor(
        DatadogSpanExporter(
            agent_url="http://localhost:8126", service="example-server"
        )
    )
)

# Datadog インスツルメント化サービスとの間で伝播するための Datadog 形式を追加します 
global_textmap = get_global_textmap()
if isinstance(global_textmap, CompositeHTTPPropagator) and not any(
    isinstance(p, DatadogFormat) for p in global_textmap._propagators
):
    set_global_textmap(
        CompositeHTTPPropagator(
            global_textmap._propagators + [DatadogFormat()]
        )
    )
else:
    set_global_textmap(DatadogFormat())

tracer = trace.get_tracer(__name__)


with tracer.start_as_current_span("foo"):
    with tracer.start_as_current_span("bar"):
        with tracer.start_as_current_span("baz"):
            print("Hello world from OpenTelemetry Python!")

コンフィギュレーションオプション

Datadog Agent の URL とスパンタグの値は、環境と Agent の場所次第で必要または希望に応じて構成できます。

Datadog Agent URL

デフォルトでは、OpenTelemetry Datadog Exporter はトレースを http://localhost:8126 に送信します。次の環境変数を構成して、トレースを別の URL に送信します。

  • DD_TRACE_AGENT_URL: Datadog Agent がトレースをリッスンする <host>:<port>。例: agent-host:8126

これらの値は、トレースエクスポーターレベルでオーバーライドできます。

exporter = DatadogSpanExporter(
    agent_url="http://dd-agent:8126", service="example"
)

タグ付け

次の環境変数を設定して、Datadog がエクスポートしたトレースに自動的にタグを付けるようにアプリケーションを構成します。

  • DD_ENV: アプリケーション環境。例: productionstaging
  • DD_SERVICE: アプリケーションのデフォルトのサービス名。例: billing-api
  • DD_VERSION: アプリケーションのバージョン。例: 2.52020031814151.3-alpha
  • DD_TAGS: カンマで区切られた値ペアのカスタムタグ。例: layer:api,team:intake
  • DD_ENVDD_SERVICE、または DD_VERSION が設定されている場合、DD_TAGS で定義されている対応する envservice、または version タグをオーバーライドします。
  • DD_ENVDD_SERVICEDD_VERSION が設定されて_いない_場合、DD_TAGS の対応するタグを使用して、環境、サービス、バージョンを構成できます。

タグ値は、トレースエクスポーターレベルでもオーバーライドできます。これにより、アプリケーションごとに値を設定できるため、同じホスト上の異なる環境について複数のアプリケーションレポートを作成できます。

exporter = DatadogSpanExporter(
    agent_url="http://dd-agent:8126",
    service="example",
    env='prod',
    version='1.5-alpha',
    tags='team:ops,region:west'
)

個々のスパンに直接設定できるタグは、アプリケーションレベルで定義された競合するタグに優先します。

OpenTelemetry リンク