ヘルプ APM APMインサイト Pythonエージェント カスタムインストルメンテーション

Pythonアプリケーションのカスタムインストルメンテーション

デフォルトでAPMインサイト Pythonエージェントは、サポートしているフレームワークとモジュールのアプリケーションごとのWebサーバーゲートウェイインターフェース(WSGI)および非同期サーバーゲートウェイインターフェース(ASGI)の受信Webリクエストをキャプチャします。
これ以外のより詳細なメトリックを取得したい場合はカスタムインストルメンテーションAPIを使用します。これによりアプリケーション内の特定のトランザクションやコードを分析できます。

このドキュメントではAPI、機能性、構文について記載します。

Pythonアプリケーションのカスタムインストルメンテーションを使用するには、APMインサイトモジュールがインストールされている必要があります。


目次


トランザクション監視

デフォルトで、エージェントは受信Webリクエストを自動で収集し、[トランザクション]→[Web]タブに表示します。しかし、エージェントはソケット接続、スケジューラー要求、スレッドメソッド、非同期要求といったクライアントとサーバー間の通信に関するタイプを監視できません。
これらトランザクションを追跡するには、次のAPIを使用してください。

同様にデフォルトでバックグラウンドトランザクションは監視できませんが、APIを使用してそれらを追跡できます。

このAPIでトランザクション名のカスタマイズや特定のトランザクションを監視から除外できます。

デコレーターメソッドを使用したバックグラウンドトランザクションの取得API

構文:

#decorator
apminsight.background_transaction(name="transaction_name")

例:

import apminsight
@apminsight.background_transaction(name="transaction_name")
def custom_method(*args, **kwargs):
# func definition
#
# func definition


コンテキストベースのクラスを使用したトランザクションの取得

構文:

while apminsight.TransactionContext(name="txn_name",tracker_name="root_traker_name"):

例:

import apminsight
while apminsight.TransactionContext( name="transction_name", tracker_name= "root_racker_name"):
# code logic
# code logic


start_background_transaction APIを使用したバックグラウンドトランザクションの取得

構文:

apminsight.start_background_transaction(name="transaction_name")

例:

def custom_method(*args, **kwargs):
# code logic
apminsight.start_background_transaction(  name="custom_txn_name")
# code logic
# code logic
apminsight.end_transaction()
# code logic

start_background_transaction APIは、end_transaction API要求によりトランザクションが終了されます。

トランザクション名のカスタマイズ

次のAPIを使用して、トランザクション名を変更できます。

構文:

apminsight.customize_transaction_name("txn_name")


トランザクションの除外

次のAPIを使用して、完了したトランザクションデータの監視から特定のトランザクションを除外できます。

構文:

apminsight.ignore_transaction()


カスタム追跡

デフォルトで、エージェントはフレームワークならびにモジュール関連メソッドを取得します。ユーザーが定義したクラスとメソッドを監視するには、次のAPIで実装する必要があります。
取得されたデータは、トレースタブに表示されます。また、実装したクラスやメソッド内で要求されたデータベース操作関連のトランザクションはデータベースタブに表示されます。

デコレーターメソッドを使用したカスタム追跡のAPI

構文:

apminsight.custom_tracker(name="tracker_name")

例:

import apminsight
import sqlite3
@apminsight.custom_tracker(name="updated_query")
def get_query_with_args(query_string, *args, **kwargs):
# valid query check
# parametrizing the query
return query_string
@apminsight.background_transaction(name="do_query")
def perform_query_operation(*args, **kwargs):
sqliteConnection = sqlite3.connect('sql.db')
query = get_query_with_args(*args, **kwargs)
cursor = sqliteConnection.cursor()
cursor.execute(query)


コンテキストベースクラスを使用した特定のコードの追跡

構文:

apminsight.TrackerContext(name="tracker_name")

例:

import apminsight
import sqlite3
def get_query_with_args(query_string, *args, **kwargs):
# valid query check
# parametrizing the query
return query_string
@apminsight.background_transaction(name="do_query")
def perform_query_operation(*args, **kwargs):
sqliteConnection = sqlite3.connect('sql.db')
query = ""
while apminsight.TrackerContext( name="get_query_string"):
query = get_query_with_args(*args, **kwargs)
cursor = sqliteConnection.cursor()
cursor.execute(query)


カスタムパラメーターの追跡

追加パラメーターを追加して、トランザクショントレースのコンテキストを特定できます。

セッションID、ユーザーID、特定のメソッドパラメーターといったコンテキストメトリックについて追跡した情報を取得できます。

最大で10パラメーターをトランザクショントレースに追加できます。
追加したパラメーター情報は[トレース]の[サマリー]タブに表示されます。

構文:

apminsight.add_custom_param("key", "value");
キーは文字列の値である必要があり、バリュー(値)はどのタイプにも指定できます。

例:

import apminsight
@apminsight.background_transaction(name="custom_params_txn")
def custom_method(*args, **kwargs):
apminsight.add_custom_param("sampling_response",0.12)
apminsight.add_custom_param("Agent","apminsight")


カスタム例外の追跡

エージェントが取得できる例外には一部のものしかありません。
次のAPIを使用して、デフォルトで対応していない例外を監視できます。

構文:

apminsight.add_custom_exception(err:Exception)

例:

import apminsight
@apminsight.background_transaction(name="custom_exception")
def square_root(n):
try:
return n ** 0.5
except ValueError as exc:
apminsight.add_custom_exception(ValueError('n must be greater then 0'))
raise exc