事件中心与通知
事件中心记录系统发生过什么;通知规则决定哪些事件要发送到哪里。先让事件记录稳定,再建立少量有价值的通知,避免把每次正常访问都变成告警噪声。
数据之间的关系
| 对象 | 作用 |
|---|---|
| 事件 | 一次登录、封锁、更新或状态变化的结构化记录 |
| 提供商 | Webhook、邮件或消息推送通道的连接配置和凭据 |
| 规则 | 按事件类型、窗口、阈值、聚合维度和冷却时间决定是否通知 |
| 通知目标 | 一条规则引用的提供商及该规则专用的接收目标 |
| 投递记录 | 规则触发后,每个目标各自产生的一次发送与重试记录 |
删除事件不会删除已产生的投递记录;清空投递记录也不会删除事件或规则。删除规则只停止后续通知,不影响已有事件。
事件页
事件页识别的系统事件包括:
- 认证:登录成功、退出登录、登录失败、会话 IP 漂移;
- 安全:扫描器拦截、网关节流封锁、网关可见性拦截、WAF 阻断;
- SSH:登录成功、登录失败、IP 封锁;
- 网络:DDNS 更新、FRP 连接/断开、Cloudflared 连接/断开、导航面板同步失败/恢复;
- 远程设备:WOL 广播完成(管理员、传送门、点灯科技或巴法云)和 SSH 关机;
- 终端:SSH 目标变更、主机指纹确认、连接测试、本机终端启用/禁用,以及本机或远程会话的创建、结束、退出与丢失;
- 系统:应用更新提示、CPU 告警/恢复、内存告警/恢复;
- 运行时:组件启动、停止、重启、健康检查失败、恢复和异常退出。
事件级别分为信息、注意、错误和严重;来源系统分为管理后台、认证代理、系统监控和运行监控。
页面支持:
- 搜索事件 ID、IP、会话或凭据;
- 按事件类型、级别和来源系统筛选;
- 分页查看并打开结构化详情;
- 删除单条或批量删除所选事件;
- 清空全部事件。
“清空事件”会删除事件中心保存的全部事件,括号中的数量用于说明当前视图匹配数,并不表示只清除当前筛选结果。此操作不可恢复,但不会清除通知规则和投递记录。
事件详情根据类型显示凭据、认证方式、会话、IP 与属地、失败次数、封锁时间、DDNS 地址变化、Trace ID、WAF 规则、隧道 PID、WOL 目标与投递来源、资源阈值等字段。网关可见性拦截还会记录请求 Host、路径、方法,以及生效的是网关全局还是 Host 自定义范围。排障时可复制详情,与请求日志、WAF 日志、隧道日志或设备在线状态对照。
本机终端事件会标明终端后端、执行身份及是否为特权身份,便于确认会话实际以谁的权限运行。终端事件只审计配置变化和会话生命周期,不保存管理员在 Shell 中输入的逐条命令;需要命令级留痕时,应在宿主机或远程 SSH 目标另行配置审计。
页面顶部的 Trace ID 查询 可粘贴响应头、拦截页、请求日志或通知中的完整 Trace ID。全链路追踪会把同一请求关联到 WAF、系统事件、通知触发和投递记录;旧事件或未启用对应采集时可能只显示部分链路。
认证和安全类事件中的 IP 会复用 IP 属地缓存。首次遇到尚未缓存的地址时,事件可以先保存并异步补齐属地;通知投递会尽量使用已经补齐的字段。不要因为刚生成的事件暂时没有属地就判断地址识别失败,稍后刷新并与 IP 属地查询 对照。
核心服务状态与诊断
事件中心 → 状态 每 5 秒刷新管理服务、Go 网关进程、网关数据面、认证桥接、存储和配置同步的健康状态。进程卡还会显示版本、PID、启动时间、CPU、内存或 Go 运行时信息;服务卡显示探测延迟和连续失败原因。受上游阻断 表示当前组件自身可运行,但依赖组件尚未就绪。
状态页提供三类排障材料:
| 操作 | 内容与边界 |
|---|---|
复制诊断信息 | 复制当前版本、平台、组件健康状态和最近运行事件的 JSON 摘要 |
查看日志 | 查看管理服务或 Go 网关最近 200 条已脱敏核心运行日志;不包含请求、WAF 或认证记录 |
导出诊断包 | 下载 diagnostics.json 及有界的管理、网关和监督进程日志,适合提交故障材料 |
核心诊断日志总占用上限为 6 MiB,达到上限后会轮换或丢弃低优先级信息;状态页会显示覆盖时间、磁盘占用和已丢弃的 INFO 数量。清空某个组件日志只移除该组件当前和上一代核心运行日志,不会删除运行事件、崩溃日志或其他组件日志。
诊断日志会对常见密钥字段脱敏,但诊断包仍可能暴露版本、平台、目录、组件状态和故障时间。对外分享前应检查内容;请求明细应从请求日志或 WAF 日志单独导出,不要把三者混为同一种日志。
Rust 运行诊断
在 事件中心 → 状态 → 运行诊断 点击 开始 60 秒采样,按每秒一次采集当前 Rust 管理进程的资源、后台任务与 SQLite 操作统计。打开窗口不会自动采集;可以提前停止并保留结果,关闭窗口后服务端仍会自动完成。
采集内存详情 是独立的按需快照,不会执行内存回收。导出 JSON 可保留逐秒样本、操作统计和内存详情,状态页诊断导出也包含当前报告。新一轮采样会替换上一轮,服务重启后报告丢失,应先导出。
CPU 以一个逻辑核满载为 100%,首个无基线样本不应当作零;任务经过时间包含等待,不能当作 CPU 时间。Linux 提供较完整的资源信息,macOS 主要提供进程 CPU 与 RSS,Windows 主要提供进程工作集;不可用字段不等于零。报告不包含其他实例或 Go 网关的资源占用,单次 RSS 升高也不足以确认内存泄漏。
Go 网关内存
Go 网关进程卡右下角的内存按钮可以调整垃圾回收强度和 Go 运行时软内存上限,也可以立即执行一次回收。状态卡中的 Heap、RSS、GC 次数、活动请求和连接数用于判断趋势;软上限只约束 Go 运行时管理的内存,不等于进程 RSS 的硬上限。
积极(GOGC 50)更频繁回收,通常降低内存但增加 CPU 开销;均衡(100)是默认值;宽松(200)更重视吞吐量。自定义范围为25–500。- 内存上限默认使用自动模式:取运行环境有效内存的约四分之一,并限制在
128–512 MiB;无法读取有效内存时使用256 MiB。 - 手动上限可设为
64–4096 MiB,且不能超过当前有效系统内存的 50%。保存值会在网关启动时先于业务流量恢复。 立即回收会短暂增加 CPU 或造成暂停,只适合排障或确认回收效果,不应当作周期性优化按钮反复点击。
低内存 NAS 或容器先保留自动上限;只有状态页持续显示 Heap / RSS 压力,并已排除请求量、深度监控或异常连接后,再逐步降低 GOGC 或设置手动上限。调整后同时观察 CPU、延迟和网关健康状态。
CPU 与内存监控
资源监控只在运行时能力可用的平台启动;当前 Windows 部署不提供该能力。Linux 类环境从系统资源信息计算整机或当前容器可见范围内的 CPU 与可用内存,并生成告警和恢复事件。它不是进程级性能分析器,不能指出具体由哪个进程造成负载。
当前默认规则为:
| 指标 | 告警阈值 | 恢复阈值 | 采样间隔 | 持续时间 |
|---|---|---|---|---|
| CPU | 80% | 60% | 5 秒 | 30 秒 |
| 内存 | 80% | 60% | 5 秒 | 30 秒 |
使用率必须持续达到告警阈值才产生告警;告警后还要持续回落到恢复阈值,才产生恢复事件。60%–80% 的中间区间用于避免临界值附近反复告警。短暂尖峰不会立即形成事件,第一条 CPU 样本也只用于建立计算基线。
当前管理界面可查看资源事件并为其配置通知,但没有调整上述采样和阈值的控件。不要把通知规则中的时间窗口、触发次数误认为资源采样阈值:前者决定已有事件如何发送,后者决定事件何时产生。
Docker 中看到的是容器运行环境可见的 CPU 和内存边界;若部署时设置了资源限制,告警应结合这些限制解释。没有资源事件时,先确认当前平台能力和事件系统正常,再检查负载是否确实持续超过阈值。
配置提供商
进入 事件中心 → 通知 → 提供商,先创建并测试发送通道。当前目录包括:
- Webhook;
- WxPusher;
- Server 酱;
- PushPlus;
- 企业微信;
- 钉钉;
- 飞书;
- 邮件;
- PushDeer;
- 鸿蒙 MeoW;
- MagicPush;
- Bark;
- Telegram。
不同通道支持的 Markdown、操作按钮、提及和消息长度不同,以新增提供商时显示的字段与能力为准。
创建时设置名称、类型、启用状态和连接配置。部分通道还提供默认接收目标,规则中的同名目标字段留空时会沿用提供商默认值。WxPusher 当前需要安装并登录其官方 App,不能继续依赖微信内直接收取消息。
保存前可以测试表单中的草稿配置,保存后也可从列表再次测试。敏感字段在编辑时会显示“已配置,留空则保持不变”;不要为了保留密钥而重复粘贴旧值。
Webhook URL、Token、SMTP 密码、接收标识等属于敏感配置,不能贴到公开日志或截图中。提供商已被规则引用时,后端会阻止删除;应先调整或删除对应规则。
Webhook 自定义内容
Webhook 提供商可以设置自定义请求头,以及标准、JSON 或文本请求体;规则的 Webhook 目标可继承提供商设置或单独覆盖请求体。先预览,再发送测试请求,确认第三方接口收到的格式。
编辑器的“通知详情”按事件列出可插入字段,“公共详情”提供事件类型、风险级别、来源、发生时间与聚合统计。使用 {{message.fact_values.login_ip}}、{{message.fact_values.credential_name}} 等固定字段名读取通知详情;字段名不随语言或详情排列变化,值仍是通知中格式化后的内容。需要原始数据时使用 event.payload.*。
{{message.fact_values}} 可引用整个对象;JSON 字符串仅包含一个变量时保留其类型,混合文本则转为字符串。事件不提供的字段会在预览中标记缺失,独立 JSON 变量为 null,嵌入文本时为空字符串,不会阻止发送。
样例 Context 留空时使用服务端样例;填入样例 JSON 后可改成目标事件数据,供标准或自定义请求体预览和测试使用,不会保存或影响真实投递。重试使用原消息快照,历史消息可能没有 fact_values。
鸿蒙 MeoW
选择 鸿蒙MeoW 后填写:
| 字段 | 说明 |
|---|---|
服务地址 | 官方接口使用默认的 https://api.chuckfang.com;自建兼容服务填写其根地址 |
接收昵称 | MeoW 应用中配置的用户昵称,不能包含 /;它相当于接收标识,应按敏感凭据保存 |
超时秒数 | 默认 5 秒,可设置 1~30 秒 |
该通道发送 Markdown 通知并支持通知操作,不支持提及。保存后先发送测试消息,确认鸿蒙设备收到内容,再把提供商加入通知规则。
创建通知规则
进入 事件中心 → 通知 → 规则。至少存在一个提供商后才能创建规则;每个事件类型当前只允许一条规则。新增时只列出尚未配置规则的事件,可一次选择多个事件并批量创建。
批量新建使用以下默认触发条件:
| 字段 | 新建默认值 | 说明 |
|---|---|---|
| 时间窗口 | 60 秒 | 在该窗口内累计同组事件 |
| 触发次数 | 1 次 | 达到次数后生成通知 |
| 聚合维度 | 按事件自动推荐 | 决定哪些事件计入同一组 |
| 冷却时间 | 60 秒 | 同组触发后抑制重复通知 |
规则创建后可逐条编辑触发条件。聚合维度包括全局、IP、会话、主题对象、主机名和提供商。自动推荐示例:
- 登录失败、扫描器、网关节流、WAF 和 SSH 事件按 IP;
- 网关可见性拦截按全局聚合;
- 会话 IP 漂移按会话;
- DDNS 更新按提供商;
- CPU 与内存事件按主机名;
- 隧道与应用更新按主题对象;
- 远程唤醒完成按主题对象区分设备;
- 登录成功和退出登录按全局。
一条规则可添加多个提供商,但同一个提供商在该规则中只能添加一次。部分提供商需要在规则目标中填写接收人、Topic、Chat ID 或其他目标字段;这些字段只影响当前规则。
推荐起步规则
- 登录失败:按 IP 聚合,在短窗口达到多次后通知;
- 扫描器、网关节流、WAF 和 SSH 封锁:按 IP 聚合;
- 网关可见性拦截:默认按全局聚合;流量较大时提高阈值或延长冷却时间,避免同一策略产生通知风暴;
- DDNS:按提供商聚合,关注失败结果;
- FRP 与 Cloudflared:按主题对象区分不同隧道;
- 导航面板同步:为失败和恢复事件按主题对象配置规则,避免单次短暂网络错误产生持续告警;
- CPU、内存:同时为告警和恢复事件配置规则;
- 应用更新:按主题对象发送一次提示。
- 远程唤醒:按主题对象聚合;失败结果用于告警,成功结果仍只表示广播已提交,不代表设备已经上线。
登录成功、SSH 登录成功等高频事件如果阈值为 1,可能产生大量通知。应结合实际访问量调整窗口、阈值与冷却时间。
应用更新事件包含发布说明时,系统会把当前可更新版本的发布说明摘要同时写入纯文本和 Markdown 正文,因此只展示正文的推送渠道也能收到,而不只存在于结构化详情中。通知不会把多个历史版本的说明连续拼接。需要查看完整或更早内容时,应前往 版本与更新 页面或项目发布记录。
查看投递结果
投递记录 显示触发时间、规则、提供商、状态、消息摘要和尝试次数。状态包括排队中、发送中、成功、失败待重试、失败放弃和已跳过。
详情中可查看:
- 规则、提供商和当前状态;
- 尝试次数、触发时间、发送时间和下次重试时间;
- 失败或跳过原因;
- 发送时冻结的标题、摘要和正文快照;
- 已脱敏的请求摘要和响应摘要。
排查“规则没有触发”和“提供商没有收到”时按以下顺序:
- 先确认事件本身已经产生。
- 检查该事件类型是否有规则,规则和目标是否仍启用。
- 检查窗口、阈值、聚合维度和冷却时间。
- 有投递记录时查看状态、失败原因、尝试次数和下一次重试时间。
- 检查提供商连通性、凭据、接收目标和对端限流。
清空投递记录会删除全部投递历史,无法恢复,但不会影响事件和后续规则触发。需要审计时先复制相关详情。
通知系统用于辅助响应,不代替请求日志、WAF 日志和备份。
