5分钟搞定K8s监控:用kube-prometheus+Elasticsearch Exporter监控ES集群

5分钟搞定K8s监控:用kube-prometheus+Elasticsearch Exporter监控ES集群

【免费下载链接】kube-prometheus prometheus-operator/kube-prometheus: kube-prometheus项目提供了在Kubernetes集群中部署Prometheus监控解决方案的一体化方法,包括Prometheus Server、Alertmanager、Grafana以及其他相关的监控组件,旨在简化在K8s环境下的监控配置与管理。 【免费下载链接】kube-prometheus 项目地址: https://gitcode.com/gh_mirrors/ku/kube-prometheus

为什么需要监控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:验证指标采集

  1. 检查Exporter是否正常运行:
kubectl logs -l app=elasticsearch-exporter -n monitoring
  1. 验证Prometheus是否发现目标:访问Prometheus UI(访问方法),查看elasticsearch_up指标是否为1。

可视化与告警:让监控真正可用

导入Grafana面板

  1. 登录Grafana(默认账号密码在grafana-config.yaml中配置)
  2. 导入ES监控面板(推荐Dashboard ID:2322,基于Elasticsearch Exporter指标)
  3. 关键监控指标:
    • 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的namespaceSelectorselector是否匹配Exporter服务

总结

通过kube-prometheus+Elasticsearch Exporter的组合,我们实现了对K8s环境中ES集群的全链路监控。从指标采集到可视化告警,这套方案既能满足实时监控需求,又能与现有K8s监控体系无缝集成。更多高级配置可参考:

【免费下载链接】kube-prometheus prometheus-operator/kube-prometheus: kube-prometheus项目提供了在Kubernetes集群中部署Prometheus监控解决方案的一体化方法,包括Prometheus Server、Alertmanager、Grafana以及其他相关的监控组件,旨在简化在K8s环境下的监控配置与管理。 【免费下载链接】kube-prometheus 项目地址: https://gitcode.com/gh_mirrors/ku/kube-prometheus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值