すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:Jaeger を使用して Python アプリケーションからトレースデータをレポートする

最終更新日:Sep 09, 2026

Jaeger クライアントを使用して Python アプリケーションをインストルメントし、Managed Service for OpenTelemetry にトレースデータをレポートします。接続後、ARMS コンソールにアプリケーショントポロジー、トレース、異常なトランザクション、低速なトランザクション、SQL 分析が表示されます。

重要

高度な機能とトレーシング機能を利用するには、OpenTelemetry プロトコルを使用してアプリケーションを Managed Service for OpenTelemetry に接続することを推奨します。

Managed Service for OpenTelemetry の利用を開始するために、OpenTelemetry の詳細な統合ガイドとベストプラクティスをご用意しています。詳細については、「アプリケーションの接続」をご参照ください。

仕組み

Jaeger は 2 つのデータレポート用アーキテクチャをサポートしています。

  • Jaeger エージェントを使用しない場合:Jaeger クライアントは、トレースデータを Managed Service for OpenTelemetry バックエンドに直接送信します。(注:このドキュメントで説明する Python クライアントは、この方法をサポートしていません。)

image
  • Jaeger エージェントを使用する場合:Jaeger クライアントは、トレースデータをローカルで実行中の Jaeger エージェントに送信し、エージェントが gRPC 経由でバックエンドに転送します。

image

制約事項

  • Python Jaeger クライアント (v1.25) は、HTTP 経由ではなく、Jaeger エージェントを介してのみトレースデータを報告できます。 詳細については、「クライアントライブラリの機能」をご参照ください。

  • クライアントは UDP 経由でエージェントと通信するため、配信は保証されません。データ損失を最小限に抑えるために、両方を同じホストで実行してください。

ステップ 1:Jaeger エージェントの起動

  1. Jaeger エージェントのイメージをプルします。

       docker pull jaegertracing/jaeger-agent:1.25
  2. 次のプレースホルダーを [クラスター構成] ページの値に置き換えて、Jaeger エージェントコンテナを開始します:

    プレースホルダー説明
    <endpoint>Managed Service for OpenTelemetry の gRPC エンドポイント
    <auth>認証トークン
       docker run -d --name jaeger-agent \
         -p 5775:5775/udp \
         -p 6831:6831/udp \
         -p 6832:6832/udp \
         -p 5778:5778/tcp \
         jaegertracing/jaeger-agent:1.25 \
         --reporter.type=grpc \
         --reporter.grpc.host-port=<endpoint> \
         --agent.tags=<auth>
  3. エージェントが実行されていることを確認してください。ステータスが Up の場合、エージェントが正常に起動したことを示します。コンテナが実行されていない場合は、ログを確認してください。

       docker ps --filter name=jaeger-agent
       docker logs jaeger-agent

ステップ 2:Python アプリケーションのインストルメント

  1. 必要なパッケージをインストールします。以下を requirements.txt ファイルに保存してください。その後、パッケージをインストールします。

       certifi==2021.5.30
       charset-normalizer==2.0.4
       idna==3.2
       jaeger-client==4.6.0
       opentracing==2.4.0
       requests==2.26.0
       six==1.16.0
       threadloop==1.0.2
       thrift==0.13.0
       tornado==6.1
       urllib3==1.26.6
       pip install -r requirements.txt
  2. Python ファイル (例:tracing_demo.py) を作成し、以下のコードを記述します。主要な設定パラメータは以下のとおりです。

    パラメータ説明
    sampler.typeconstすべてのトレースをサンプリングします。本番環境では、probabilistic を使用し、param の値を低く設定してください。
    sampler.param1const タイプの場合、1 はすべてのトレースをサンプリングすることを意味し、0 はサンプリングしないことを意味します。
    reporting_host127.0.0.1Jaeger エージェントのアドレスです。同じホストで実行する場合は 127.0.0.1 を使用してください。
    reporting_port6831Jaeger エージェントがスパンをリッスンする UDP ポートです。
    service_namemytest3ARMS コンソールでアプリケーションを識別する名前です。
       import logging
       import time
       from jaeger_client import Config
    
    
       def construct_span(tracer):
           with tracer.start_span('AliyunTestSpan') as span:
               span.log_kv({'event': 'test message', 'life': 42})
               print("tracer.tags: ", tracer.tags)
               with tracer.start_span('AliyunTestChildSpan', child_of=span) as child_span:
                   span.log_kv({'event': 'down below'})
               return span
    
    
       if __name__ == "__main__":
           log_level = logging.DEBUG
           logging.getLogger('').handlers = []
           logging.basicConfig(format='%(asctime)s %(message)s', level=log_level)
    
           config = Config(
               config={
                   'sampler': {
                       'type': 'const',  # すべてのトレースをサンプリングします。本番環境では 'probabilistic' を使用してください。
                       'param': 1,
                   },
                   'local_agent': {
                       # Jaeger エージェントのアドレスです。エージェントが同じホストで実行する場合は、UDP の信頼性のため 127.0.0.1 のままにすることを推奨します。
                       'reporting_host': '127.0.0.1',
                       'reporting_port': 6831,
                   },
                   'logging': True,
               },
               service_name="mytest3",  # アプリケーション名に置き換えてください。
               validate=True
           )
    
           # トレーサーを初期化します。これにより `opentracing.tracer` も設定されます。
           tracer = config.initialize_tracer()
    
           span = construct_span(tracer)
    
           # IOLoop がバッファされたスパンをフラッシュするのを待ってから終了します。
           # 詳細については、https://github.com/jaegertracing/jaeger-client-python/issues/50 をご参照ください。
           time.sleep(2)
           tracer.close()
  3. ファイルを実行します。初期化が成功すると、デバッグ出力にトレーサー設定が表示され、スパンが Jaeger エージェントにレポートされていることが確認できます。

       python tracing_demo.py

コンソールでのトレースデータの確認

  1. ARMS コンソールにログインします。左側のナビゲーションペインで、[アプリケーション監視] > [アプリケーション] を選択します。

  2. [アプリケーション] ページで、上部のナビゲーションバーでリージョンを選択し、アプリケーション名をクリックします。

    説明

    [言語] 列の image アイコンは アプリケーションモニタリング を、ハイフン ([-]) は Managed Service for OpenTelemetry を示します。

  3. [アプリケーション概要] セクションで、主要なパフォーマンスメトリクスとトポロジーを確認します。

    [Application Overview] ページの [Overview Analysis] タブには、以下の主要な指標が表示されます。

    • [Total Requests]:リクエスト数と、前週比および前日比の変化です。

    • [Average Response Time]:応答時間とその傾向です。

    • [Exceptions]:異常なリクエストの数です。

    • [Span Count]:トレース内のスパンの総数です。

    これらの指標の下にある [Services Provided] および [Dependent Services] の各エリアに、リクエスト量と平均応答時間の傾向線グラフが表示されます。

  4. 左側のナビゲーションペインで、[アプリケーション詳細]をクリックします。[概要] タブに、アプリケーションの概要が表示されます。

    [Application Details] ページでは、デフォルトで [Overview] タブが表示されます。アプリケーショントポロジーと、[Requests][response time][Exceptions] の 3 つのモニタリングチャートが表示されます。ページ左側のサービスリストには、各インターフェースの応答時間、リクエスト数、例外数が表示されます。

  5. [トレース] タブをクリックすると、アプリケーションから報告されたトレースデータが表示されます。

トレースデータが表示されない場合のトラブルシューティング

アプリケーションを実行した後にトレースデータがコンソールに表示されない場合は、以下を確認してください。

問題対処方法
Jaeger エージェントが実行されていないdocker ps --filter name=jaeger-agent を実行し、ステータスが Up であることを確認してください。docker logs jaeger-agent でエージェントログを確認してください。
エンドポイントまたはトークンが正しくない<endpoint><auth>[Cluster Configurations] の値が ページの値と一致していることを確認してください。修正後、エージェントを再起動してください。
エージェントとクライアントが異なるホストにあるJaeger クライアントは UDP 経由でデータを送信するため、ホスト間では信頼性が低くなります。エージェントをアプリケーションと同じホストで実行し、reporting_host127.0.0.1 に設定してください。
スパンがフラッシュされていないtracer.close() の前に time.sleep(2) が呼び出されていることを確認して、IOLoop がバッファされたスパンをフラッシュできるようにしてください。
ネットワーク接続ホストが設定された gRPC ポートで Managed Service for OpenTelemetry エンドポイントに到達できることを確認してください。

一般的な Jaeger の操作

以下の例では、一般的な Jaeger トレース操作について説明します。詳細については、「はじめに」をご参照ください。

トレーサーの作成

from jaeger_client import Config

def init_jaeger_tracer(service_name='your-app-name'):
    config = Config(config={}, service_name=service_name)
    return config.initialize_tracer()

スパンの作成と終了

# ルートスパン (親なし) を開始します。
tracer.start_span('TestSpan')

# 子スパンを開始します。
tracer.start_span('ChildSpan', child_of=span)

# スパンを終了します。
span.finish()

サービス間での SpanContext の伝播

# インジェクト:ダウンストリームサービス用に SpanContext をキャリアにシリアル化します。
tracer.inject(
    span_context=span.context, format=Format.TEXT_MAP, carrier=carrier
)

# エキストラクト:受信リクエストから SpanContext をデシリアル化します。
span_ctx = tracer.extract(format=Format.TEXT_MAP, carrier={})