全部产品
Search
文档中心

检索分析服务Elasticsearch版:基于TimeStream对接Prometheus+Grafana实现可观测性

更新时间:Aug 19, 2026

TimeStream是阿里云Elasticsearch团队自研,并结合Elastic社区时序类产品特性共建的时序引擎。阿里云Elasticsearch支持无缝对接Prometheus+Grafana,支持Prometheus Query相关的API,可以直接将TimeStream索引作为Grafana的Prometheus数据源使用,能够提高时序指标数据存储与查询分析的性能,同时节约成本。本文介绍如何基于ElasticSearch TimeStream时序引擎对接Prometheus+Grafana实现云原生的可观测性。

背景信息

Prometheus本地存储会遇到以下问题:

  • 存储无副本,本地集群机器宕机后,Prometheus将无法访问。

  • 单机存储,随着数据量不断上涨,可能遇到硬件瓶颈,无法横向扩容。

  • 数据无备份能力,硬盘损坏后,数据可能无法恢复。

  • 本地磁盘存储成本高,无法进行冷热分离存储。

因此在Prometheus的高可用方案中,在存储侧,推荐使用分布式、高可用的远端存储。阿里云Elasticsearch的TimeStream引擎提供了对Prometheus远端存储和查询的能力,基于Elasticsearch的分布式、弹性、高可用、备份和冷热分层存储等能力,可以作为Prometheus远端存储的最佳选择之一。

阿里云Elasticsearch与Prometheus和Grafana的结合方式如下图所示。ES+Prometheus+Grafana架构

原理说明如下:

  1. Prometheus收集各个Exporter的数据。

  2. Prometheus通过remote write的方式将收集的数据同步到Elasticsearch。

  3. 用户通过Kibana和Grafana查看Prometheus同步到Elasticsearch中的数据。

    说明

    在使用Grafana访问Elasticsearch中的数据时,除了可以使用原生的Elasticsearch DataSource,还可以使用Prometheus的DataSource直接访问Elasticsearch数据,并使用PromQL来查看指标数据。

前提条件

已创建阿里云Elasticsearch实例,且实例版本为7.10(内核版本为1.8.0及以上)或7.16及以上(内核版本为1.7.0及以上)。具体操作请参见创建阿里云Elasticsearch实例。

操作流程

  1. 步骤一:环境准备

  2. 步骤二:下载并启动node_exporter

  3. 步骤三:下载、配置并启动Prometheus

  4. 步骤四:下载、启动并配置Grafana Dashboard

步骤一:环境准备

  1. 创建通用商业版7.16版本的阿里云Elasticsearch实例。

    具体操作请参见创建阿里云Elasticsearch实例。

  2. 创建一个ECS实例,该实例要与步骤一中创建的Elasticsearch实例在相同专有网络下,且选择Linux操作系统。

    创建ECS实例的具体操作,请参见自定义购买实例。该ECS实例用来访问阿里云Elasticsearch实例,并部署Prometheus和Grafana,实现阿里云Elasticsearch与Prometheus和Grafana的结合。

  3. 创建一个接收Prometheus数据的Elasticsearch TimeStream索引。

    1. 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。

      登录Kibana控制台的具体操作,请参见登录Kibana控制台。

    2. 在左侧导航栏,单击展开图标图标,然后选择Management > 开发工具。

    3. 在控制台中,执行PUT _time_stream/prom_index命令,创建名称为prom_index的TimeStream索引。

步骤二:下载并启动node_exporter

node_exporter用于收集各种与硬件和内核相关的指标,并提供给Prometheus进行读取,详细信息请参见node_exporter。

  1. 连接ECS实例。

    具体操作请参见通过密码或密钥认证登录Linux实例。

    说明

    本文档以普通用户权限为例。

  2. 下载node_exporter安装包。

    本示例以node_exporter 1.3.1版本为例,下载命令如下。

    wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
  3. 解压安装包并启动node_exporter。

    tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
    cd node_exporter-1.3.1.linux-amd64
    ./node_exporter

步骤三:下载、配置并启动Prometheus

  1. 连接ECS实例。

  2. 在根目录下载Prometheus安装包。

    本示例以Prometheus 2.36.2版本为例,下载命令如下。

    cd ~
    wget https://github.com/prometheus/prometheus/releases/download/v2.36.2/prometheus-2.36.2.linux-amd64.tar.gz
  3. 解压Prometheus安装包。

    tar xvfz prometheus-2.36.2.linux-amd64.tar.gz
  4. 在Prometheus目录的prometheus.yml文件中,配置node_exporter和remote_write。

    cd prometheus-2.36.2.linux-amd64
    vim prometheus.yml

    配置示例如下。

    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
    
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    
        static_configs:
        - targets: ['localhost:9090']
    
      #配置node_exporter
      - job_name: "node"
        static_configs:
        - targets: ["127.0.0.1:9100"]
    
    #配置remote_write,确保Prometheus能够访问Elasticsearch集群,即网络是通的。
    remote_write:
      - url: "http://xxx:9200/_time_stream/prom_write/prom_index"
        basic_auth:
         username: elastic
         password: xxxx

    参数

    说明

    node_exporter

    配置node_exporter的连接信息。targets需要配置为node_exporter的访问地址:端口。

    由于本示例使用同一个ECS实例部署Prometheus和node_exporter,因此node_exporter的访问地址使用本地访问IP地址127.0.0.1,端口使用默认的9100端口。

    remote_write

    配置Elasticsearch实例的TimeStream索引的连接信息。需要配置以下基础参数,更多高级参数请参见remote_write。

    • url:访问TimeStream索引的URL,格式为:http://<Elasticsearch实例的公网或私网访问地址>:9200/_time_stream/prom_write/<yourTimeStreamIndex>。

      说明
      • Elasticsearch实例的公网或私网访问地址:可在Elasticsearch实例的基本信息页面获取。如果Prometheus所部署的ECS实例与Elasticsearch实例在同一VPC下,可使用私网访问地址(本文以此为例);如果不在同一VPC下,需要使用公网访问地址,并且要配置公网访问白名单,详细信息请参见配置实例公网或私网访问白名单。

      • <yourTimeStreamIndex>:用于接收Prometheus数据的Elasticsearch TimeStream索引,该索引需要提前创建,本文以prom_index索引为例。

    • username:访问TimeStream索引的用户名,默认为管理员账号elastic。您也可以使用自建用户,但需确保自建用户具有访问与操作TimeStream索引的权限,详细信息请参见通过Elasticsearch X-Pack角色管理实现用户权限管控。

    • password:访问TimeStream索引的用户对应的密码。elastic账号的密码在创建实例时设定,如果忘记可重置,重置密码的注意事项和操作步骤请参见重置实例访问密码。

  5. 启动Prometheus。

    ./prometheus
  6. 验证Prometheus数据是否已经同步到Elasticsearch的TimeStream索引中。

    在Elasticsearch的Kibana控制台中,执行以下命令进行验证:

    • 查看prom_index索引是否已经有数据。

      GET _cat/indices/prom_index?v&s=i

      预期结果如下。

      PUT _time_stream/prom_index
      
      GET _cat/indices/prom_index?v&s=i
      
      health status index                              uuid                pri rep docs.count docs.deleted store.size pri.store.size
      green  open   .ds-prom_index-2022.06.29-000001 U-y2z4j4RyWlKmxxx   1   1        178            0      5.6kb          226b
    • 确认是否能查询到数据并查看数据内容。

      GET prom_index/_search

      预期结果如下。

      PUT _time_stream/prom_index
      GET _cat/indices/prom_index?v&s=i
      GET prom_index/_search
      
      {
        "took" : 354,
        "timed_out" : false,
        "_shards" : {
          "total" : 1,
          "successful" : 1,
          "skipped" : 0,
          "failed" : 0
        },
        "hits" : {
          "total" : {
            "value" : 3036,
            "relation" : "eq"
          },
          "max_score" : 1.0,
          "hits" : [
            {
              "_index" : ".ds-prom_index-2022.06.29-000001",
              "_type" : "_doc",
              "_id" : "kBXXroEBMnT0XiRApR78",
              "_score" : 1.0,
              "_source" : {
                "labels" : {
                  "instance" : "localhost:9090",
                  "job" : "prometheus"
                },
                "metrics" : {
                  "prometheus_remote_storage_exemplars_in_total" : 0.0,
                  "prometheus_target_scrape_pools_failed_total" : 0.0,
                  "prometheus_tsdb_data_replay_duration_seconds" : 6.66077E-4,
                  "prometheus_tsdb_wal_completed_pages_total" : 1.0,
                  "prometheus_tsdb_lowest_timestamp" : 1.656495558477E12,
                  "prometheus_tsdb_head_gc_duration_seconds_count" : 0.0,
                  "prometheus_tsdb_out_of_bound_samples_total" : 0.0,
                  "prometheus_tsdb_isolation_high_watermark" : 30.0,
                  "prometheus_tsdb_storage_blocks_bytes" : 0.0,
                  "up" : 1.0,
                  "go_gc_duration_seconds_sum" : 9.66942E-4,
                  "process_cpu_seconds_total" : 2.96,
                  "prometheus_tsdb_wal_writes_failed_total" : 0.0,
                  "prometheus_tsdb_head_max_time_seconds" : 1.656495768E9,
                  "prometheus_tsdb_head_chunks_created_total" : 455.0,
                  "prometheus_sd_kuma_fetch_duration_seconds_sum" : 0.0
                }
              }
            }
          ]
        }
      }

步骤四:下载、启动并配置Grafana Dashboard

  1. 连接ECS实例。

  2. 在根目录下载Grafana安装包。

    本示例以Grafana 9.0.2版本为例,下载命令如下。

    cd ~
    wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.0.2.linux-amd64.tar.gz
  3. 解压Grafana安装包并启动。

    tar xvfz grafana-enterprise-9.0.2.linux-amd64.tar.gz
    cd grafana-9.0.2
    ./bin/grafana-server
  4. 在浏览器中输入Grafana的访问地址http://<ECS的公网IP地址>:3000,进入Grafana登录页面,输入用户名和密码进入Grafana控制台。

    • 首次登录Grafana控制台需要使用默认用户名和密码,均为admin。登录后,系统会提示修改密码,密码修改完成后即可进入Grafana控制台。

    • ECS的公网IP地址:进入ECS管理控制台,在对应实例的IP地址列获取。

    • Grafana的默认访问端口号为3000,在浏览器中访问3000端口时,需要配置ECS的入方向的安全组规则,设置目的为3000,源为您客户端的IP地址。详细信息请参见添加安全组规则。

  5. 在Grafana中,创建Prometheus的DataSource。

    1. 在Grafana控制台的左侧导航栏,选择设置图标 > Data sources。

    2. 在Data sources页签,单击Add data source。

    3. 在Time series databases列表中,单击集群Prometheus自身监控。

    4. 在设置页签中,配置集群Prometheus自身监控数据源信息。

      本文中必须配置的参数说明如下。

      参数

      说明

      URL

      访问TimeStream索引的URL,格式为:http://<Elasticsearch实例的公网或私网访问地址>:9200/_time_stream/prom/<yourTimeStreamIndex>。

      说明
      • Elasticsearch实例的公网或私网访问地址:可在Elasticsearch实例的基本信息页面获取。如果Prometheus所部署的ECS实例与Elasticsearch实例在同一VPC下,可使用私网访问地址(本文以此为例);如果不在同一VPC下,需要使用公网访问地址,并且要配置公网访问白名单,详细信息请参见配置实例公网或私网访问白名单。

      • <yourTimeStreamIndex>:用于接收Prometheus数据的Elasticsearch TimeStream索引,该索引需要提前创建,本文以prom_index索引为例。

      Basic auth

      是否开启Elasticsearch实例的Basic auth认证。开启后需要配置访问Elasticsearch实例的用户名和密码。

      User

      访问TimeStream索引的用户名,默认为管理员账号elastic。您也可以使用自建用户,但需确保自建用户具有访问与操作TimeStream索引的权限,详细信息请参见通过Elasticsearch X-Pack角色管理实现用户权限管控。

      Password

      访问TimeStream索引的用户对应的密码。elastic账号的密码在创建实例时设定,如果忘记可重置,重置密码的注意事项和操作步骤请参见重置实例访问密码。

    5. 单击Save&test。

      配置成功后,系统提示Data source is working。

  6. 在Grafana中,创建展示Prometheus数据源的Dashboard。

    1. 在Grafana控制台的左侧导航栏,选择Dashboard > New dashboard。

    2. 单击Add a new panel。

    3. 选择Data source和查询时间,单击Run queries查询数据。

      例如,Data source 选择 test_datastream,Metric 选择 go_gc_duration_seconds,时间范围选择 Last 2 days。

    4. 单击右上角的保存,保存Dashboard。

  7. 在Grafana中,导入node_exporter自带的Grafana Dashboard,并配置Prometheus数据源,生成指标监控Dashboard。

    1. 在Grafana控制台的左侧导航栏,选择Dashboard > Import。

    2. 在Import via grafana.com文本框中,填写node_exporter的Grafana地址或ID:即https://grafana.com/grafana/dashboards/1860或1860。

    3. 单击Load。

    4. 在配置页面选择集群Prometheus自身监控数据源为您已创建的数据源。

    5. 单击Import。

    6. 在Dashboard页面右上角,选择查询时间,查看对应时间段内的指标监控Dashboard。

      指标监控Dashboard

      说明

      关于Grafana更详细的操作教程,请参见Grafana documentation。

相关文档