基于TimeStream对接Prometheus+Grafana实现可观测性

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.16及以上、内核版本为1.7.0及以上,或者实例版本为通用商业版7.10、内核版本为1.8.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_exporterremote_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

      预期结果如下。预期结果

    • 确认是否能查询到数据并查看数据内容。

      GET prom_index/_search

      预期结果如下。预期结果2

步骤四:下载、启动并配置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地址列获取。获取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. Settings页签中,配置Prometheus数据源信息。

      配置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查询数据。

      查询数据

    4. 单击右上角的Save,保存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/18601860

      导入Dashboard

    3. 单击Load

    4. 在配置页面选择Prometheus数据源为您已创建的数据源。

      选择Prometheus数据源

    5. 单击Import

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

      指标监控Dashboard

      说明

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

相关文档