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

配置项作用 #

monitor.rollup.stats_refresh_interval 配置项用于控制Rollup 任务统计信息的定期刷新间隔时间

此配置决定了系统多久从 .easysearch-ilm-config 索引中获取和缓存一次滚动任务统计信息,包括处理的页面数、文档数、索引时间等指标。

配置项属性 #

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

配置项详解 #

工作机制 #

Rollup 统计刷新机制

定时任务 (scheduleWithFixedDelay):

上次刷新完成
    │
    ↓ 等待 refresh_interval
    │
    ↓
触发本次刷新
    │
    ├── 检查 Rollup 插件是否安装
    ├── 检查集群状态
    ├── 检查索引是否存在
    ├── 发送 cluster:admin/monitor/rollup/stats 请求
    ├── 获取 Rollup 任务统计信息
    └── 缓存统计结果
    │
    ↓ 刷新完成
    ↓
等待 refresh_interval
    │
    ↓ (循环)


示例 (refresh_interval = 5s):

00:00 ──→ 刷新 1 开始
00:00 ──→ 刷新 1 完成
00:05 ──→ 刷新 2 开始
00:05 ──→ 刷新 2 完成
00:10 ──→ 刷新 3 开始
...

Rollup 统计信息内容 #

Rollup 统计包含的数据

1. 处理统计
   ├── pages_processed
   │   └── 已处理的页面数量
   ├── documents_processed
   │   └── 已处理的原始文档数量
   └── rollups_indexed
       └── 已索引的滚动文档数量


2. 时间统计
   ├── index_time_in_millis
   │   └── 索引滚动文档花费的总时间
   └── search_time_in_millis
       └── 查询/聚合实时文档花费的总时间


3. 任务状态
   ├── 任务 ID
   ├── 任务状态
   └── 任务配置


4. 其他信息
   ├── 时间戳
   ├── 节点信息
   └── 索引信息

禁用定期刷新 #

设置 <= 0 可以禁用定期刷新

refresh_interval <= 0:
    │
    ↓
logger.info("Rollup stats periodic refresh is disabled (interval is non-positive).")
    │
    ↓
定时任务不启动
    │
    ↓
不自动刷新统计信息

配置建议 #

生产环境(默认) #

monitor:
  rollup:
    stats_refresh_interval: 5s  # 默认值

建议: 保持默认值 5s。平衡实时性和开销。

减少刷新频率 #

monitor:
  rollup:
    stats_refresh_interval: 10s  # 减少刷新

建议: 设置为 10-30s。Rollup 任务不频繁时使用。

高频刷新 #

monitor:
  rollup:
    stats_refresh_interval: 1s  # 更频繁

建议: 设置为 1-3s。需要实时监控 Rollup 状态时使用。

禁用自动刷新 #

monitor:
  rollup:
    stats_refresh_interval: -1  # 禁用

建议: 设置为 -10s。不需要自动刷新时使用。

代码示例 #

easysearch.yml 基础配置 #

monitor:
  rollup:
    stats_refresh_interval: 5s

标准生产配置 #

monitor:
  rollup:
    stats_refresh_interval: 5s

低频率配置 #

monitor:
  rollup:
    stats_refresh_interval: 30s

禁用自动刷新配置 #

monitor:
  rollup:
    stats_refresh_interval: -1

相关配置 #

配置项作用默认值
monitor.rollup.stats_refresh_intervalRollup 统计刷新间隔5s
rollup.*Rollup 任务配置-

性能影响分析 #

stats_refresh_interval 设置优点缺点
-1/0s无开销无自动监控
1-3s实时监控较高查询开销
5s(默认)平衡监控和开销标准设置
10-30s低查询开销监控延迟
60s+最低查询开销延迟较大

查询开销对比 #

不同间隔的查询开销

refresh_interval = 5s (默认):
├── 每分钟查询: 12 次
├── 单次开销: ~10ms (查询 .easysearch-ilm-config)
└── 每分钟开销: ~120ms (0.2%)


refresh_interval = 1s:
├── 每分钟查询: 60 次
├── 单次开销: ~10ms
└── 每分钟开销: ~600ms (1%)


refresh_interval = 10s:
├── 每分钟查询: 6 次
├── 单次开销: ~10ms
└── 每分钟开销: ~60ms (0.1%)


refresh_interval = 30s:
├── 每分钟查询: 2 次
├── 单次开销: ~10ms
└── 每分钟开销: ~20ms (0.03%)

使用场景 #

推荐使用默认值的场景 #

  • 标准 Rollup: 正常的 Rollup 任务运行
  • 定期监控: 需要定期了解任务状态
  • 平衡需求: 平衡实时性和开销

推荐增加间隔的场景 #

  • 少量任务: Rollup 任务数量很少
  • 减少开销: 希望减少查询开销
  • 长期任务: 长期运行的 Rollup 任务

推荐减少间隔的场景 #

  • 频繁监控: 需要实时监控任务状态
  • 调试 Rollup: 正在调试 Rollup 任务
  • 关键任务: Rollup 任务非常关键

推荐禁用的场景 #

  • 不需要监控: 不需要自动监控 Rollup
  • 手动查询: 只需要时手动查询
  • 节省资源: 希望节省集群资源

Rollup 任务监控 #

监控 Rollup 任务的重要性

监控指标:

pages_processed:
├── 反映处理的页面数量
├── 持续增加 → 任务正常 ✅
└── 不变 → 可能有问题 ⚠️


documents_processed:
├── 反映处理的文档数量
├── 与源数据增长匹配
└── 可预测处理速度


rollups_indexed:
├── 反映生成的滚动文档数量
├── 持续增长 → 任务正常 ✅
└── 不变 → 可能有问题 ⚠️


index_time_in_millis:
├── 反映索引耗时
├── 突然增加 → 性能问题 ⚠️
└── 持续高位 → 需要优化


search_time_in_millis:
├── 反映查询耗时
├── 突然增加 → 源数据问题 ⚠️
└── 持续高位 → 需要优化

数据延迟分析 #

监控数据的延迟

refresh_interval = 5s (默认):
00:00 ──→ Rollup 统计: pages=1000
00:02 ──→ Rollup 统计: pages=2000 (实际变化)
00:03 ──→ 查询 → 返回 1000 (缓存)
00:05 ──→ 缓存刷新 → 获取到 2000
00:06 ──→ 查询 → 返回 2000 ✅
延迟: 最多 5 秒


refresh_interval = 30s:
00:00 ──→ Rollup 统计: pages=1000
00:10 ──→ Rollup 统计: pages=2000 (实际变化)
00:15 ──→ 查询 → 返回 1000 (缓存)
00:30 ──→ 缓存刷新 → 获取到 2000
00:35 ──→ 查询 → 返回 2000 ✅
延迟: 最多 30 秒

刷新流程详解 #

fetchAndCacheStats() 流程

1. 检查前置条件
   ├── Rollup 插件是否安装
   ├── 集群状态是否正常
   └── 索引是否存在且状态正常


2. 发送统计请求
   cluster:admin/monitor/rollup/stats
   ├── 目标: .easysearch-ilm-config 索引
   ├── 获取所有 Rollup 任务统计
   └── 返回统计结果


3. 缓存统计结果
   ├── 更新内部缓存
   ├── 供 API 查询使用
   └── 记录时间戳


4. 错误处理
   ├── 索引不存在 → 记录警告,继续
   ├── 插件未安装 → 记录警告,继续
   └── 请求失败 → 记录错误,继续

注意事项 #

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

  2. 禁用设置: 设置为 <= 0 会禁用定期刷新。

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

  4. 固定延迟: 使用 scheduleWithFixedDelay 策略。

  5. 索引依赖: 需要 .easysearch-ilm-config 索引。

  6. 插件依赖: 需要 Rollup 插件安装。

  7. 查询开销: 刷新会查询集群状态。

  8. 监控建议: 根据任务数量调整间隔。

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

  10. 手动查询: 禁用后仍可手动查询统计。

相关 API #

获取 Rollup 统计的 API

手动查询统计:
GET /_rollup/stats

响应:
{
  "jobs": [
    {
      "job_id": "rollup_job_1",
      "status": "started",
      "stats": {
        "pages_processed": 1000,
        "documents_processed": 100000,
        "rollups_indexed": 50000,
        "index_time_in_millis": 5000,
        "search_time_in_millis": 2000
      }
    }
  ]
}


监控集成:
├── Prometheus Exporter
├── 自定义监控脚本
└── 运维平台集成