2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでAPMトレーサーを試してみる

Last updated at Posted at 2021-12-22

OCIのAPM(アプリケーション・パフォーマンス・モニタリング)には、OpenTracingに対応した分散トレーシングの機能が含まれています。JavaのMavenプロジェクトやHelidonには、APM Javaトレーサーが用意されていますが、Pythonの場合はpy_zipkinを使用することで同様にトレースデータをAPMに送信することが可能です。
ここでは、APMの分散トレーシングがどのように使えるのかという点を、実際にPythonのアプリケーションで試してみます。

##APMに必要なユーザーと権限
今回は、設定にアカウント管理者ユーザーを用しているので省略しますが、一般ユーザーの場合はドキュメントに従ってポリシーを付与します

APMドメインの作成

  • 監視及び管理 -> アプリケーション・パフォーマンス・モニタリング -> 管理からAPMドメインの作成をクリック
    image.png

  • 名前とコンパートメントを選択し作成。無償枠を利用する場合は、Always Freeにチェックを入れる
    image.png

  • 作成後、エンドポイントとパブリックのデータ・キーは後で必要になるのでコピーしておく
    image.png

実行環境の準備

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という名前のアプリケーションのトレース結果が表示されます
    image.png

  • このアプリケーションは以下のように3つのSpanで構成されており、実際にAPIにアクセスし情報を表示する処理を行っているのは2番目のAccess Weather APIというSPAN名です
    image.png

本アプリケーションは、PythonでのAPMトレースの使い方が分かるようにシンプルな記述に努めました。
コード内のzipkin_spanは、ファンクション部にwith文を付けて実装することにより、そのファンクションをSPANとして定義します。SPANごとにその処理の実行時間が記録されるので、マイクロサービスのようなAPIを組み合わせて使用するようなアプリケーションなどの性能監視や問題個所の特定に役立つと思います。

ちょっと分りづらいですがこちらにもObject StorageとKafkaを使ったサンプルがありますので、ご参考に

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?