Elasticsearch 如何监控集群状态和性能指标?
监控 ES 集群,最常用的三个入口:_cluster/health 看整体状态,_cat/nodes 看节点资源,Kibana Stack Monitoring 看可视化大盘。生产环境一般是 API + Prometheus + Grafana 的组合:API 做快速诊断,Prometheus 采 metrics,Grafana 出图 + 告警。
_cluster/health 返回 status(green/yellow/red),green 正常,yellow 有未分配副本,red 有主分片丢失。red 要立即查节点是不是挂了或者磁盘满了。
_cat/nodes?v 看每个节点的 heap.percent、cpu、disk.used。heap.percent 超 70% 就该告警,超 80% 可能 OOM。
Kibana 的 Stack Monitoring 不用额外部署,开箱即用。Overview 看集群状态,Nodes 看 CPU/内存/磁盘,Indices 看搜索延迟和索引速率。设好阈值就能自动告警。
生产环境一般加 Prometheus exporter 采 _nodes/stats 的 JVM 内存、查询延迟、磁盘 IO 等指标,Grafana 里建仪表板。比 Kibana 灵活,可以和其他服务的监控放一起看。
追问
cluster health 返回 yellow 怎么排查?
yellow 表示主分片都正常但部分副本分片没分配。常见原因:节点数不够(比如索引设了 1 副本但只有一个节点)、磁盘满了、分片分配被手动关闭。用 _cluster/allocation/explain 看具体原因。
ES 节点频繁 OOM 怎么定位?
先看 heap.percent 趋势,是不是持续上涨(内存泄漏)还是突发峰值(大查询)。用 _nodes/hot_threads 找慢线程,用 _tasks 看正在跑的耗时任务。大概率是聚合查询或深度分页导致的。
磁盘突然满了怎么办?
先看哪些索引占用大:_cat/indices?v&s=store.size:desc。紧急扩容或者删旧索引。长期方案:设 ILM(索引生命周期管理),按时间或大小自动 rollover 和删除。
Kibana 监控和 Prometheus 监控怎么选?
Kibana 开箱即用,适合小团队快速上手。Prometheus + Grafana 灵活但需要维护 exporter,适合已经把其他服务也接 Prometheus 的团队。可以一起用,不冲突。