简体中文
监控
应同时监控进程、依赖、主机和录制结果。容器处于运行状态,并不能证明数据库已就绪、输出卷可写,或平台能够正常录制。
健康接口
| 接口 | 认证 | 用途 |
|---|---|---|
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 frontendsystemd 服务:
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 饱和度增加。
- 凭据过期或平台认证开始失败。
- 备份年龄或恢复验证间隔超过政策。
严重告警应至少配置两条路径,避免唯一通知服务本身故障时失联。
运行审查
定期查看系统健康、会话、管道任务和通知事件页面。除了基础设施,还要检查业务结果变化:频道始终离线、反复产生极短分片或输出空文件,都可能发生在进程仍健康时。