Elasticsearch 索引监控:全方位追踪索引状态与性能
索引是 Elasticsearch 存储和查询数据的核心单元,其健康状态和性能直接影响整个集群的可用性。Elasticsearch 提供了一系列 API 用于监控索引的统计信息、分片状态、恢复进度等关键指标,帮助开发者和运维人员及时发现并解决问题。
索引统计信息(_stats)
_stats API 提供索引的详细统计数据,涵盖文档数量、存储大小、索引 / 查询性能、缓存使用等维度,是监控索引整体状态的核心工具。
基本用法
查看所有索引的统计信息:
1
GET _stats // 返回集群中所有索引的统计数据
查看指定索引的统计信息:
1
GET my_index/_stats // 仅返回my_index的统计数据
过滤统计维度(如仅查看存储和事务日志):
1
GET my_index/_stats/store,translog // 仅返回存储和事务日志信息
核心统计指标
(1)文档与存储信息(docs + store)
1 | { |
- 关注点:
count异常波动可能暗示批量写入或删除操作;size_in_bytes增长过快需检查是否有大字段或冗余数据。
(2)索引操作统计(indexing)
1 | { |
- 关注点:
index_failed不为 0 可能是字段映射错误或数据格式问题;index_current持续过高可能是写入压力过大。
(3)查询与搜索统计(search)
1 | { |
- 关注点:
query_time_in_millis平均值过高可能是查询语句未优化;open_contexts过高可能是滚动查询未及时关闭。
(4)缓存使用(query_cache + fielddata)
1 | { |
- 关注点:
evictions频繁可能是fielddata缓存设置过小,需调整indices.fielddata.cache.size;hit_count/miss_count比例低说明缓存利用率低。
(5)事务日志(translog)
1 | { |
- 关注点:
size_in_bytes过大可能导致刷新(flush)时 IO 压力激增,可调整index.translog.flush_threshold_size。
索引分片信息(_segments)
_segments API 提供索引底层 Lucene 分段(Segment)的详细信息,包括分段数量、内存占用、文档数等,用于分析索引合并(Merge)和优化状态。
基本用法
查看指定索引的分片信息:
1
GET my_index/_segments // 返回my_index的分段信息
查看所有索引的分片信息:
1
GET _segments // 返回所有索引的分段信息
核心指标解析
1 | { |
- 关注点:
- 过多小分段(
num_search_segments过大)会降低查询性能,需触发合并(force_merge)。 - 分段
deleted比例过高(如 >30%)说明删除操作频繁,可通过合并释放空间。
- 过多小分段(
索引恢复信息(_recovery)
_recovery API 用于监控索引分片的恢复进度(如节点重启后的数据同步、副本分片创建等),帮助评估恢复耗时和状态。
基本用法
查看指定索引的恢复信息:
1
GET my_index/_recovery // 返回my_index的恢复信息
查看所有索引的恢复信息:
1
GET _recovery // 返回所有索引的恢复信息
核心指标解析
1 | { |
- 关注点:
stage长时间停留在INDEX或TRANSLOG可能是网络缓慢或数据量过大。total_time_in_millis过长需检查indices.recovery.max_bytes_per_sec(默认 40MB/s)是否限制了恢复速度。
索引分片存储信息(_shard_stores)
_shard_stores API 用于查看索引分片的存储位置(节点信息),帮助确认分片是否正常分布在预期节点上,尤其适用于多节点集群。
基本用法
查看指定索引的分片存储信息:
1
GET my_index/_shard_stores // 返回my_index各分片的存储节点
核心指标解析
1 | { |
- 关注点:
- 主分片和副本分片是否分布在不同节点(避免单点故障)。
- 若
stores数组为空,说明分片未分配(UNASSIGNED),需检查节点资源或集群配置。
监控最佳实践
定期巡检:结合
_stats和_segments定期检查索引状态,重点关注文档数、存储大小、查询耗时等指标的异常变化。告警配置:对关键指标设置阈值告警(如
indexing.index_failed > 0、search.query_time_in_millis均值过高)。分片优化:当_segments显示过多小分段时,执行force_merge合并分段(仅在只读索引或低峰期操作):
1
POST my_index/_forcemerge?max_num_segments=1 // 合并为1个分段
恢复调优:节点故障恢复时,通过调整indices.recovery.max_bytes_per_sec加速恢复(需权衡集群负载):
1
2
3
4PUT _cluster/settings
{
"transient": { "indices.recovery.max_bytes_per_sec": "100mb" }
}