日志保留策略
创建日期:2026-02-07 | 状态:参考文档
文档目的
整理 SaaS 行业日志保留的通用标准,为 Celoria 制定合理的日志保留与归档策略提供参考依据。
一、行业通用标准
按日志类型的保留时长
| 日志类型 |
推荐保留时长 |
说明 |
来源 |
| 应用日志 (Application Logs) |
90 天 |
请求日志、错误日志、调试信息。超过 3 个月的应用日志对排查问题的价值极低,大多数问题在 72 小时内被发现。 |
业界共识 |
| 审计日志 (Audit Logs) |
1-3 年 |
登录/登出、权限变更、数据修改。安全审计需要,发现数据泄露的平均时间为 100-200 天,保留 1 年是最低标准。 |
Microsoft / Google Cloud |
| 安全日志 (Security Logs) |
1 年 |
认证失败、异常访问、IP 黑名单触发。用于安全事件回溯和取证分析。 |
NIST / SOC 2 |
| 交易日志 (Transaction Logs) |
3-7 年 |
支付记录、退款记录。受金融合规要求约束(PCI DSS 要求至少 1 年,税务法规可能要求 7 年)。 |
PCI DSS / IRS |
| 系统性能指标 (Metrics) |
90 天高精度 + 1 年聚合 |
CPU、内存、响应时间等指标。90 天内保留秒级精度,之后降采样为小时/天级聚合。 |
Datadog / Grafana |
| 用户行为日志 (Activity Logs) |
1 年 |
页面访问、功能使用。用于产品分析和用户体验优化。 |
业界共识 |
合规框架要求
| 合规框架 |
最低保留要求 |
适用范围 |
| PCI DSS |
1 年(至少 3 个月可立即访问) |
处理信用卡支付的系统 |
| SOC 2 |
1 年 |
SaaS 服务提供商 |
| HIPAA |
6 年 |
医疗健康数据(不适用于美甲行业) |
| GDPR |
无固定期限,遵循"最小必要"原则 |
欧盟用户数据 |
| IRS (美国税务) |
3-7 年 |
财务和交易记录 |
关键数据
数据泄露的平均发现时间为
100-200 天。因此审计日志保留至少 1 年是行业最低标准,确保安全事件发生时有足够的日志可供回溯分析。
二、主流 SaaS 平台做法
| 平台 |
应用日志 |
审计日志 |
归档策略 |
| Microsoft 365 |
90 天 |
标准版 180 天,E5 版 1 年,可扩展至 10 年 |
分层存储(热/冷/归档) |
| Google Cloud |
30 天(默认) |
Admin Activity: 400 天,Data Access: 30 天(可配置) |
导出到 BigQuery / Cloud Storage |
| Salesforce |
— |
180 天(Setup Audit Trail),Field History: 18-24 个月 |
Event Log Files 可导出 |
| Zenoti(美甲行业) |
未公开 |
未公开,但提供审计日志查看功能 |
— |
三、Celoria 推荐方案
日志保留策略
| Celoria 日志表 |
保留时长 |
归档方式 |
说明 |
application_logs |
90 天 |
过期删除 |
请求日志、错误日志。90 天后价值极低,直接清理。 |
system_error_logs |
90 天 |
过期删除 |
系统错误记录。与应用日志同策略。 |
auth_audit_logs |
1 年 |
冷存储归档 |
登录/登出、JWT 刷新。安全审计需要。 |
permission_audit_logs |
1 年 |
冷存储归档 |
权限变更记录。合规审计需要。 |
transactions / transaction_history |
7 年 |
不删除 |
支付记录。税务合规要求(IRS 3-7 年)。 |
promotion_send_logs |
1 年 |
过期删除 |
营销发送明细。超过 1 年的发送记录参考价值低。 |
export_logs |
90 天 |
过期删除 |
数据导出记录。 |
实施建议
定时清理任务
建议创建 node-cron 定时任务,每天凌晨执行日志清理:
// 示例:日志清理 SQL
-- 清理 90 天前的应用日志
DELETE FROM application_logs WHERE created_at < NOW() - INTERVAL '90 days';
-- 清理 90 天前的系统错误日志
DELETE FROM system_error_logs WHERE created_at < NOW() - INTERVAL '90 days';
-- 归档 1 年前的审计日志(先导出再删除)
-- Step 1: COPY to file
-- Step 2: DELETE FROM auth_audit_logs WHERE created_at < NOW() - INTERVAL '1 year';
-- 清理 1 年前的营销发送明细
DELETE FROM promotion_send_logs WHERE sent_at < NOW() - INTERVAL '1 year';
数据量预估(单租户,150 家门店)
| 日志表 |
保留时长内的数据量 |
计算逻辑 |
application_logs |
~450 万条 |
~5 万条/天 × 90 天 |
auth_audit_logs |
~180 万条 |
~5,000 条/天 × 365 天 |
permission_audit_logs |
~18 万条 |
~500 条/天 × 365 天 |
四、参考资料