使用Prometheus+Grafana实现Elasticsearch监控的完整实践

在分布式系统架构中,Elasticsearch(简称ES)作为日志存储、全文检索的核心组件,其集群健康状态、节点资源利用率、索引性能等指标直接关系到业务的稳定性。传统手动登录节点查看ES状态的方式,不仅效率低下,还无法实时感知系统异常。而Prometheus搭配Grafana的组合,凭借强大的指标采集和可视化能力,成为解决ES监控需求的最优方案之一。本文将详细讲解如何从零搭建这套监控体系,覆盖elasticsearch_exporter部署、Prometheus配置、Grafana可视化全流程。

一、监控原理概述

ES本身不会直接暴露Prometheus可识别的监控指标,因此需要借助elasticsearch_exporter作为数据中转桥梁,整体监控流程分为三步:

  1. 部署elasticsearch_exporter:在每台ES节点上运行该组件,它会主动抓取ES的原生监控指标,如集群健康状态、节点CPU/内存占用、索引分片数量等。
  2. Prometheus数据拉取与存储:Prometheus会按照配置的时间间隔,从elasticsearch_exporter暴露的接口拉取监控数据,并将其存储在自带的时序数据库中。
  3. Grafana可视化展示:Grafana对接Prometheus数据源,通过预置的Dashboard模板,将枯燥的指标数据转化为直观的图表,方便运维人员实时监控与异常排查。

二、部署elasticsearch_exporter

elasticsearch_exporter是连接ES与Prometheus的关键组件,需在所有ES节点上部署,本文以Linux(CentOS)环境为例进行演示。

2.1 下载并解压exporter

选择官方稳定版本(本文使用v1.7.0,兼容主流ES版本),执行以下命令完成下载与解压:

bash 复制代码
# 进入系统临时下载目录
cd /usr/src
# 下载exporter压缩包
wget https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v1.7.0/elasticsearch_exporter-1.7.0.linux-amd64.tar.gz
# 解压压缩包
tar zxvf elasticsearch_exporter-1.7.0.linux-amd64.tar.gz
# 移动到标准安装目录,便于统一管理
mv elasticsearch_exporter-1.7.0.linux-amd64 /usr/local/elasticsearch_exporter/

2.2 启动exporter并验证进程

使用nohup命令让exporter后台运行,并通过参数指定ES连接地址、监听端口等关键配置:

bash 复制代码
# 进入exporter安装目录
cd /usr/local/elasticsearch_exporter/
# 后台启动exporter,配置关键参数
nohup ./elasticsearch_exporter --es.all --es.indices --es.indices_settings --es.shards --es.timeout=10s --web.listen-address=":9115" --web.telemetry-path="/metrics" --es.uri http://192.168.184.152:9200/ &
# 验证进程是否启动成功
ps -ef | grep elasticsearch_exporter

若命令输出中包含elasticsearch_exporter相关进程,则说明启动成功。

2.3 测试监控数据抓取

exporter启动后,会在9115端口的/metrics路径暴露监控数据。通过curl命令或浏览器访问该地址,验证数据是否正常输出:

bash 复制代码
# 本地测试数据抓取
curl http://192.168.184.152:9115/metrics

若返回结果中包含大量以elasticsearch_开头的指标(如elasticsearch_cluster_health_status),则表明exporter已成功抓取ES监控数据。

三、配置并启动Prometheus

Prometheus是监控系统的核心,负责数据的拉取、存储与查询,接下来完成其安装与配置。

3.1 下载并安装Prometheus

前往Prometheus官方下载页选择对应版本,本文使用v3.8.1:

bash 复制代码
# 进入下载目录
cd /usr/src
# 下载Prometheus压缩包
wget https://github.com/prometheus/prometheus/releases/download/v3.8.1/prometheus-3.8.1.linux-amd64.tar.gz
# 解压压缩包
tar zxvf prometheus-3.8.1.linux-amd64.tar.gz
# 移动到标准安装目录
mv prometheus-3.8.1.linux-amd64 /usr/local/prometheus

3.2 配置Prometheus为系统服务

为了让Prometheus能够开机自启并方便管理,将其配置为系统服务:

  1. 创建系统服务配置文件

    bash 复制代码
    vim /etc/systemd/system/prometheus.service
  2. 在文件中添加以下内容

    ini 复制代码
    [Unit]
    Description=Prometheus
    After=network-online.target
    
    [Service]
    User=prometheus
    Restart=on-failure
    ExecStart=/usr/local/prometheus/prometheus --storage.tsdb.path=/usr/local/prometheus/data/ --config.file=/usr/local/prometheus/prometheus.yml
    
    [Install]
    WantedBy=multi-user.target

3.3 创建数据目录并修改配置文件

  1. 创建数据存储目录并设置权限

    bash 复制代码
    # 创建数据目录
    mkdir -p /usr/local/prometheus/data/
    # 进入Prometheus安装目录
    cd /usr/local/prometheus
    # 创建prometheus用户
    useradd prometheus
    # 修改目录属主,确保权限正确
    chown -R prometheus.prometheus ./*
  2. 修改Prometheus配置文件,添加ES监控任务
    编辑prometheus.yml配置文件,新增一个job用于拉取ES监控数据:

    bash 复制代码
    vim /usr/local/prometheus/prometheus.yml

    在配置文件中添加以下内容:

    yaml 复制代码
    - job_name: 'es'
        file_sd_configs:
          - files: ["/usr/local/prometheus/conf.d/es.json"]
            refresh_interval: 15s
  3. 创建ES目标节点配置文件

    bash 复制代码
    # 创建配置目录
    mkdir /usr/local/prometheus/conf.d
    # 编辑目标节点配置文件
    vim /usr/local/prometheus/conf.d/es.json

    添加ES节点的exporter地址及标签信息:

    json 复制代码
    [
      {
        "targets": [
          "192.168.184.152:9115"
        ],
        "labels": {
              "servicename": "ES",
              "env": "Prod",
              "hostname": "es-02"
        }
      }
    ]

3.4 启动Prometheus并验证

bash 复制代码
# 启动Prometheus服务
systemctl start prometheus
# 验证服务是否启动成功
ps -ef | grep prometheus

3.5 查看Prometheus监控状态

  1. 访问Prometheus Web界面:在浏览器中输入http://192.168.184.152:9090

  2. 查看目标节点状态:点击菜单栏的Status -> Target health,可查看es任务下的节点是否处于UP状态。

  3. 验证监控指标:在查询框中输入指标名称(如elasticsearch_cluster_health_status),点击Execute,可查看具体的指标数据。

四、部署Grafana实现可视化

Prometheus仅能提供指标查询功能,而Grafana可以将指标转化为直观的图表,接下来完成Grafana的部署与配置。

4.1 安装Grafana

选择官方稳定版本(本文使用v10.2.3),通过yum命令快速安装:

bash 复制代码
yum install -y https://dl.grafana.com/oss/release/grafana-10.2.3-1.x86_64.rpm

4.2 启动Grafana并登录

bash 复制代码
# 启动Grafana服务
systemctl start grafana-server.service
# 验证服务是否启动
ps -ef | grep grafana

在浏览器中输入http://192.168.184.152:3000访问Grafana Web界面,默认用户名和密码均为admin。登录后可根据提示修改密码,也可选择跳过。

4.3 配置Prometheus数据源

Grafana需要对接Prometheus获取数据,配置步骤如下:

  1. 登录Grafana后,点击菜单栏的Add your first data source

  2. 在数据源列表中选择Prometheus

  3. 在配置页面中,填写Prometheus的访问地址(如http://192.168.184.152:9090),其他配置保持默认。

  4. 点击页面底部的Save & Test,若提示Data source is working,则表示数据源配置成功。

4.4 导入ES监控Dashboard

Grafana社区提供了丰富的预置Dashboard模板,本文使用模板ID 14191(Elasticsearch Overview),配置步骤如下:

  1. 点击菜单栏的Dashboards -> Import

  2. Import via grafana.com输入框中填写14191,点击Load

  3. 在模板配置页面,选择已配置的Prometheus数据源,点击Import

4.5 查看ES监控数据

导入Dashboard后,即可进入监控面板,查看ES的集群健康状态、节点资源使用率、索引性能等核心指标的可视化图表,实现对ES集群的实时监控。

五、总结

通过elasticsearch_exporter+Prometheus+Grafana的组合,我们搭建了一套完整的ES监控体系。该方案不仅能实时采集ES的核心监控指标,还能通过可视化图表直观展示系统状态,帮助运维人员快速发现并定位问题。在实际生产环境中,还可以根据业务需求,自定义监控告警规则,进一步提升系统的稳定性与可维护性。

相关推荐
Java 码思客1 天前
【ElasticSearch从入门到架构师】第3章:ES 核心基础概念(架构师必备底层认知)
大数据·elasticsearch·jenkins
徐寿春1 天前
什么是 Elasticsearch 倒排索引
大数据·elasticsearch·搜索引擎
SuperArc19992 天前
Grafana相关数据可视化平台基础教程-序言
运维·信息可视化·数据分析·grafana
小黑蛋学java2 天前
Nginx 接口耗时 Prometheus + Grafana 监控实施方案
运维·nginx·负载均衡·grafana·prometheus
Java 码思客2 天前
【ElasticSearch从入门到架构师】第1章:ElasticSearch 核心认知与行业定位
大数据·elasticsearch·搜索引擎
Adorable老犀牛2 天前
nginx_exporter:Prometheus 监控 Nginx 基础指标
运维·nginx·prometheus
serve the people2 天前
Elasticsearch(5) i want to monitor the es health from a http api
大数据·http·elasticsearch
成为你的宁宁3 天前
【基于 Prometheus Operator 实现 K8s 环境下 Redis Cluster 集群监控部署】
redis·kubernetes·prometheus
Taerge01103 天前
Doris, StarRocks, ClickHouse, Hologres, ES 对比,选型建议
大数据·clickhouse·elasticsearch
serve the people3 天前
Elasticsearch(1) could you tell me how to use es if i am a beginner
大数据·elasticsearch·jenkins