分散トレース用のFlaskアプリケーションマニュアルインストルメンテーション
LogicMonitor + Catchpoint: 自律型ITの新時代へ
最新のブログ、ホワイトペーパー、電子ガイドなどを直接受信ボックスにお届けします。
ビデオはまもなく始まります
このブログシリーズでは、複数の言語にまたがるOpenTelemetry標準を使用した分散トレースのアプリケーションインストルメンテーション手順を共有します。 以前にカバーしました 分散トレース用のJavaアプリケーションマニュアルインスツルメンテーション, 分散トレース用のGolangアプリケーションインストルメンテーション, 分散トレース用のノードJSアプリケーション, 分散トレース用のDotNetアプリケーションインストルメンテーション.
このブログ投稿では、以下について説明します。
OpenTelemetryは、Cloud Native Computing Foundationによるプロジェクトであり、アプリケーションのテレメトリデータがダウンストリームのプラットフォームで記録および利用される方法を標準化することを目的としています。 このアプリケーショントレースデータは、アプリケーションの所有者がコード内のコンポーネントとサービスの関係、各ステップで導入されるリクエストの量と遅延、そして最終的にはユーザーエクスペリエンスの低下につながるボトルネックを理解するのに役立ちます。 PythonはOpenTelemetryがサポートする多くの言語のXNUMXつであり、FlaskはWebアプリケーションの作成に使用される人気のある軽量フレームワークです。 以下では、基本的なFlaskアプリケーションをインストルメント化するための手順について説明します。
OpenTelemetryについてもっと読むことができます こちら.
次のライブラリをインストールします。
pip install flask
pip install opentelemetry-api
pip install opentelemetry-sdk
pip install opentelemetry-opentelemetry-instrumentation-flask
pip install opentelemetry-exporter-otlpルートプロジェクトディレクトリ「instrument-flask-app」の下にファイル「app.py」を作成します。
Instrument-flask-app
|___ app.py
次のライブラリをインポートします。
from flask import Flask
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporterFlaskアプリインスタンスを作成します。
app = Flask(__name__)トレースプロバイダーを構築します。
trace.set_tracer_provider(TracerProvider())スパンエクスポーターの初期化:
エクスポータは、テレメトリ信号(トレース)をアプリケーションからリモートバックエンドにエクスポートし、ファイルにログを記録し、stdoutにストリーミングするSDKのコンポーネントです。 この例では、ローカルホストで実行されているOpenTelemetryレシーバーバックエンドにトレースを送信するgRPCエクスポーターを作成しています。
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor
(OTLPSpanExporter(endpoint=os.environ.get("LM_OTEL_ENDPOINT"),insecure=True)))注:オプションで、次のようにして、アプリケーションから出力されたトレースをコンソールに出力することもできます。
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))OTELコレクタエンドポイントを設定します。
OTELコレクターのエンドポイントである環境変数LMOTEL_ENDPOINTを設定する必要があります。 トレースは、次のようにして出力されます。
export LM_OTEL_ENDPOINT=http://<HOSTNAME>:<PORT>リソース検出器を作成します。
リソースは、を生成したオブジェクトを記述します テレメトリー 信号。 基本的に、これはサービスまたはアプリケーションの名前である必要があります。 LogicMonitorでは、これらの属性を使用して、LogicMonitor内ですでに監視しているデバイスまたはリソースにマップできます。
環境変数を次のように設定します。
export OTEL_RESOURCE_ATTRIBUTES=service.namespace=opentelemetry,service.name=instrument-flask-app,host.name=localhostFlaskアプリオブジェクトの自動インスツルメンテーション:
FlaskInstrumentor().instrument_app(app)インストルメンテーションをテストするエンドポイントを定義します。
@app.route("/hello")
def hello():
return "Hello World!" Flaskアプリの実行:
Flaskアプリは、デフォルトでポート5000で実行されます。
if __name__ == "__main__": # on running python app.py
app.run() # run the flask appそれを一緒に入れて:
# app.py
from flask import Flask
from opentelemetry import trace
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter importOTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor,ConsoleSpanExporter
app = Flask(__name__)
trace.set_tracer_provider(TracerProvider())
# To print the traces on the console
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))
# To send the traces to the configured OTEL collector
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(
OTLPSpanExporter(endpoint=os.environ.get("LM_OTEL_ENDPOINT"), insecure=True)))
@app.route("/hello")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
アプリケーションをテストする
Pythonアプリを実行して、アプリケーションをテストしてみましょう。 サーバーは次のように起動する必要があります。
python app.py
成功!
ブラウザからエンドポイント(「http://127.0.0.1:5000/hello」)にアクセスすると、LogicMonitorポータルでトレースを確認できるはずです。

トレースをクリックすると、追加情報を表示できます。

コンソールのトレースは次のようになります。

おめでとうございます。OpenTelemetryProtocol(OTLP)仕様を使用して、トレースを出力するフラスコベースのPythonアプリケーションをインストルメント化しました。 これで、アプリケーションを可視化し、アプリケーションコードに存在する潜在的なボトルネックに対処できるようになります。 すでにLogicMonitorを使用してインフラストラクチャを監視したり、ログを収集している場合は、これらのトレースを関連付けて、トラブルシューティングを高速化できます。
まだログを送信していない場合は、試してみてください こちら LogicMonitorに取り込むことができるコンテキストの量をさらに充実させるため。
OpenTelemetryとCNCFの詳細については、次のリソースをお勧めします。
他のアプリケーション言語にまたがるOpenTelemetry標準を使用した分散トレースの手順をカバーする他のブログをチェックしてください。
© LogicMonitor 2026 | 無断複写・転載を禁じます。 | ここで言及されているすべての商標、商号、サービス マーク、およびロゴは、それぞれの会社に帰属します。