OCIのAPM(アプリケーション・パフォーマンス・モニタリング)には、OpenTracingに対応した分散トレーシングの機能が含まれています。JavaのMavenプロジェクトやHelidonには、APM Javaトレーサーが用意されていますが、Pythonの場合はpy_zipkinを使用することで同様にトレースデータをAPMに送信することが可能です。
ここでは、APMの分散トレーシングがどのように使えるのかという点を、実際にPythonのアプリケーションで試してみます。
##APMに必要なユーザーと権限
今回は、設定にアカウント管理者ユーザーを用しているので省略しますが、一般ユーザーの場合はドキュメントに従ってポリシーを付与します
APMドメインの作成
実行環境の準備
Pythonの実行できる環境を用意し、以下のパッケージをインストール (例としてOCIに新しいVMインスタンスを作成後から設定を開始)
sudo yum install python3-devel
sudo pip3 install requests
sudo pip3 install py_zipkin
#サンプルコードをダウンロード
wget https://raw.githubusercontent.com/western24/apm4python/main/apmweather.py
このサンプルコードは気象庁のAPIにアクセスし天気予報のデータを取得して表示する単純なアプリケーションです。コード内には、トレースデータをAPMに送信するコード(zipkin_span)を組み込んであります
サンプルコード内の8行目、赤字の部分を上記でコピーしたAPMエンドポイントとパブリックキーに置き換えます
requests.post('https://APM Endpoint/20200101/observations/public-span?dataFormat=zipkin&dataFormatVersion=2&dataKey=Publid Key',
例)
requests.post('https://aaaacxxxxxxx.apm-agt.us-ashburn-1.oci.oraclecloud.com/20200101/observations/public-span?dataFormat=zipkin&dataFormatVersion=2&dataKey=P2HVLPEYDQ3R3366OBCIUFOM42Z4xxxx',
#アプリケーションの実行 ※130000は東京を示すコード
$ python3 apmweather.py 130000
2021-12-22T11:00:00+09:00 東京地方 晴れ 夜 くもり
正しく実行できれば上記のようにエラーメッセージなしで、東京の天気予報の情報を表示します
##APMでトレースデータを確認する
-
APM->トレース・エクスプローラーをクリックすると、Weather SampleAPMという名前のアプリケーションのトレース結果が表示されます
-
このアプリケーションは以下のように3つのSpanで構成されており、実際にAPIにアクセスし情報を表示する処理を行っているのは2番目のAccess Weather APIというSPAN名です
本アプリケーションは、PythonでのAPMトレースの使い方が分かるようにシンプルな記述に努めました。
コード内のzipkin_spanは、ファンクション部にwith文を付けて実装することにより、そのファンクションをSPANとして定義します。SPANごとにその処理の実行時間が記録されるので、マイクロサービスのようなAPIを組み合わせて使用するようなアプリケーションなどの性能監視や問題個所の特定に役立つと思います。
ちょっと分りづらいですがこちらにもObject StorageとKafkaを使ったサンプルがありますので、ご参考に