访问日志与 AccessKey
流量统计、访问日志的采样、查询与导出、统计存储模式,以及 AccessKey 的创建与吊销。
概念
| 术语 | 定义 |
|---|---|
| 统计 | 节点按分钟汇总的全量计数:请求数、流量、缓存命中、状态码,以及估算的热门 URL 和 IP。 |
| 访问日志 | 按采样率记录的单个请求。有上限的诊断数据,不是零丢失的审计记录。 |
| 采样率 | 被记录的请求比例;界面为百分比,API 为万分比整数(0–10000)。 |
| 统计模式 | EDGEWEIR_ANALYTICS 的取值:lite(PostgreSQL,默认)或 clickhouse。 |
| AccessKey | 以控制台账户的身份调用 /api/v1 的密钥(ewk_ 前缀),在 个人设置 中创建与吊销。 |
查看统计
| 位置 | 范围 |
|---|---|
| 概览 | 全部网站与节点,含「流量最高的网站」「流量最高的节点」 |
| 网站 →「统计」页签 | 单个网站 |
- 打开上表中的页面,选择时间范围:「过去 1 小时」「过去 6 小时」「过去 24 小时」「过去 7 天」「过去 30 天」。
- 查看「请求总数」「数据传输」「缓存命中率」「带宽峰值」「4xx 占比」「5xx 占比」「状态码」「热门 URL(估算)」「热门 IP(估算)」;点击指标打开详情。
- 点击「刷新」重新读取。
- 需要处理某一项时,点击该行右侧的「⋯」:热门 IP 可「封禁 IP」(网站「统计」页签中预填该网站,概览中预填「全局」范围);网站「统计」页签的热门 URL 可「刷新 URL」,路径展开到网站的每个非泛域名,确认列出的 URL 后提交刷新任务。
统计数据
| 项目 | 行为 |
|---|---|
| 保留 | 分钟明细 7 天,小时汇总 90 天,天汇总 365 天;统计模式为 clickhouse 时,控制台图表和告警仍使用 PostgreSQL 中的汇总 |
| 迟到数据 | 迟到的分钟数据触发对应小时和天的重算;早于 7 天的数据被丢弃 |
| 汇总 | 后台任务每分钟增量汇总;UTC 边界固定;长期图表读取已完成的小时汇总和尚未汇总的明细 |
| 热门 URL / IP | 节点端有界的 Space-Saving 近似计数,界面标明「估算」:每个 worker 每分钟最多跟踪 128 个网站桶,每桶最多 32 个候选;每桶保留前 50 项;可能遗漏低频项,不用于计费 |
| URL 内容 | 不含查询字符串和请求头;超过 512 字节、含 ? 或控制字符的路径不计入;路径本身仍可能包含业务标识 |
| 计数上限 | 单个节点、网站、时间桶的累计计数上限为 9,007,199,254,740,991(Number.MAX_SAFE_INTEGER),达到后保持该值 |
| 删除 | 删除节点保留网站的历史统计与日志;删除网站删除其统计和 PostgreSQL 中的日志 |
上报与去重
| 项目 | 行为 |
|---|---|
| 批次 | 节点把统计批次和单调序号写入状态目录的 traffic-spool.json(0600),再经节点通道(mTLS)上报 |
| 去重 | 回执丢失、节点重启或本地回执写入失败时重发同一序号;控制台在一个事务内更新统计和该节点的游标,重复序号不重复计数;本地序号文件丢失时节点从控制台游标重新同步 |
| 离线队列 | 最多 10000 个桶、32 MiB;溢出时丢弃并记录日志 |
| 内存计数 | 未转存的计数 2 小时后过期;进程在首次持久化之前崩溃会丢失内存中的计数 |
| 语义 | 可重试批次的去重,不是计费级的逐请求 exactly-once |
| 旧节点 | 不带序号的旧版上报被拒绝;这类节点在 集群与节点 中显示「需要升级」 |
启用访问日志
- 打开 网站,选择网站,进入「日志」页签。
- 在「访问日志采样率」中选择「1%」「10%」或「100%」。选择后立即保存并发布新的配置版本,提示「已保存」。
- 验证:产生请求后,在查询表单点击「查询」,列表出现记录。
| 字段 | 取值 | 默认值 | 作用 |
|---|---|---|---|
| 访问日志采样率 | 关闭 / 1% / 10% / 100% | 关闭 | 记录请求的比例;API 接受 0–10000 的万分比整数 |
| 记录的字段 | 不记录 |
|---|---|
| 时间、客户端 IP、方法、Host、路径、状态码、发送字节、耗时(毫秒)、缓存状态、采样率、节点 ID | 查询参数、请求头、Cookie、请求和响应正文 |
网站在「安全 → 挑战设置」打开「访问日志记录 JA4」后,日志另记录 JA4 TLS 客户端指纹(明文 HTTP 为空),列表出现「JA4」列,CSV 增加 ja4 列。关闭后控制台不再保存该字段。JA4 的格式见 JA4。
网站开启 OWASP CRS 后,命中规则的请求另记录命中的规则 ID(每个请求最多 16 个,升序)与是否被拦截:列表出现「CRS」列(规则 ID 与「已拦截」标记),CSV 增加 wafRuleIds(空格分隔)与 wafBlocked 列。
配置阶段的规则可用「日志采样率(%)」为匹配的请求设置采样率;网站采样率为「关闭」时,这些请求的日志同样保存,见覆盖设置。
启用访问日志需要节点能力 access-logs-v1,记录 JA4 另需 ja4-v1。配置回滚保留当前采样率与 JA4 设置,不会重新启用已关闭的日志。
查询与导出日志
-
在「日志」页签填写「开始时间」「结束时间」,按需填写「状态码」「客户端 IP」「路径前缀」「请求 ID」。
-
点击「查询」。
-
需要文件时点击「导出 CSV」。
-
需要处理某条请求时,点击该行右侧的「⋯」,操作在当前页完成:
操作 行为 封禁 IP 打开封禁对话框,已填好本网站与客户端 IP;「范围」可改为「全局」,见封禁 刷新 URL 确认后为该请求的 Host 与路径创建 URL 刷新任务,见刷新与预热 排除 CRS 规则 N 只在命中 CRS 规则的行出现,每条命中的规则一项;确认后把规则 ID 追加到网站的排除列表,见OWASP CRS。初始化、拦截判定与关联类规则(901xxx、949xxx、959xxx、980xxx)不提供,排除它们等于关闭拦截 完成后的提示带有链接,打开封禁列表、刷新任务或 CRS 设置。
| 项目 | 行为 |
|---|---|
| 时间范围 | 默认最近 1 小时;最早为 6 天前的 UTC 零点,最晚为当前时间后 5 分钟;结束时间须晚于开始时间 |
| 过滤 | 状态码精确匹配;客户端 IP 精确匹配;路径按前缀匹配;请求 ID 精确匹配 |
| 请求 ID | 每条日志显示节点给出的请求 ID(与响应头 X-Request-Id 和错误页上的相同),CSV 的 requestId 列;更早的节点上报的日志为空 |
| 条数 | 界面最多显示 100 条,超出时提示「显示前 100 条,请缩小查询范围」;CSV 最多 1000 条,超出时提示「已导出前 1000 条,请缩小时间范围以获取其他记录」 |
| CSV | 每个单元格加双引号并转义引号;以 =、+、-、@ 开头的值前加 ',避免被电子表格当作公式 |
| 调用方 | 控制台会话或 AccessKey,只读 AccessKey 也可以查询与导出;服务账号不能调用 |
日志的采集与存储
| 项目 | 行为 |
|---|---|
| 采集 | 节点通过 mTLS 按批次上报,每批最多 1000 条;控制台用每个节点的持久游标防止重试重复写入 |
| 节点内存队列 | 约 2000 条(8 MiB);满时新日志被丢弃 |
| 节点磁盘队列 | 状态目录的 logs-spool.json(0600),最多 10000 条、32 MiB;满时丢弃最旧的未发送批次并记录警告 |
| 丢失 | 请求结束到批次落盘之间,进程或主机崩溃会丢失日志 |
lite 存储 | PostgreSQL 按 UTC 日期分区,保留今天及前 6 天;后台任务每分钟维护分区 |
clickhouse 存储 | 按天分区的 ReplacingMergeTree,7 天 TTL,查询时用 FINAL 去重;ClickHouse 写入失败时不确认批次,节点重试,不改写入 PostgreSQL |
使用 ClickHouse 存储
-
在控制台的
.env中启用analyticsprofile,设置统计模式和 ClickHouse 密码:.env COMPOSE_PROFILES=analytics EDGEWEIR_ANALYTICS=clickhouse EDGEWEIR_CLICKHOUSE_PASSWORD=<密码> -
启动 Compose 部署;
COMPOSE_PROFILES让此后的每条docker compose命令都包含 ClickHouse:docker compose up -d -
验证:系统设置 的「系统信息」中「统计模式」显示
clickhouse。
EDGEWEIR_CLICKHOUSE_URL、EDGEWEIR_CLICKHOUSE_DATABASE、EDGEWEIR_CLICKHOUSE_USER 的默认值与外部 ClickHouse 的配置见环境变量。
| 项目 | 行为 |
|---|---|
| 切换 | 只影响新写入;不迁移历史日志和统计 |
| 分钟统计 | 同步写入 ClickHouse 的 minute_stats 表(ReplacingMergeTree,以节点批次序号为版本),直接分析时使用 FINAL |
| 图表与告警 | 仍使用 PostgreSQL 的精确分钟、小时、天汇总,两种模式计数口径一致;采样日志不用于统计全量流量 |
| 删除网站 | 控制台立即停止对该网站日志的查询授权;ClickHouse 中的原始数据按 7 天 TTL 清除 |
创建 AccessKey
-
在用户菜单(侧栏底部)中打开 个人设置,找到「AccessKey」卡片。
-
填写「名称」(1–64 字符;留空时为
default),选择「权限范围」。 -
点击「创建」。
-
复制显示的密钥。密钥只显示一次(「仅显示一次」)。
-
验证:
curl -s -o /dev/null -w '%{http_code}\n' -H 'x-api-key: <密钥>' https://console.example.com/api/v1/sites输出
200。
| 字段 | 取值 | 默认值 | 作用 |
|---|---|---|---|
| 名称 | 1–64 字符 | default | 列表中的显示名 |
| 权限范围 | 只读 / 读写 | 读写 | 只读密钥只能调用 GET 接口与 rules.validate,其他接口返回 403(ACCESS_KEY_READ_ONLY) |
请求格式与接口列表见 API 与端点。
吊销 AccessKey
- 在 个人设置 的「AccessKey」卡片中,对目标密钥点击「吊销密钥」并确认。
- 验证:密钥显示「已吊销」;使用该密钥的请求返回 401。
| 项目 | 行为 |
|---|---|
| 列表 | 「AccessKey」卡片列出全部密钥,含权限范围和「最后使用:…」 |
| 身份 | 密钥以控制台账户的身份调用 API,审计日志中的操作者类型为 AccessKey |
| 签发 | 只能在已登录的控制台会话中创建(个人设置 页,或经 /rpc 调用 accessKeys.create);任何 AccessKey(包括读写密钥和旧版密钥)都不能创建新密钥:POST /api/v1/access-keys 返回 403(ACCESS_KEY_SESSION_REQUIRED) |
| 旧版密钥 | 未设置权限范围的旧版密钥保持读写权限;按用途吊销并重建 |
限制
| 项目 | 说明 |
|---|---|
| 采样率 | 界面只提供关闭、1%、10%、100%;其他比例通过 API 设置 |
| 日志保留 | 两种存储模式都约为 7 天,不可配置 |
| 完整性 | 访问日志有队列上限且可能丢失,不能作为审计账本;统计不是计费级精确计数 |
| 热门 URL / IP | 近似值,可能遗漏低频项 |
| 历史迁移 | 切换统计模式不迁移历史数据 |
故障排查
| 现象 | 原因 | 处理 |
|---|---|---|
| 「没有匹配的日志」 | 采样率为关闭或过低;时间范围早于保留期;节点未应用启用日志的版本或缺少 access-logs-v1 | 检查采样率、时间范围和节点「已应用版本」 |
| 「结束时间必须晚于开始时间」 | 时间范围无效 | 调整时间 |
| 「显示前 100 条,请缩小查询范围」 | 匹配超过 100 条 | 缩小时间范围或增加过滤条件,或导出 CSV |
| 「已导出前 1000 条,…」 | 匹配超过 1000 条 | 分段导出 |
| 统计图表为空 | 网站没有流量,或节点未上报 | 检查节点心跳和网站域名是否已发布 |
| 节点显示「需要升级」 | 节点不支持带序号的统计上报或当前配置要求的能力 | 升级节点,见节点升级 |
| 「请登录控制台后创建密钥」 | 用 AccessKey 调用了创建接口 | 在已登录的控制台中创建 |
| 「此密钥只有只读权限」 | 只读密钥调用写接口 | 创建读写密钥 |