You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:35:10