ヘルプ APM APMインサイト Pythonエージェント カスタムインストルメンテーション
デフォルトでAPMインサイト Pythonエージェントは、サポートしているフレームワークとモジュールのアプリケーションごとのWebサーバーゲートウェイインターフェース(WSGI)および非同期サーバーゲートウェイインターフェース(ASGI)の受信Webリクエストをキャプチャします。
これ以外のより詳細なメトリックを取得したい場合はカスタムインストルメンテーションAPIを使用します。これによりアプリケーション内の特定のトランザクションやコードを分析できます。
このドキュメントではAPI、機能性、構文について記載します。
デフォルトで、エージェントは受信Webリクエストを自動で収集し、[トランザクション]→[Web]タブに表示します。しかし、エージェントはソケット接続、スケジューラー要求、スレッドメソッド、非同期要求といったクライアントとサーバー間の通信に関するタイプを監視できません。
これらトランザクションを追跡するには、次の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
構文:
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で実装する必要があります。
取得されたデータは、トレースタブに表示されます。また、実装したクラスやメソッド内で要求されたデータベース操作関連のトランザクションはデータベースタブに表示されます。
構文:
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