MLFlow前端操作日志:如何获取user_id或user_name
在MLFlow的_delete_experiment函数中获取操作执行者user_id的方法
因内部软件政策合规要求,需记录前端(UI)操作对应的user_name或user_id。在以下_delete_experiment函数中,希望在日志里记录操作的experiment_id及执行者user_id,但不清楚如何获取user_id:
@catch_mlflow_exception @_disable_if_artifacts_only def _delete_experiment(): request_message = _get_request_message( DeleteExperiment(), schema={"experiment_id": [_assert_required, _assert_string]} ) experiment_id=request_message.experiment_id experiment_name=request_message.experiment_name # print(experiment_id) # Log the experiment_id and username logging.info(f"Deleting experiment with ID: {experiment_id} by user: {user_id}") _get_tracking_store().delete_experiment(request_message.experiment_id) response_message = DeleteExperiment.Response() response = Response(mimetype="application/json") response.set_data(message_to_json(response_message)) return response
可行的获取方式:
- 从Flask请求上下文获取认证用户
MLFlow服务端基于Flask搭建,若已启用认证(如HTTP Basic、OAuth、LDAP等),请求上下文会携带已认证的用户信息,可直接通过request对象获取:
from flask import request # 在函数内添加 user_id = request.remote_user # 适用于多数标准认证场景 # 若使用自定义认证头,可从headers提取 # user_id = request.headers.get("X-User-ID")
- 从MLFlow内部请求上下文提取
MLFlow的请求处理有内部上下文对象,可查看同项目下其他handler函数的实现(如_create_experiment),参考它们获取用户信息的方式,示例:
from mlflow.server.handlers import _get_request_context request_context = _get_request_context() user_id = request_context.user_id # 需根据实际上下文属性调整字段名
- 要求前端传递user_id(需配合修改)
如果前端在发起请求时已持有用户信息,可修改请求schema,让前端传递user_id字段:
request_message = _get_request_message( DeleteExperiment(), schema={ "experiment_id": [_assert_required, _assert_string], "user_id": [_assert_required, _assert_string] # 添加user_id字段校验 } ) user_id = request_message.user_id
建议
优先参考MLFlow现有handler的实现逻辑,从请求上下文或内部上下文获取用户信息,这是最符合框架规范的方式;若为自定义认证体系,则对应从请求头或认证数据中提取。
内容的提问来源于stack exchange,提问作者fabio.geraci
相关产品推荐
相关产品推荐

