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

如何捕获Airflow WebServer访问者信息并生成访问日志?

如何记录Airflow WebServer的登录用户及时间

Stack Exchange社区里确实有开发者解决过这类需求,核心思路是借助Airflow WebServer基于Flask框架的特性,通过钩子或信号监听实现登录事件捕获,以下是具体可行方案:

方法1:利用Flask-Login的登录信号监听

Airflow默认使用Flask-Login处理用户认证,可直接监听user_logged_in信号触发日志记录:

  1. 找到Airflow的webserver_config.py配置文件(若不存在可从官方示例文件复制生成)
  2. 添加以下代码:
from flask_login import user_logged_in
import logging
from datetime import datetime

# 配置专属日志处理器
login_logger = logging.getLogger('airflow_login')
login_logger.setLevel(logging.INFO)
file_handler = logging.FileHandler('/path/to/airflow_login.log')
formatter = logging.Formatter('%(asctime)s - %(message)s')
file_handler.setFormatter(formatter)
login_logger.addHandler(file_handler)

# 定义登录事件回调函数
def log_login(sender, user, **extra):
    login_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    login_logger.info(f"User {user.username} logged in at {login_time}")

# 注册信号监听
user_logged_in.connect(log_login)
  1. 重启Airflow WebServer,之后用户登录时,指定日志文件会自动记录用户名和登录时间。

方法2:Flask全局请求钩子

如果需要捕获所有WebServer访问(不仅限于登录),可使用Flask的before_request钩子:
在webserver_config.py中添加:

from flask import request
import logging
from datetime import datetime
from airflow.www.security import get_current_user

access_logger = logging.getLogger('airflow_web_access')
access_logger.setLevel(logging.INFO)
file_handler = logging.FileHandler('/path/to/airflow_web_access.log')
access_logger.addHandler(file_handler)

@app.before_request
def log_web_access():
    user = get_current_user()
    if user and user.is_authenticated:
        access_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        access_logger.info(f"Authenticated user {user.username} accessed {request.path} at {access_time}")

此方案会记录已登录用户的所有Web页面访问路径、用户名及时间。

注意事项

  • 确保Airflow版本为2.x及以上,上述方案基于Airflow 2.x的Flask-Login实现
  • 日志文件路径需配置Airflow进程可读写的权限
  • 若使用自定义认证后端(如LDAP、OAuth),需确保get_current_user()能正确获取用户信息

内容的提问来源于stack exchange,提问作者Terence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:40:46