跳转到正文

监控 ​

应同时监控进程、依赖、主机和录制结果。容器处于运行状态,并不能证明数据库已就绪、输出卷可写,或平台能够正常录制。

健康接口 ​

接口认证用途
GET /api/health/live公开进程存活与运行时间;Docker 健康检查使用该接口
GET /api/health/ready启用认证时需要 Bearer 令牌根据组件状态返回 200 ready 或 503 not ready
GET /api/health启用认证时需要 Bearer 令牌版本、运行时间、组件状态、CPU 和内存使用率

存活检查用于重启死亡进程。带认证的就绪检查会拒绝启动时的未知状态以及不健康实例;降级实例仍处于就绪状态,应单独对组件降级告警。保护监控令牌,并只向监控网络开放所需访问。

刷新后,只要任一组件状态未知,整体健康状态就会降级;如果其他组件不健康, 则整体仍为不健康。例如,无法解析磁盘的探针不会再让整体报告健康。第一次刷新前, 初始快照仍为未知状态。

bash
curl http://localhost:12555/api/health/live
curl http://localhost:12555/api/health/ready \
  -H "Authorization: Bearer <access-token>"

没有 /metrics 接口。请抓取上面的 JSON 健康接口,或在应用之外采集。

内部投递计数器仅跟踪 Web Push 结果。下载、管道和调度器信息由各自的 API 快照 提供,并不构成 Prometheus 导出。

启动时的输出路径 ​

磁盘健康路径在启动时发现,初始写入探测最多十六个目标,同时执行四个,每个等待五秒。这不是持续刷新的目录清单;修改输出设置不会重建探测列表。应检查实际录制路径,详见输出根探测。

文件系统采样缓慢 ​

文件系统采样超过一秒时,健康检查保留之前的 CPU、内存和磁盘值,并报告采样降级,其他探测继续。应将这些值视为过时数据,检查不可用的网络或 FUSE 挂载。只有阻塞的系统调用返回后才恢复采样。

SQLite 内存预算 ​

数据库连接共用建议的 64 MiB 私有页缓存额度,文件数据库还使用 256 MiB 内存映射设置。这些都不是进程内存硬上限,录制、查询、连接及操作系统缓存也会占用内存。不需要新增环境设置。分配细节见监控内部实现。

日志 ​

Docker 部署:

bash
docker compose logs --since=30m rust-srec
docker compose logs --since=30m frontend

systemd 服务:

bash
journalctl -u rust-srec --since "30 min ago"
journalctl -u rust-srec -f

示例 Compose 会轮转容器 JSON 日志。unit 设置了 StandardOutput=journal、StandardError=journal 和 SyslogIdentifier=rust-srec,因此进程输出进入 journal,并遵循主机 journald 的保留策略。

两种部署下,应用都会另外向 LOG_DIR 写入按天轮转的日志文件,unit 将其指向 /var/log/rust-srec。事件历史需要跨主机故障保留时,应集中采集日志;即使应用已隐藏凭据,路径和平台元数据仍可能敏感,因此要限制访问。

应用日志在 UTC 日期变化时,以及写入将超过 LOG_MAX_FILE_BYTES(默认 16 MiB) 之前轮转。LOG_MAX_FILES 默认为 16,包含当前分段。系统删除最旧的托管分段来 腾出空间,因此七天是最大保留时间,不保证一定保留七天。启动及每日清理也会删除 过期或超限的旧分段。单条超大记录保留完整 UTF-8 前缀并添加截断标记;stderr 会 按逐渐增加的间隔报告累计截断次数和写入失败次数。

旧 rust-srec.log.YYYY-MM-DD 文件仍可读取,未达到上限时也可继续追加。 新分段使用 rust-srec.log.YYYY-MM-DD.<20位序号>。列表、日期筛选和归档均从 这两种文件名读取 UTC 日期。轮转不会截短已有文件。归档保留扫描时的长度快照; 若保留策略在文件打开前删除了所选文件,下载会明确失败,不会静默遗漏该文件。

独立实例可以共享 LOG_DIR,每次追加、轮转和清理通过短期文件锁协调。各实例应 使用相同上限;设置一致时,成功维护后托管命名文件默认最多占 16 × 16 MiB。 其他文件名、符号链接、文件系统开销和仍被读取句柄占用的已删除文件不在此范围。 任何实例运行期间都不要删除 .rust-srec.log.lock,它还保存轮转计数器。未参与 协调的外部写入者或共享目录的旧版本应用无法遵守这些限制。无法回收容量时,文件 写入会失败而不会突破上限,控制台和实时日志保持独立。

无效上限或日志文件初始化失败会返回启动错误。重定向控制台输出时不使用终端颜色。

调度器重启上限 ​

actor 连续第十次崩溃后不再自动重启。这个计数不会随六十秒重启退避窗口到期 而清零;由 actor 内部处理的普通平台检查失败不计入 actor 崩溃。主播已被移除 或其他不可恢复的 actor 决定会直接停止,不安排重启。

出现 exceeded restart limit 日志后,应先排查原因再恢复监控。修复后,禁用 并重新启用该主播,可以移除旧 actor 的跟踪记录并重新获得崩溃额度;也可以 重启服务。仅等待退避窗口到期不会恢复耗尽的额度。

最小告警集 ​

  • 后端存活失败或循环重启。
  • 超过预期启动时间后,就绪检查持续非 200。
  • 输出卷剩余空间或 inode 数越过警告/严重阈值。
  • 输出根不可写。
  • 单个平台或多个平台的录制/分片失败增加。
  • 管道排队时间、失败率或 CPU/IO 饱和度增加。
  • 凭据过期或平台认证开始失败。
  • 备份年龄或恢复验证间隔超过政策。

严重告警应至少配置两条路径,避免唯一通知服务本身故障时失联。

运行审查 ​

定期查看系统健康、会话、管道任务和通知事件页面。除了基础设施,还要检查业务结果变化:频道始终离线、反复产生极短分片或输出空文件,都可能发生在进程仍健康时。

基于 MIT 许可证发布。