Skip to content

审计日志

PRX 内置 AuditLogger 组件,持续追踪所有安全相关事件。审计日志为安全审计、合规检查和事后溯源提供不可篡改的事件记录。

概述

AuditLogger 拦截 PRX 运行时中的关键操作并记录为结构化审计事件,包括:

  • 工具执行 -- 每次工具调用的参数、结果和耗时
  • 策略决策 -- 策略引擎允许或拒绝操作的记录
  • 认证事件 -- 配对、登录、Token 刷新等身份相关操作
  • 配置变更 -- 运行时配置的热重载和修改记录
  • 进化操作 -- 自进化系统的提案、审批和变更记录

事件类型

安全事件

事件严重级别说明
auth.pair_requestInfo设备发起配对请求
auth.pair_successInfo设备配对成功
auth.pair_failedWarn配对验证失败(错误码/过期)
auth.token_issuedInfo颁发新的访问 Token
auth.token_revokedInfoToken 被撤销
auth.unauthorizedWarn未授权的 API 请求

策略事件

事件严重级别说明
policy.allowDebug策略引擎允许操作
policy.denyWarn策略引擎拒绝操作
policy.rule_matchedDebug匹配到的具体策略规则

工具事件

事件严重级别说明
tool.executeInfo工具开始执行
tool.completeInfo工具执行完成
tool.errorError工具执行出错
tool.timeoutWarn工具执行超时
tool.sandbox_violationError沙箱安全违规

系统事件

事件严重级别说明
config.reloadInfo配置热重载
config.changedInfo配置项发生变更
evolution.proposedInfo自进化提案生成
evolution.appliedInfo进化变更已应用
evolution.rollbackWarn进化变更被回滚
session.createdInfoAgent 会话创建
session.terminatedInfoAgent 会话终止

日志格式

审计日志以 JSON Lines 格式存储,每行一个事件:

json
{
  "timestamp": "2026-03-21T10:15:30.123Z",
  "event": "tool.execute",
  "severity": "info",
  "session_id": "ses_abc123",
  "user_id": "usr_def456",
  "channel": "telegram",
  "details": {
    "tool": "shell",
    "args": {"command": "ls -la /tmp"},
    "policy_result": "allow",
    "matched_rule": "allow-read-workspace"
  },
  "source_ip": "127.0.0.1",
  "trace_id": "tr_789xyz"
}

字段说明

字段类型说明
timestampStringISO 8601 时间戳(UTC)
eventString事件类型标识符
severityString严重级别:debug / info / warn / error
session_idString?关联的 Agent 会话 ID
user_idString?触发事件的用户标识
channelString?消息来源渠道
detailsObject事件特定的详细信息
source_ipString?请求来源 IP 地址
trace_idString?OpenTelemetry Trace ID(启用 OTel 时)

配置

基础配置

toml
[security.audit]
enabled = true
log_path = "audit.log"

完整配置

toml
[security.audit]
enabled = true
log_path = "audit.log"
max_file_size_mb = 100
rotation = "daily"
retention_days = 90
min_severity = "info"
include_events = []
exclude_events = ["policy.allow"]

参数说明

参数类型默认值说明
enabledbooltrue启用审计日志
log_pathString"audit.log"日志文件路径(相对于 PRX 数据目录)
max_file_size_mbu64100单个日志文件最大大小(MB)
rotationString"daily"日志轮转策略:"daily" / "size" / "none"
retention_daysu3290日志保留天数,过期自动删除
min_severityString"info"最低记录级别
include_eventsVec<String>[](全部)仅记录指定事件类型(空数组 = 全部)
exclude_eventsVec<String>[]排除的事件类型

查询审计记录

CLI 查询

bash
# 查看最近 50 条审计事件
prx audit log --tail 50

# 按事件类型过滤
prx audit log --event "tool.execute" --tail 20

# 按时间范围过滤
prx audit log --since "2026-03-20" --until "2026-03-21"

# 按严重级别过滤
prx audit log --severity warn

# 按用户过滤
prx audit log --user usr_def456

# 导出为 JSON 文件
prx audit export --since "2026-03-01" --output audit-march.json

编程查询

通过网关 API 查询审计记录:

bash
curl -H "Authorization: Bearer <token>" \
  "http://localhost:16830/api/v1/audit?event=policy.deny&since=2026-03-20&limit=100"

合规与安全

日志完整性

  • 审计日志采用追加模式写入,运行时不修改已有记录
  • 建议将日志目录设置为只读(除 PRX 进程外)
  • 生产环境建议将日志转发到外部 SIEM 系统

合规建议

要求建议配置
日志保留retention_days = 365(视合规要求)
事件完整性min_severity = "debug"(记录所有事件)
外部备份使用 syslog 或 Fluentd 转发到集中日志系统
访问审计将审计日志目录权限限制为 0640

与 OpenTelemetry 集成

启用 OTel 后,审计事件会自动关联 Trace ID,便于在分布式追踪系统中查看完整调用链:

toml
[observability]
backend = "otel"
otel_endpoint = "http://localhost:4318"

[security.audit]
enabled = true

相关文档

Released under the Apache-2.0 License.