Azure ML SDK V2(AKS端点):score.py日志自定义维度及RequestId关联
Azure机器学习AKS托管在线端点(SDK V2)日志问题解决方案
1. 基础日志丢失问题
AKS托管在线端点默认不会自动捕获score.py中init和run函数内的基础日志输出。若要保留这类日志,需切换使用AzureLogHandler将日志直接发送至Application Insights,或是配置端点的日志采集规则,将容器标准输出/错误日志同步到日志分析工作区。
2. 优化AzureLogHandler实例化方式
无需在init和run函数中分别实例化日志记录器,可在score.py全局作用域内完成一次初始化,后续在两个函数中复用同一个logger实例:
import logging from azureml.core import Run from azureml.core.authentication import MsiAuthentication from azureml.monitoring import AzureLogHandler # 全局初始化日志记录器 logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # 避免重复添加Handler if not logger.handlers: msi_auth = MsiAuthentication() run = Run.get_context(authentication=msi_auth) log_handler = AzureLogHandler(run=run) logger.addHandler(log_handler) def init(): # 直接使用全局logger logger.info("init函数执行完成") def run(request): # 直接使用全局logger logger.info("run函数开始处理请求") # 推理逻辑 return {"result": "success"}
3. 向Application Insights记录自定义维度
有两种常用方式添加自定义维度:
- 通过日志extra参数传递:在输出日志时,用
extra参数附加自定义键值对,这些数据会自动映射到Application Insights的自定义维度字段:logger.info("推理请求处理完毕", extra={"user_id": "12345", "model_version": "v1.0"}) - 使用TelemetryClient直接发送:初始化
TelemetryClient后,通过track_trace方法携带自定义属性:from applicationinsights import TelemetryClient # 全局初始化TelemetryClient(可从环境变量获取Instrumentation Key) tc = TelemetryClient("<your-instrumentation-key>") def run(request): tc.track_trace("处理推理请求", properties={"request_type": "batch", "data_size": "100KB"}) tc.flush() # 推理逻辑
4. 关联日志与requestId追踪推理请求
AKS托管在线端点会为每个推理请求生成唯一的requestId,可通过请求头X-Ms-Request-Id获取,将其作为自定义维度加入日志,即可在Application Insights中按requestId筛选关联所有该请求的日志:
def run(request): # 获取requestId request_id = request.headers.get("X-Ms-Request-Id", "unknown-request-id") # 日志中携带requestId logger.info("开始处理推理请求", extra={"requestId": request_id}) # 推理步骤日志也携带requestId logger.debug("加载模型完成", extra={"requestId": request_id}) # 后续逻辑 return {"result": "success", "requestId": request_id}
在Application Insights中,可通过Kusto查询筛选特定requestId的日志:
traces | where customDimensions.requestId == "<target-request-id>" | order by timestamp desc
内容的提问来源于stack exchange,提问作者Nishikant Jain
相关产品推荐
相关产品推荐

