跳转到正文

监控内部实现 ​

面向修改采样、数据库缓存分配和日志轮转的贡献者。日常检查见监控。

启动时的输出路径 ​

启动时只发现并限制一次输出根路径,然后把完全相同的快照用于磁盘健康检查注册 和一次性写入探测,不再为第二个使用方重复读取所有主播配置。现有限制保持不变: 最多十六个写入探测目标,同时运行四个探测,每个探测限时五秒。后续配置变化仍 通过实际输出写入向写入门禁提供反馈;启动快照不是实时目录清单。

文件系统采样缓慢 ​

系统与磁盘指标由一个专用线程采集。健康刷新最多等待一秒;采样未完成时保留 最近可用的 CPU、内存和磁盘数据,并将系统采样标记为降级。其他到期探针继续 运行。保留的数据可能已经过时,判断磁盘数据是否最新时应结合组件状态和消息。

采样阻塞期间始终只有一个操作在执行,不会每次超时都创建替代线程。健康查询和 健康检查器的取消仍能及时响应,但只有操作系统调用返回后才能恢复采样。永久 阻塞的采样线程可能保留到进程退出;请排查主机上不可用的网络挂载或 FUSE 挂载。

SQLite 内存预算 ​

标准数据库连接池共用 64 MiB 的私有页缓存建议预算:56 MiB 按读取连接数上限 分摊,向下取整到 KiB;另为唯一的串行写入连接保留 8 MiB。使用 10 个读取连接 时,每个连接设置 PRAGMA cache_size = -5734,写入连接设置 -8192。 自适应读取连接上限仍为可用 CPU 数量的两倍,最多 10 个。Rust 调用方通过 init_pool_with_size 指定连接上限时,仍共用同一读取预算;单独打开写入连接池 也使用预留的写入预算。

这取代了此前每个连接各自约 64 MiB 的额度。私有缓存减少后,较大的工作集可能 需要更多页面读取。文件数据库现有的 256 MiB mmap_size 设置保持启用,可通过 内存映射页面和操作系统文件缓存完成读取。SQLite 将 cache_size 视为建议值, 它不是数据库或进程内存的硬上限。内存映射、临时查询、连接开销和其他录制服务 也会占用内存。不需要配置新的环境变量。

日志 ​

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,它还保存轮转计数器。未参与 协调的外部写入者或共享目录的旧版本应用无法遵守这些限制。无法回收容量时,文件 写入会失败而不会突破上限,控制台和实时日志保持独立。日志生产者仍使用非阻塞 队列。abort 构建中的紧急 panic 写入尝试获取相同锁而不等待,失败时退回 stderr。

无效上限或日志文件初始化失败会返回启动错误。仅当标准输出连接终端时启用颜色; 没有客户端订阅时跳过实时日志事件格式化。

基于 MIT 许可证发布。