📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

monitor.os.refresh_interval 配置项用于控制操作系统监控服务收集和刷新操作系统统计信息的间隔时间

此配置决定了 OsService 多久刷新一次系统级别指标,包括 CPU 使用率、内存使用、系统负载、交换空间等。

配置项属性 #

  • 配置路径: monitor.os.refresh_interval
  • 数据类型: TimeValue(时间值)
  • 默认值: 1s(1秒)
  • 最小值: 1s(1秒)
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 否(需要重启节点生效)

配置项详解 #

工作机制 #

OsStats 缓存刷新机制

OsStatsCache (SingleObjectCache):
├── 刷新间隔: refresh_interval (默认 1s)
├── 缓存对象: OsStats
└── 刷新策略: 按需检查 + 缓存


获取流程:

调用 osStats()
    │
    ↓
检查距离上次刷新时间
    │
    ├──── 超过 refresh_interval
    │      │
    │      ↓
    │   重新获取 OS 统计信息
    │   ├── CPU 使用率
    │   ├── 内存使用
    │   ├── 系统负载
    │   ├── 交换空间
    │   └── 更新缓存
    │
    └──── 未超过 refresh_interval
           │
           ↓
        返回缓存数据 ✅

OS 统计信息内容 #

OsStats 包含的信息

1. CPU 信息
   ├── 用户空间使用率
   ├── 系统空间使用率
   ├── 空闲率
   ├── IO 等待率
   └── CPU 数量


2. 内存信息
   ├── 物理内存总量
   ├── 物理内存已用
   ├── 物理内存可用
   ├── 使用百分比
   └── 交换空间信息


3. 系统负载
   ├── 1 分钟平均负载
   ├── 5 分钟平均负载
   └── 15 分钟平均负载


4. 交换空间
   ├── 交换空间总量
   ├── 交换空间已用
   └── 交换空间可用


5. 其他信息
   ├── 时间戳
   ├── 操作系统信息
   └── 处理器信息

与其他监控的关系 #

各种刷新间隔的配合

monitor.fs.refresh_interval:
├── 作用: 文件系统监控
├── 默认: 1s
└── 数据: 磁盘使用、IO 统计


monitor.os.refresh_interval:
├── 作用: 操作系统监控
├── 默认: 1s
└── 数据: CPU、内存、负载


monitor.jvm.refresh_interval:
├── 作用: JVM 监控
├── 默认: 1s
└── 数据: 堆内存、线程、GC


monitor.process.refresh_interval:
├── 作用: 进程监控
├── 默认: 1s
└── 数据: 进程资源使用


协同工作:
├── 独立配置
├── 独立缓存
└── 共同构成完整监控

配置建议 #

生产环境(默认) #

monitor:
  os:
    refresh_interval: 1s  # 默认值

建议: 保持默认值 1s。及时获取系统指标。

减少刷新频率 #

monitor:
  os:
    refresh_interval: 5s  # 减少刷新

建议: 设置为 5-10s。稳定的系统,减少开销。

低频监控 #

monitor:
  os:
    refresh_interval: 30s  # 低频率

建议: 设置为 30-60s。非常稳定的系统使用。

高频监控 #

monitor:
  os:
    refresh_interval: 1s  # 保持最小值

建议: 保持 1s(最小值)。需要最及时数据时使用。

代码示例 #

easysearch.yml 基础配置 #

monitor:
  os:
    refresh_interval: 1s

标准生产配置 #

monitor:
  os:
    refresh_interval: 1s

低开销配置 #

monitor:
  os:
    refresh_interval: 10s

完整监控配置 #

monitor:
  os:
    refresh_interval: 1s
  fs:
    refresh_interval: 1s
  jvm:
    refresh_interval: 1s
  process:
    refresh_interval: 1s

相关配置 #

配置项作用默认值
monitor.os.refresh_intervalOS 统计刷新间隔1s
monitor.fs.refresh_interval文件系统刷新间隔1s
monitor.jvm.refresh_intervalJVM 统计刷新间隔1s
monitor.process.refresh_interval进程统计刷新间隔1s

性能影响分析 #

refresh_interval 设置优点缺点
1s(默认)及时数据标准开销
5s低系统调用数据延迟 5s
10s很低系统调用数据延迟 10s
30s+最低系统调用数据延迟大

系统调用对比 #

不同间隔的系统调用频率

refresh_interval = 1s:
├── 每分钟调用: 60 次
├── 单次开销: ~0.3ms
└── 每分钟开销: ~18ms (0.03%)


refresh_interval = 5s:
├── 每分钟调用: 12 次
├── 单次开销: ~0.3ms
└── 每分钟开销: ~3.6ms (0.006%)


refresh_interval = 10s:
├── 每分钟调用: 6 次
├── 单次开销: ~0.3ms
└── 每分钟开销: ~1.8ms (0.003%)


refresh_interval = 30s:
├── 每分钟调用: 2 次
├── 单次开销: ~0.3ms
└── 每分钟开销: ~0.6ms (0.001%)

使用场景 #

推荐使用默认值的场景 #

  • 生产环境: 大多数生产环境
  • 实时监控: 需要及时的系统指标
  • 标准应用: 正常的应用部署
  • 监控工具: 配合监控工具使用

推荐增加间隔的场景 #

  • 稳定系统: 系统负载稳定
  • 减少开销: 希望减少系统调用
  • 长期运行: 长期运行的服务
  • 资源受限: 系统资源紧张

推荐保持最小值的场景 #

  • 性能调优: 正在进行性能优化
  • 问题排查: 排查系统问题
  • 监控密集: 需要密集监控
  • 测试环境: 测试环境使用

数据延迟分析 #

监控数据的延迟

refresh_interval = 1s (默认):
00:00.000 ──→ CPU 使用率 30%
00:00.500 ──→ CPU 使用率 80% (实际变化)
00:00.800 ──→ 查询 → 返回 30% (缓存)
00:01.001 ──→ 缓存刷新 → 获取到 80%
00:01.100 ──→ 查询 → 返回 80% ✅
延迟: 最多 1 秒


refresh_interval = 10s:
00:00.000 ──→ CPU 使用率 30%
00:00.500 ──→ CPU 使用率 80% (实际变化)
00:05.000 ──→ 查询 → 返回 30% (缓存)
00:10.001 ──→ 缓存刷新 → 获取到 80%
00:10.100 ──→ 查询 → 返回 80% ✅
延迟: 最多 10 秒

OsProbe 实现 #

系统探测接口

OsProbe 接口:
├── osStats(): 获取 OS 统计信息
├── osInfo(): 获取 OS 信息
└── 跨平台实现


Linux 实现:
├── 读取 /proc/stat (CPU)
├── 读取 /proc/meminfo (内存)
├── 读取 /proc/vmstat (虚拟内存)
└── sysconf() (系统配置)


Windows 实现:
├── GetPerformanceCounter()
├── GlobalMemoryStatusEx()
└── GetSystemTimes()


macOS 实现:
├── sysctl()
├── host_statistics()
└── vm_statistics()

注意事项 #

  1. 默认值: 默认值为 1s,适合大多数场景。

  2. 最小值: 最小值为 1s,不能设置更小。

  3. 需要重启: 修改此配置需要重启节点。

  4. 缓存机制: 使用缓存减少系统调用。

  5. 数据延迟: 数据有延迟,不是完全实时。

  6. 跨平台: 不同 OS 的实现不同。

  7. 系统调用: 刷新会调用系统接口获取数据。

  8. 监控建议: 根据监控需求选择间隔。

  9. 测试验证: 配置变更后应验证监控效果。

  10. 合理设置: 稳定环境可以适当增加间隔。

API 使用场景 #

osStats() 的调用场景

1. Nodes Stats API
   GET /_nodes/stats/os
   ├── 调用 osStats()
   └── 返回操作系统统计信息


2. CAT API
   GET /_cat/nodes
   ├── 显示 CPU 使用率
   └── 显示内存使用率


3. 监控工具
   ├── Prometheus Exporter
   ├── Metricbeat
   └── 其他监控工具
   ├── 定期调用 osStats()
   └── 收集系统指标


4. 集群管理
   ├── 检查节点健康状况
   ├── 评估节点负载
   └── 资源规划