Python 应用程序自定义插桩
默认情况下,APM Insight Python Agent 可捕获基于 Web Server Gateway Interface (WSGI) 和 Asynchronous Server Gateway Interface (ASGI) 应用程序的传入 Web 请求,适用于受支持的框架和模块。如需进行更深入的分析,您可以使用自定义插桩 API,从而分析应用程序中的特定事务或代码块。
本文档涵盖各类 API 的功能和语法说明。
监控事务
默认情况下,Agent 会自动捕获传入的 Web 请求并将其显示在事务 > Web 标签中。但是,Agent 不会监控其他类型的客户端-服务器通信,如 Socket 连接、调度程序调用、线程方法和异步调用。要追踪这些事务,可以使用所提供的 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()
自定义追踪器
默认情况下,Agent 会自动捕获与框架和模块相关的方法。要监控用户自定义的类和方法,必须使用所提供的 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")
追踪自定义异常
Agent 通常会捕获已捕获和未捕获的异常。如果您希望捕获未插桩代码块中的异常,此 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
