Django API的New Relic事务显示视图函数名,如何改为展示API端点?
在Django中配置New Relic以显示API端点作为事务名称
New Relic默认会以Django视图函数名作为事务名称,要改成显示API端点,可通过以下几种方式实现:
方法一:在视图中手动设置事务名称
直接在视图函数或类视图中调用New Relic的API指定事务名称:
函数视图示例
import newrelic.agent def function1_name(request): # 用请求路径作为事务名称,也可自定义格式 newrelic.agent.set_transaction_name(request.path, group="Django/API") # 原有业务逻辑 ...
类视图示例
import newrelic.agent from rest_framework.views import APIView class MyAPIView(APIView): def dispatch(self, request, *args, **kwargs): # 提前设置事务名称 newrelic.agent.set_transaction_name(request.path, group="Django/API") return super().dispatch(request, *args, **kwargs)
方法二:通过中间件全局配置
创建一个全局中间件,自动为所有符合条件的API请求设置事务名称,避免逐个修改视图:
编写中间件
import newrelic.agent class NewRelicAPINameMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # 仅对API路径生效,可根据实际路径调整判断条件 if request.path.startswith('/api/'): # 若URL含参数(如/api/user/<int:pk>/),可改用request.resolver_match.url_name统一命名 # 示例:newrelic.agent.set_transaction_name(f"/api/{request.resolver_match.url_name}", group="Django/API") newrelic.agent.set_transaction_name(request.path, group="Django/API") response = self.get_response(request) return response
注册中间件
在项目settings.py的MIDDLEWARE列表中添加该中间件(建议放在靠前位置):
MIDDLEWARE = [ # 其他中间件 'your_app_name.middleware.NewRelicAPINameMiddleware', # 其他中间件 ]
方法三:修改New Relic配置文件全局生效
直接调整New Relic的配置文件(newrelic.ini),让它优先使用URL路径作为事务名称:
找到[framework:django]配置段,修改事务名称生成器:
[framework:django] transaction_name_generator = newrelic.hooks.framework_django:transaction_name_generator_url
该配置会全局替换默认的视图函数命名规则,改用URL路径作为事务名称。
注意事项
- 如果API URL包含动态参数(如用户ID、商品ID),直接使用
request.path会导致事务名称碎片化(每个参数值对应一个事务)。此时建议使用request.resolver_match.url_name获取URL配置中的别名,统一归为同一个事务名称。
内容的提问来源于stack exchange,提问作者Aditya Tiwari
相关产品推荐
相关产品推荐

