分散環境で Python マイクロサービスを実行する場合、リクエストがサービス境界を越えて流れる際のエンドツーエンド可視性が必要です。SkyWalking Python エージェントは、Django、Flask、Redis、Kafka、MySQL を含む 30 以上のライブラリを自動的にインストルメント化するため、コード変更を最小限に抑えながら、トレースデータを OpenTelemetry 向けマネージドサービスにレポートできます。
本トピックでは、エージェントのインストール、エンドポイントの取得、およびトレースレポートのためのエージェント構成手順について説明します。
背景情報
Apache SkyWalking は、マイクロサービス、クラウドネイティブアーキテクチャ、Docker、Kubernetes、Mesos などのコンテナ環境向けに設計されたアプリケーションパフォーマンスモニタリング(APM)および分散トレーシングシステムです。SkyWalking-Python は、SkyWalking の公式 Python エージェントリポジトリです。Kafka、AIOHTTP、Redis、WebSocket などのサードパーティライブラリを自動的にインストルメント化するために利用できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Python 3.7 以降がインストール済みであること
トレーシングを追加する Python プロジェクトが存在すること
パッケージをインストールするための pip が利用可能であること
SkyWalking Python エージェントをインストールします。
pip install apache-skywalkingSkyWalking エンドポイントの取得
エージェントを OpenTelemetry 向けマネージドサービスに接続するには、コンソールからエンドポイントと認証トークンを取得します。
OpenTelemetry 向けマネージドサービスコンソールにログインします。
左側のナビゲーションウィンドウで、クラスタ設定 をクリックします。表示されるページで、アクセスポイント情報 タブをクリックします。
上部のナビゲーションバーでリージョンを選択します。クラスタ情報 セクションで、トークンを表示 を有効化します。
クライアント パラメーターを SkyWalking に設定します。
関連情報 列から、エンドポイントとトークンをコピーします。

ご利用のアプリケーションが Alibaba Cloud の本番環境で実行される場合は、VPC エンドポイントをご利用ください。それ以外の場合は、パブリックエンドポイントをご利用ください。
Python アプリケーションのインストルメント化
SkyWalking Python エージェントは、コード内構成および環境変数による構成の 2 種類の方法をサポートしています。デプロイメントに最も適した方法をお選びください。
オプション 1:コード内での構成
SkyWalking モジュールをインポートし、エージェント起動前に、エンドポイント、トークン、およびサービス名を指定して config.init() を呼び出します。
from skywalking import agent, config
config.init()
agent.start()以下のプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 | 例 |
|---|---|---|
<endpoint> | コンソールから取得した SkyWalking エンドポイント | <your-endpoint> |
<auth-token> | コンソールから取得した認証トークン | xxxxxxxxxxxx |
<your-service-name> | トレース内でアプリケーションを識別するための名前 | my-python-app |
オプション 2:環境変数による構成
以下の環境変数を設定し、コード内で引数を渡さずにエージェントを起動します。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<endpoint>
export SW_AGENT_AUTHENTICATION=<auth-token>
export SW_AGENT_NAME=<your-service-name>
export SW_AGENT_PROTOCOL=grpc
export SW_AGENT_LOG_REPORTER_ACTIVE=false
export SW_AGENT_METER_REPORTER_ACTIVE=falseその後、Python コード内でエージェントを起動します。
from skywalking import agent, config
config.init()
agent.start()Docker コンテナーを利用する場合は、environment セクションに環境変数を追加します(docker-compose.yaml ファイル)。
services:
my-app:
image: my-python-app
environment:
SW_AGENT_COLLECTOR_BACKEND_SERVICES: "<endpoint>"
SW_AGENT_AUTHENTICATION: "<auth-token>"
SW_AGENT_NAME: "my-python-app"
SW_AGENT_PROTOCOL: "grpc"
SW_AGENT_LOG_REPORTER_ACTIVE: "false"
SW_AGENT_METER_REPORTER_ACTIVE: "false"エージェントの構成が完了したら、アプリケーションを再起動してトレースデータのレポートを開始します。
構成リファレンス
オプションのパラメーターの詳細については、「Apache SkyWalking Python 構成リファレンス」をご参照ください。
サンプルコード
完全な動作例については、「skywalking-demo」リポジトリ(GitHub)をご参照ください。
このデモアプリケーションでは、Flask を使用して HTTP リクエストを処理し、サービス間でルーティングするとともに、途中で MySQL データベース操作を行います。エージェントがデータをレポートした後、OpenTelemetry 向けマネージドサービスコンソールで、プロセス間のトレースおよび MySQL 呼び出しのモニタリングデータを確認できます。
よくある質問
Method not found: skywalking.v3.LogReportService/collect
OpenTelemetry 向けマネージドサービスは、SkyWalking のログ収集をサポートしていません。ログレポーターを無効化してください。
config.init(agent_log_reporter_active=False)または、環境変数を設定してください。
export SW_AGENT_LOG_REPORTER_ACTIVE=falseMethod not found: skywalking.v3.MeterReportService/collect(gRPC によるレポート時)
バックエンドは、SkyWalking のメトリック収集をサポートしていません。メーターレポーターを無効化してください。
config.init(agent_meter_reporter_active=False)または、環境変数を設定してください。
export SW_AGENT_METER_REPORTER_ACTIVE=false本トピックの構成例では、両方のパラメーターがすでに False に設定されています。例に従って構成した場合、これらのエラーは発生しません。