ToolJet 审计日志(Audit Logs)完整指南:记录、筛选、脱敏与文件导出

ToolJet 审计日志(Audit Logs)完整指南:记录、筛选、脱敏与文件导出 ToolJet 审计日志Audit Logs完整指南记录、筛选、脱敏与文件导出【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet本文围绕 ToolJet 的审计日志Audit Logs功能展开系统讲解如何通过日期范围与多维度筛选检索账户内全部操作记录、如何解读每条日志的完整字段结构以及如何通过环境变量配置日志文件的生成路径、每日轮转与敏感信息脱敏。读完本文你将能够在自托管部署中开启审计日志文件输出并结合 环境变量配置 与 syslog 集成方案 落地合规审计与安全追踪。付费功能提示Audit Logs 属于 ToolJet 的付费功能Paid feature需要对应的许可证支持。什么是审计日志审计日志是 ToolJet 账户内所有操作行为的自动记录报告。它自动捕获并展示事件记录谁who在何时when、何地where执行了什么操作what同时附带 IP 地址等信息。简单来说每一次登录、建应用、跑查询、改权限等动作都会被记录成一条可检索、可追溯的事件。在服务端每条审计事件对应一张数据库表记录其实体定义位于 server/src/entities/audit_log.entity.ts对应数据库表audit_logs。核心字段包括idUUID 主键唯一事件 IDuser_id/organization_id执行者用户与所属组织resource_id/resource_name/resource_type被操作资源的 ID、名称与类型resource_type使用枚举取值见 server/src/modules/app/constants/modules.ts包含APP、USER、DataQueries、GroupPermissions等action_type动作类型如APP_CREATE、USER_LOGINip_address来源 IPmetadataJSON 结构包含tooljet_version与user_agentcreated_at事件产生时间。日志写入侧还使用了 winston 自定义格式auditLog见 server/src/modules/audit-logs/constants/index.ts把审计数据注入auditLog字段并提取resourceType作为日志label这解释了下方示例日志文件中的结构。在界面中查看与检索日志打开账户的 Audit Logs 页面即可看到日志列表视图默认展示最近 24 小时的日志并提供日期范围选择、筛选与分页能力。日期范围Date Range使用范围选择器range picker检索指定日期与时间区间内发生的事件默认加载最近 24 小时的日志作为初始视图from 与 to 之间可指定的最大跨度是 30 天超出范围无法检索页面底部提供分页导航每页最多展示 7 条日志。30 天最大查询跨度由许可证条款控制。前端通过getMaxDurationForAuditLogs()请求/license/audit-logs/max-duration接口获取上限见 frontend/src/_services/auditLogsService.js服务端对应控制器定义在 server/src/modules/licensing/controllers/audit-logs.controller.ts其能力受许可证字段MAX_DURATION_FOR_AUDIT_LOGSmaxDaysForAuditLogs约束见 server/src/modules/licensing/constants/index.ts。筛选审计日志Audit Logs 页面提供四组筛选条件可组合使用以快速定位目标事件。按用户筛选Select Users从下拉列表中选择特定用户即可查看该用户的所有活动记录。按应用筛选Select Apps下拉列表会展示当前账户关联的全部应用。选择某个应用后日志将只保留与该应用相关的记录。按资源筛选Select Resources资源Resources说明User过滤全部用户类事件如USER_LOGIN、USER_SIGNUP、USER_INVITE、USER_INVITE_REDEEM。App过滤全部应用类事件如APP_CREATE、APP_UPDATE、APP_VIEW、APP_DELETE、APP_IMPORT、APP_EXPORT、APP_CLONE。Data Query过滤与数据查询关联的事件如DATA_QUERY_RUN。Group Permission过滤全部与用户组权限关联的事件包括GROUP_CREATE、GROUP_UPDATE、GROUP_DELETE。App Group Permission每个用户组内可为应用设置只读或可编辑权限这些变更会作为应用组权限事件被记录。前端获取资源列表调用getResources()请求/audit-logs/resources接口见 frontend/src/_services/auditLogsService.js。需要说明的是资源枚举在代码层面是可扩展的除上表外server/src/modules/app/constants/modules.ts 中还定义了Workflows、AppGit、AppHistory、DataQueryFolders等更多模块类型界面中是否展示取决于当前版本与许可证能力。按动作筛选Select Actions动作Actions说明USER_LOGIN每次用户登录时记录。USER_SIGNUP每次新用户注册时记录。USER_INVITE在Manage Users中邀请用户时每次发送邀请都会记录一条事件。USER_INVITE_REDEEM邀请被兑换接受时记录。APP_CREATE用户创建新应用时记录。APP_UPDATE对应用重命名、设为公开、编辑分享链接或部署应用等操作时记录。APP_VIEW有人查看已发布应用时记录公开应用不计入。APP_DELETE用户从仪表盘删除应用时记录。APP_IMPORT用户导入应用时记录。APP_EXPORT应用被导出时记录。APP_CLONE复制现有应用生成克隆时记录。DATA_QUERY_RUN添加数据源、创建查询或从查询编辑器/已发布应用中运行查询时记录。GROUP_PERMISSION_CREATE创建用户组时记录。GROUP_PERMISSION_UPDATE向组中添加/移除应用或用户或更新组权限时记录。GROUP_PERMISSION_DELETE从账户中删除用户组时记录。APP_GROUP_PERMISSION_UPDATE为用户组中的应用设置View查看或Edit编辑权限且权限被更新时记录默认情况下应用对用户组的权限为View。理解日志信息展开任一条日志可以看到完整的结构化信息。下面对照 readinglogv2 截图 逐字段解读。属性Property说明action_type该事件记录的动作类型具体取值见上文 按动作筛选 一节。created_at事件被记录时的日期与时间。id每条事件被分配的唯一事件 ID。ip_address产生该事件来源的 IP 地址。metadata包含两个子属性tooljet_version事件发生时 ToolJet 的版本与user_agent使用的设备与浏览器信息。organization_idToolJet 中每个组织都有唯一 ID事件发生时会被一并记录。resource_id不同 资源 在创建时被分配各自关联的 ID。resource_name参与事件记录的 资源 名称例如创建或删除应用时会显示该应用的名称。resource_type指示参与事件的 资源 类型。user_id每个用户账户在 ToolJet 中有唯一 ID事件发生时一并记录。这些字段与数据库实体一一对应见 server/src/entities/audit_log.entity.ts其中resource_type是枚举列取值源自MODULES常量server/src/modules/app/constants/modules.tsmetadata以 JSON 存储。日志文件导出、轮转、脱敏与路径除界面内查看外审计日志还可以输出为本地文件便于归档、投递到 syslog 或第三方分析平台。日志文件Log File日志文件会包含审计日志的全部数据。只要在环境变量中指定了路径系统就会在该路径下生成日志文件并且每生成一条新审计日志文件都会被动态更新。关于如何启用日志文件生成可参考 syslog 集成指南只需将环境变量LOG_FILE_PATH设为期望的路径例如rsyslog即可激活该功能。详细的启动与验证步骤包括如何检查生成的目录结构都在该文档中。日志轮转Log Rotation日志文件按每日轮转每天都会创建一个新日志文件从而高效地管理与组织审计数据。实现上服务端基于winston-daily-rotate-file的DailyRotateFiletransport 完成轮转目录名为{process_id}-%DATE%文件名固定为audit.log日期模式为YYYY-MM-DD轮转时还会把旧文件的内容整理并写出为.json格式的归档文件相关代码见 server/src/modules/log-to-file/constants/index.ts。日志脱敏Log RedactionToolJet 实现了日志脱敏以保护敏感信息。默认情况下以下请求/响应头在日志中被掩码authorizationcookieset-cookiex-api-keyproxy-authorizationwww-authenticateauthentication-infox-forwarded-for在服务端这些默认脱敏路径被硬编码在 pino logger 的redact.paths配置中并统一使用[REDACTED]作为掩码内容同时会把环境变量LOGGER_REDACT中的逗号分隔字段合并进脱敏路径列表见 server/src/modules/app/loader.ts。此外你还可以通过LOGGER_REDACT环境变量指定自定义脱敏字段变量说明LOGGER_REDACT需要被掩码的额外字段的逗号分隔列表例如req.headers[x-session-id],req.headers[x-device-fingerprint]例如LOGGER_REDACTres.headers[x-rate-limit-remaining],res.headers[x-request-id]注意LOGGER_REDACT中的每个条目会被直接拼接到 pino 的redact.paths数组server/src/modules/app/loader.ts因此请使用与示例一致的 pino 路径语法如req.headers[xxx]、res.headers[xxx]。日志文件路径Log File Path日志文件的路径由环境变量LOG_FILE_PATH定义。该路径相对于机器的主目录home directory。例如若LOG_FILE_PATH设为hsbc/dashboard/log则最终生成的日志文件路径结构如下homepath/hsbc/dashboard/log/tooljet_log/{process_id}-{date}/audit.log其中{process_id}是唯一进程标识符的占位符{date}表示当前日期。这种结构化路径确保审计日志按进程与日期双重组织便于追踪与分析。变量说明LOG_FILE_PATH日志文件将被创建的路径例如tooljet/log/tooljet-audit.log该行为与代码实现一致服务端使用path.join(os.homedir(), filePath, tooljet_log)计算绝对目录目录不存在时会自动递归创建再以{processId}-%DATE%作为子目录写入audit.log见 server/src/modules/log-to-file/constants/index.ts。示例日志文件数据以下是一条APP_CREATE事件的真实日志结构展开查看{ level: info, message: PERFORM APP_CREATE OF awdasdawdwd APP, timestamp: 2023-11-02 17:12:40, auditLog: { userId: 0ad48e21-e7a2-4597-9568-c4535aedf687, organizationId: cf8e132f-a68a-4c81-a0d4-3617b79e7b17, resourceId: eac02f79-b8e2-495a-bffe-82633416c829, resourceType: APP, actionType: APP_CREATE, resourceName: awdasdawdwd, ipAddress: ::1, metadata: { userAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36, tooljetVersion: 2.22.2-ee2.8.3 } }, label: APP }可以看到auditLog内的字段与界面展示的日志属性一一对应且与数据库实体字段保持一致顶层timestamp使用YYYY-MM-DD HH:mm:ss格式label取自resourceType二者均由 winston 日志格式在写入时注入见 server/src/modules/log-to-file/constants/index.ts 与 server/src/modules/audit-logs/constants/index.ts。数据保留策略审计日志在数据库中会按保留期自动清理。服务端通过AuditLogsClearScheduler定时任务server/src/modules/audit-logs/scheduler.ts实现任务每天凌晨 2:00CronExpression.EVERY_DAY_AT_2AM运行删除早于保留期截止日期的日志截止日期 当前日期 - 保留天数保留天数由环境变量AUDIT_LOGS_RETENTION_PERIOD控制默认 90 天将该变量设为0可跳过清理永久保留审计日志。# 默认保留 90 天不设置时 # 自定义保留天数例如 30 天 AUDIT_LOGS_RETENTION_PERIOD30 # 禁用自动清理永久保留 AUDIT_LOGS_RETENTION_PERIOD0权限与可用性说明审计日志受许可证license控制属于付费能力服务端通过FeatureAbilityGuard结合许可证字段LICENSE_FIELD.AUDIT_LOGSauditLogsEnabled进行能力校验前端在无权限时仅渲染空页面见 frontend/src/modules/auditLogs/pages/AuditLogsPage/AuditLogsPage.jsx后端提供/audit-logs、/audit-logs/resources、/license/audit-logs/license-terms、/license/audit-logs/max-duration等接口见 frontend/src/_services/auditLogsService.js 与 server/src/modules/licensing/controllers/audit-logs.controller.ts在 server/src/modules/licensing/constants/index.ts 的计划定义中Audit logs 属于 Teambusiness及以上计划的功能。最佳实践小结按需设置保留期默认 90 天的清理策略适合大多数场景若有合规留存要求可通过AUDIT_LOGS_RETENTION_PERIOD0关闭清理或设置更长天数。开启日志文件输出设置LOG_FILE_PATH相对主目录即可生成每日轮转的audit.log轮转时自动产出 JSON 归档方便投递 syslog 或导入分析平台。主动脱敏敏感头默认脱敏列表覆盖authorization、cookie、x-api-key等常见敏感头自定义头如会话 ID、设备指纹务必通过LOGGER_REDACT补充掩码避免敏感信息进入日志。善用筛选组合结合「用户 应用 资源 动作」四维筛选与 30 天范围查询可快速定位安全事件如异常的USER_LOGIN、越权的APP_GROUP_PERMISSION_UPDATE。留意许可证边界审计日志是付费功能查询最大时间跨度也受许可证maxDaysForAuditLogs约束自托管部署前请确认许可证与版本支持情况。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考