Elasticsearch 的 监控(Monitoring) 功能用于实时跟踪集群的运行状态、性能指标和资源使用情况,帮助管理员及时发现潜在问题、优化配置并确保集群稳定高效运行。它通过内置工具和集成方案,提供从节点到集群、从硬件到服务层的全方位监控能力。
一、监控核心目标
- 集群健康状态
- 检测集群是否正常运行,是否存在节点故障、分片分配异常等问题。
- 性能指标采集
- 收集节点、索引、分片的CPU、内存、磁盘、网络等资源使用数据。
- 追踪搜索、写入、合并等操作的延迟、吞吐量和错误率。
- 异常行为预警
- 通过阈值告警及时发现内存溢出、磁盘空间不足、慢查询等风险。
- 历史趋势分析
- 存储历史监控数据,用于分析集群负载变化、容量规划和性能调优。
二、内置监控工具:Elasticsearch Monitoring(X-Pack Monitoring)
Elasticsearch 从 5.0 版本开始通过 X-Pack 插件 提供内置监控功能(需启用 X-Pack,基础功能免费),主要包含以下组件:
- 监控数据采集
- 自动采集指标:
- 节点级指标:CPU 使用率、JVM 内存(堆/非堆)、垃圾回收(GC)频率、文件描述符、线程池状态等。
- 集群级指标:集群健康状态(绿色/黄色/红色)、分片总数、未分配分片数、主节点状态等。
- 索引级指标:文档数、存储大小、写入速率(索引/删除操作)、搜索速率(查询/扫描操作)、分片副本状态等。
- 线程池指标:队列长度、活跃线程数、拒绝任务数(反映请求处理压力)。
- 采集频率:默认每 10 秒采集一次节点指标,每分钟采集一次集群和索引指标。
- 监控数据存储
- 监控数据默认存储在 Elasticsearch 自身的 .monitoring-* 索引 中(可通过配置指定其他集群存储)。
- 支持数据保留策略(如保留 30 天数据),避免占用过多磁盘空间。
- 可视化界面
- 集群概览:显示集群健康状态、节点数量、数据节点/主节点分布、资源使用趋势(CPU/内存/磁盘)。
- 节点详情:单个节点的 JVM 内存、GC 日志、线程池、网络 I/O 等实时数据。
- 索引分析:按索引展示文档增长趋势、写入/搜索性能、分片分布及副本利用率。
- 慢查询日志:捕获执行时间超过阈值的查询,帮助定位性能瓶颈。
- 告警功能
- 通过 Elasticsearch Alerting(需单独配置)设置阈值规则,例如:
- 当集群健康状态变为红色时触发告警。
- 节点 JVM 内存使用率超过 80% 时发送通知。
- 磁盘剩余空间低于 10% 时告警。
三、监控指标分类与示例
指标类别 具体指标 说明
集群健康 status (绿/黄/红) 绿色:所有分片可用;黄色:部分副本分片不可用;红色:主分片不可用。
unassigned_shards 未分配的分片数(通常因节点故障或磁盘不足导致)。
节点资源 jvm.mem.heap.used_percent JVM 堆内存使用率(建议控制在 70% 以下,避免频繁 GC)。
process.cpu.percent 节点进程的 CPU 使用率(持续高于 80% 可能需扩容或优化查询)。
disk.used_percent 磁盘使用率(建议保留 20% 以上空间,避免节点自动熔断)。
索引性能 indexing.index_total 累计索引文档数(写入吞吐量)。
search.query_time_in_millis 平均查询耗时(慢查询可能由复杂查询或分片分布不均导致)。
merge.total_time_in_millis 段合并总耗时(合并频繁可能影响写入性能)。
分片状态 shards.primary 主分片数量。
shards.replica 副本分片数量。
shards.started 已启动的分片数(未启动可能因节点负载过高或配置限制)。
四、监控配置与启用
- 启用 X-Pack Monitoring
在 elasticsearch.yml 中配置:
xpack.monitoring.enabled: true # 启用监控功能
xpack.monitoring.collection.enabled: true # 启用数据采集
xpack.monitoring.exporters: # 配置数据存储(默认存储到本地集群)
- type: elasticsearch
hosts: ["http://localhost:9200"]
index: ".monitoring-es-8-*" # 监控数据索引名称(版本号自动更新)
2. 调整采集频率与保留策略
# 全局采集频率(单位:毫秒,默认 60000 毫秒即 1 分钟)
xpack.monitoring.collection.interval: 30s
# 配置索引生命周期管理(ILM)策略,控制监控数据保留时间
xpack.monitoring.ui.container.ilm.pattern: "{now/d}-000001"
xpack.monitoring.ui.container.ilm.max_age: 30d # 保留 30 天数据
- 与 Kibana 集成
通过 Kibana 的 Monitoring 应用 可视化监控数据:
- 确保 Kibana 已启用 X-Pack 并连接到 Elasticsearch 集群。
- 在 Kibana 左侧导航栏选择 Monitoring > Elasticsearch,查看集群、节点、索引的实时图表。
五、高级监控方案
- 跨集群监控
- 通过 Elasticsearch Remote Monitoring 监控多个集群,将数据集中存储到一个中央监控集群。
- 配置示例:
# 被监控集群(远程集群)配置
xpack.monitoring.relocate.enabled: true
xpack.monitoring.relocate.cluster_alias: "remote-cluster"
xpack.monitoring.exporters:
- type: http
hosts: ["http://central-monitoring-cluster:9200"]
- 与外部监控系统集成
- Prometheus + Grafana:通过 Elasticsearch Exporter 将指标导出到 Prometheus,再用 Grafana 可视化。
- Cloud Monitoring:在云平台(如 AWS、Google Cloud)中集成 Elasticsearch 监控指标。
- 日志聚合系统:将监控数据与其他系统日志结合分析(如通过 Logstash 转发到 Elasticsearch 或外部存储)。
- 自定义指标采集
- 通过 Elasticsearch API 或插件(如 Marvel)采集自定义业务指标(如特定查询的响应时间)。
六、最佳实践
- 优先关注关键指标
- 集群健康状态( _cluster/health )、节点 JVM 内存、磁盘使用率、慢查询。
- 设置合理告警阈值
- 例如:JVM 内存使用率 > 75%、磁盘剩余空间 < 15%、集群健康状态非绿色。
- 定期分析历史数据
- 通过历史趋势预测容量需求(如文档增长速率),提前规划硬件扩容或索引生命周期策略。
- 分离监控数据存储
- 将监控数据存储在独立集群或专用索引,避免影响业务数据性能。
- 监控用户行为
- 结合审计日志(Audit Logging)分析用户操作与性能波动的关联。
七、总结
Elasticsearch 的监控功能是保障集群稳定运行的核心能力,通过内置的 X-Pack Monitoring 可快速实现可视化监控和告警,而结合外部工具(如 Prometheus、Grafana)则能进一步扩展监控灵活性。合理配置监控指标、阈值和存储策略,有助于提前发现并解决性能瓶颈,确保 Elasticsearch 集群高效、可靠地支持业务需求。