监控 Elasticsearch 中各个生命周期阶段的索引状态是保障日志系统稳定运行的关键。通过实时掌握索引所处阶段(hot/warm/cold/delete)、执行进度和潜在错误,可及时发现 ILM 策略卡顿、分片未迁移、rollover 失败等问题。
以下是 全面且实用的监控方法与工具组合,适用于生产环境。
✅ 一、使用 ILM Explain API 查看单个索引状态
这是最直接的方式,查看某个索引当前在 ILM 中的执行情况:
GET _ilm/explain/logs-000001
🔍 返回示例:
{
"indices": {
"logs-000001": {
"index": "logs-000001",
"phase": "warm",
"action": "allocate",
"step": "complete",
"phase_time_millis": 1712345678000
}
}
}
📌 字段说明:
| 字段 | 含义 |
|---|---|
phase | 当前阶段:hot, warm, cold, delete |
action | 正在执行的动作,如 rollover, allocate, forcemerge |
step | 动作的子步骤状态:waiting, executing, complete, failed |
failure | 若失败,会显示具体错误信息 |
💡 提示:可批量查询多个索引:
GET _ilm/explain/logs-*
✅ 二、列出所有索引及其 ILM 阶段(聚合视图)
结合 _cat/indices 和 _ilm/explain 获取全局概览:
GET _cat/indices/logs-*?v&h=index,pri,store.size,docs.count,creation.date
再配合:
GET _ilm/explain/logs-*?filter_path=indices.*.phase,indices.*.action,indices.*.step
输出示例:
{
"indices": {
"logs-000001": { "phase": "hot", "action": "rollover", "step": "complete" },
"logs-000002": { "phase": "warm", "action": "allocate", "step": "complete" },
"logs-000003": { "phase": "cold", "action": "freeze", "step": "executing" }
}
}
可编写脚本定期采集并告警异常状态(如长期停留在
waiting)。
✅ 三、使用 Kibana 可视化监控(推荐)
方法 1:Kibana Stack Monitoring
- 路径:Kibana → Management → Stack Monitoring
- 功能:
- 展示集群健康、节点负载、索引速率
- 显示 ILM 策略执行趋势图
- 监控分片分布(是否按预期迁移到 warm/cold 节点)
方法 2:创建自定义 Dashboard
利用 Elasticsearch Index Patterns + Lens / TSVB 创建仪表板:
- 指标项建议:
- 各阶段索引数量(按
phase分组) - 总存储占用(hot vs warm vs cold)
- 最近 7 天 rollover 成功率
- ILM failure 计数
- 各阶段索引数量(按
✅ 四、启用 ILM 监控日志与告警
1. 开启慢动作日志(调试用)
在 elasticsearch.yml 中配置:
logger.org.elasticsearch.index.lifecycle: DEBUG
可记录 ILM 决策过程,用于排查为何未触发 rollover。
2. 使用 Watcher 设置告警(需 Basic/X-Pack)
创建 watch,当发现 ILM 卡住时发送通知:
PUT _watcher/watch/ilm_stuck_watch
{
"trigger": { "schedule": { "interval": "1h" } },
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
"indices": [".operations-*"],
"body": {
"query": {
"bool": {
"must": [
{ "match": { "event.action": "ilm_step_failed" }},
{ "range": { "@timestamp": { "gte": "now-2h" }}}
]
}
}
}
}
}
},
"actions": {
"send_email": {
"email": {
"to": "admin@example.com",
"subject": "ILM Failure Detected",
"body": "Failed ILM step found in cluster: {{ctx.payload.hits.total}}"
}
}
}
}
✅ 五、结合外部监控系统(Prometheus + Grafana)
若使用 Prometheus Exporter(如 elasticsearch_exporter),可采集以下关键指标:
| 指标名称 | 说明 |
|---|---|
elasticsearch_indices_stats_total_indexing_time_seconds | 索引写入耗时 |
elasticsearch_ilm_phase | 每个索引所处阶段(标签形式) |
elasticsearch_ilm_step_info | 当前执行步骤 |
elasticsearch_thread_pool_rejected_count | 写入拒绝次数(间接反映 hot 阶段压力) |
然后在 Grafana 中构建面板:
- 柱状图:各 phase 索引数量
- 折线图:每日 rollover 成功率
- 告警规则:连续 2 小时无进入 warm 的索引 → 触发告警
✅ 六、常见问题识别与处理
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
phase=hot 持续超过 1 天 | Rollover 条件未满足(size/age/docs) | 检查 max_age 是否设置合理 |
step=waiting 长时间不前进 | 缺少 write index 或 alias 错误 | 检查 data stream 写入别名 |
action=allocate 失败 | 目标节点无可用空间或角色不符 | 检查 data_warm 节点是否存在 |
failure 字段出现 | 如磁盘满、权限不足等 | 查看 error message 并修复 |
✅ 七、最佳实践总结
| 实践 | 说明 |
|---|---|
✅ 定期运行 GET _ilm/explain/* | 发现卡顿索引 |
| ✅ 使用 Data Stream + ILM 自动化管理 | 减少人为干预 |
| ✅ 配置告警机制 | 对 failed 或 stuck 状态即时响应 |
| ✅ 记录 ILM 操作日志 | 便于审计和故障回溯 |
| ✅ 结合可视化看板 | 提升运维效率 |
通过以上多维度监控手段,你可以实现对 Elasticsearch 生命周期状态的 全链路可观测性,确保冷热分离架构稳定运行。



被折叠的 条评论
为什么被折叠?



