5分钟搞定K8s监控:用kube-prometheus+Elasticsearch Exporter监控ES集群
为什么需要监控Elasticsearch?
在Kubernetes(K8s)环境中,Elasticsearch(ES)作为分布式搜索引擎,其集群健康状态直接影响业务稳定性。当ES集群出现分片不平衡、磁盘使用率过高或查询延迟时,传统的日志查看方式难以快速定位问题。通过Prometheus+Elasticsearch Exporter的组合,可实现对ES集群的指标采集、可视化及告警,帮助运维人员实时掌握集群状态。
准备工作:环境与工具
环境要求
- Kubernetes集群(v1.21+)
- kube-prometheus已部署(参考deploy-kind.md)
- Elasticsearch集群(v7.x+,支持Prometheus监控)
核心组件
- Elasticsearch Exporter:开源工具,用于采集ES集群指标并暴露给Prometheus(GitHub仓库)
- Prometheus:时序数据库,负责指标存储与查询(组件定义)
- Grafana:可视化平台,用于创建ES监控面板(配置说明)
部署步骤:从0到1监控ES集群
步骤1:部署Elasticsearch Exporter
创建Kubernetes Deployment和Service,将Exporter部署到与ES集群相同的命名空间(或监控专用命名空间):
# elasticsearch-exporter.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch-exporter
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch-exporter
template:
metadata:
labels:
app: elasticsearch-exporter
spec:
containers:
- name: exporter
image: quay.io/prometheuscommunity/elasticsearch-exporter:latest
args:
- --es.uri=http://elasticsearch:9200 # ES集群地址
- --es.all=true # 采集所有节点指标
- --es.indices=true # 采集索引指标
ports:
- containerPort: 9114
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-exporter
namespace: monitoring
spec:
selector:
app: elasticsearch-exporter
ports:
- port: 9114
targetPort: 9114
执行部署命令:
kubectl apply -f elasticsearch-exporter.yaml -n monitoring
步骤2:配置Prometheus采集规则
通过ServiceMonitor让Prometheus发现ES Exporter:
# elasticsearch-servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: elasticsearch-exporter
namespace: monitoring
labels:
prometheus: k8s
spec:
selector:
matchLabels:
app: elasticsearch-exporter
endpoints:
- port: 9114
path: /metrics
interval: 30s # 采集间隔,避免对ES集群造成压力
应用配置:
kubectl apply -f elasticsearch-servicemonitor.yaml -n monitoring
步骤3:验证指标采集
- 检查Exporter是否正常运行:
kubectl logs -l app=elasticsearch-exporter -n monitoring
- 验证Prometheus是否发现目标:访问Prometheus UI(访问方法),查看
elasticsearch_up指标是否为1。
可视化与告警:让监控真正可用
导入Grafana面板
- 登录Grafana(默认账号密码在grafana-config.yaml中配置)
- 导入ES监控面板(推荐Dashboard ID:2322,基于Elasticsearch Exporter指标)
- 关键监控指标:
elasticsearch_cluster_health_status:集群健康状态(1=green,2=yellow,3=red)elasticsearch_indices_docs:文档总数及删除数elasticsearch_filesystem_data_available_bytes:节点磁盘可用空间
配置告警规则
在Prometheus中添加告警规则,当ES集群异常时触发通知:
# es-alert-rules.yaml
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: es-alerts
namespace: monitoring
spec:
groups:
- name: elasticsearch
rules:
- alert: ESClusterRed
expr: elasticsearch_cluster_health_status == 3
for: 5m
labels:
severity: critical
annotations:
summary: "ES集群状态异常"
description: "集群状态已持续5分钟为red,存在未分配的主分片"
- alert: ESDiskHighUsage
expr: elasticsearch_filesystem_data_available_bytes / elasticsearch_filesystem_data_size_bytes < 0.1
for: 10m
labels:
severity: warning
annotations:
summary: "ES节点磁盘使用率过高"
description: "节点{{ $labels.node }}磁盘可用空间不足10%"
应用告警规则:
kubectl apply -f es-alert-rules.yaml -n monitoring
常见问题与优化
性能优化建议
- 调整采集间隔:根据ES集群规模增大
interval(如大型集群设为60s) - 禁用不必要的指标:通过Exporter参数
--collector.indices=false减少非必要指标 - 使用持久化存储:确保Prometheus数据持久化(配置PVC)
排错指南
- Exporter连接ES失败:检查
--es.uri是否正确,ES是否开启了安全认证(需配置--es.user和--es.password) - Prometheus未发现目标:确认ServiceMonitor的
namespaceSelector和selector是否匹配Exporter服务
总结
通过kube-prometheus+Elasticsearch Exporter的组合,我们实现了对K8s环境中ES集群的全链路监控。从指标采集到可视化告警,这套方案既能满足实时监控需求,又能与现有K8s监控体系无缝集成。更多高级配置可参考:
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



