--- title: "文件系统监控刷新间隔配置" date: 2026-02-08 lastmod: 2026-02-08 description: "monitor.fs.refresh_interval 配置项用于控制文件系统信息(FsInfo)的刷新间隔。" tags: ["监控", "文件系统", "刷新间隔", "FsInfo"] summary: "配置项作用 # monitor.fs.refresh_interval 配置项用于控制文件系统信息(FsInfo)监控数据的缓存刷新间隔。 此配置决定了 FsService 多久刷新一次文件系统信息,包括磁盘使用情况、IO 统计等数据。通过缓存机制减少频繁的文件系统查询。 配置项属性 # 配置路径: monitor.fs.refresh_interval 数据类型: TimeValue(时间值) 默认值: 1s(1秒) 最小值: 1s(1秒) 是否可选: 是 作用域: NodeScope(节点级别) 动态更新: 否(需要重启节点生效) 配置项详解 # 工作机制 # FsInfo 缓存刷新机制 FsInfoCache (SingleObjectCache): ├── 刷新间隔: refresh_interval (默认 1s) ├── 缓存对象: FsInfo (磁盘使用、IO 统计等) └── 刷新策略: scheduleWithFixedDelay 刷新流程: 上次刷新 │ ↓ 等待 refresh_interval │ ↓ 触发本次刷新 │ ├── 调用 fsProbe.stats() │ ├── 获取磁盘使用量 │ ├── 获取磁盘可用空间 │ ├── 获取 IO 统计信息 │ └── 获取文件系统路径 │ ├── 更新缓存 │ └── 下次请求使用新缓存 │ ↓ 检查完成 ↓ 等待 refresh_interval │ ↓ (循环) 示例 (refresh_interval = 1s): 00:00." --- ## 配置项作用 `monitor.fs.refresh_interval` 配置项用于控制**文件系统信息(FsInfo)监控数据的缓存刷新间隔**。 此配置决定了 FsService 多久刷新一次文件系统信息,包括磁盘使用情况、IO 统计等数据。通过缓存机制减少频繁的文件系统查询。 ## 配置项属性 - **配置路径**: `monitor.fs.refresh_interval` - **数据类型**: `TimeValue`(时间值) - **默认值**: `1s`(1秒) - **最小值**: `1s`(1秒) - **是否可选**: 是 - **作用域**: NodeScope(节点级别) - **动态更新**: 否(需要重启节点生效) ## 配置项详解 ## 工作机制 ``` FsInfo 缓存刷新机制 FsInfoCache (SingleObjectCache): ├── 刷新间隔: refresh_interval (默认 1s) ├── 缓存对象: FsInfo (磁盘使用、IO 统计等) └── 刷新策略: scheduleWithFixedDelay 刷新流程: 上次刷新 │ ↓ 等待 refresh_interval │ ↓ 触发本次刷新 │ ├── 调用 fsProbe.stats() │ ├── 获取磁盘使用量 │ ├── 获取磁盘可用空间 │ ├── 获取 IO 统计信息 │ └── 获取文件系统路径 │ ├── 更新缓存 │ └── 下次请求使用新缓存 │ ↓ 检查完成 ↓ 等待 refresh_interval │ ↓ (循环) 示例 (refresh_interval = 1s): 00:00.000 ──→ 缓存刷新 1 00:00.100 ──→ 请求 FsInfo → 使用缓存 1 ✅ 00:00.500 ──→ 请求 FsInfo → 使用缓存 1 ✅ 00:01.000 ──→ 缓存刷新 2 00:01.100 ──→ 请求 FsInfo → 使用缓存 2 ✅ ... ``` ## 与 always_refresh 的关系 ``` 缓存强制刷新机制 monitor.fs.always_refresh = false (默认): ├── 使用 refresh_interval 缓存 ├── 减少文件系统查询 └── 性能更好 ✅ monitor.fs.always_refresh = true: ├── 忽略 refresh_interval ├── 每次请求都重新查询 └── 实时性最高,但性能较低 ❌ ``` ## FsInfo 包含的信息 ``` FsInfo 监控数据 磁盘使用信息: ├── total: 总磁盘空间 ├── available: 可用空间 ├── used: 已用空间 └── uses_percent: 使用百分比 IO 统计信息: ├── disk_reads: 读操作次数 ├── disk_writes: 写操作次数 ├── disk_read_bytes: 读取字节数 └── disk_write_bytes: 写入字节数 路径信息: ├── path: 数据路径 ├── mount: 挂载点 └── type: 文件系统类型 ``` ## 配置建议 ## 生产环境(默认) ```yaml monitor: fs: refresh_interval: 1s # 默认值 ``` **建议**: 保持默认值 `1s`。快速响应文件系统变化。 ## 减少刷新频率 ```yaml monitor: fs: refresh_interval: 5s # 减少刷新 ``` **建议**: 设置为 `5-10s`。稳定的文件系统,减少系统开销。 ## 极低刷新频率 ```yaml monitor: fs: refresh_interval: 30s # 极低频率 ``` **建议**: 设置为 `30-60s`。非常稳定的系统,最低开销。 ## 实时监控 ```yaml monitor: fs: refresh_interval: 1s always_refresh: true # 强制实时 ``` **建议**: 需要完全实时监控时使用。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml monitor: fs: refresh_interval: 1s ``` ## 标准生产配置 ```yaml monitor: fs: refresh_interval: 1s ``` ## 低开销配置 ```yaml monitor: fs: refresh_interval: 10s ``` ## 实时监控配置 ```yaml monitor: fs: refresh_interval: 1s always_refresh: true ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `monitor.fs.refresh_interval` | FsInfo 刷新间隔 | 1s | | `monitor.fs.always_refresh` | 是否强制每次刷新 | false | | `monitor.fs.health.refresh_interval` | 健康检查间隔 | 120s | ## 性能影响分析 | refresh_interval 设置 | 优点 | 缺点 | |----------------------|------|------| | 1s(默认) | 快速响应 | 较高系统调用 | | 5s | 平衡响应和开销 | 标准设置 | | 10s | 低系统调用 | 响应延迟 | | 30s+ | 最低系统调用 | 延迟较大 | ## 系统调用对比 ``` 不同间隔的系统调用频率 refresh_interval = 1s: ├── 每分钟调用: 60 次 statfs() ├── 系统开销: 中等 └── 数据延迟: 最多 1 秒 refresh_interval = 5s: ├── 每分钟调用: 12 次 statfs() ├── 系统开销: 低 └── 数据延迟: 最多 5 秒 refresh_interval = 10s: ├── 每分钟调用: 6 次 statfs() ├── 系统开销: 很低 └── 数据延迟: 最多 10 秒 refresh_interval = 30s: ├── 每分钟调用: 2 次 statfs() ├── 系统开销: 极低 └── 数据延迟: 最多 30 秒 ``` ## 使用场景 ## 推荐使用默认值的场景 - **动态环境**: 文件系统使用变化频繁 - **快速响应**: 需要快速检测磁盘空间变化 - **标准监控**: 标准的监控需求 ## 推荐增加间隔的场景 - **稳定环境**: 文件系统使用稳定 - **减少开销**: 希望减少系统调用 - **长期监控**: 不需要秒级响应 - **资源受限**: 系统资源紧张 ## 推荐使用 always_refresh 的场景 - **关键应用**: 磁盘空间非常关键 - **实时性**: 需要完全实时的数据 - **监控工具**: 配合外部监控工具使用 ## 与健康检查的对比 ``` 两种刷新机制的区别 FsInfo 刷新 (monitor.fs.refresh_interval): ├── 默认: 1s ├── 作用: 刷新磁盘使用、IO 统计等数据 ├── 频率: 高频刷新 ├── 开销: 较低 └── 用途: 提供监控数据 健康检查 (monitor.fs.health.refresh_interval): ├── 默认: 120s ├── 作用: 实际创建/删除文件测试写入能力 ├── 频率: 低频检查 ├── 开销: 较高 └── 用途: 确保文件系统健康 两者配合: ├── FsInfo: 提供数据(高频) └── Health: 确保健康(低频) ``` ## 数据延迟分析 ``` 监控数据的延迟 refresh_interval = 1s (默认): 00:00.000 ──→ 磁盘使用 80% 00:00.500 ──→ 磁盘使用 85% (实际发生) 00:00.800 ──→ 查询 → 返回 80% (缓存) 00:01.000 ──→ 缓存刷新 → 获取到 85% 00:01.100 ──→ 查询 → 返回 85% ✅ 延迟: 最多 1 秒 refresh_interval = 10s: 00:00.000 ──→ 磁盘使用 80% 00:00.500 ──→ 磁盘使用 85% (实际发生) 00:05.000 ──→ 查询 → 返回 80% (缓存) 00:10.000 ──→ 缓存刷新 → 获取到 85% 00:10.100 ──→ 查询 → 返回 85% ✅ 延迟: 最多 10 秒 ``` ## 注意事项 1. **默认值**: 默认值为 `1s`,适合大多数场景。 2. **需要重启**: 修改此配置需要重启节点。 3. **最小值**: 最小值为 `1s`,不能设置更小。 4. **缓存机制**: 使用缓存减少系统调用。 5. **always_refresh**: 设置后会忽略此配置。 6. **与健康检查区分**: 与健康检查是不同的机制。 7. **系统调用**: 刷新会调用 statfs() 等系统调用。 8. **监控建议**: 根据监控需求选择间隔。 9. **测试验证**: 配置变更后应验证监控效果。 10. **稳定环境**: 稳定环境可以适当增加间隔。 ## FsProbe 实现 ``` 文件系统探测接口 FsProbe 接口: ├── stats(): 获取 FsInfo ├── 跨平台实现 └── 返回统一数据格式 Linux 实现: ├── 读取 /proc/mounts ├── 调用 statfs() 系统调用 └── 读取 /proc/diskstats Windows 实现: ├── 调用 GetDiskFreeSpaceEx() └── 调用 GetDriveType() ```