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的结合方式如下图所示。
原理说明如下:
- Prometheus收集各个Exporter的数据。
- Prometheus通过remote write的方式将收集的数据同步到Elasticsearch。
- 用户通过Kibana和Grafana查看Prometheus同步到Elasticsearch中的数据。说明 在使用Grafana访问Elasticsearch中的数据时,除了可以使用原生的Elasticsearch DataSource,还可以使用Prometheus的DataSource直接访问Elasticsearch数据,并使用PromQL来查看指标数据。
前提条件
已创建阿里云Elasticsearch实例,且实例版本为通用商业版7.16及以上、内核版本为1.7.0及以上,或者实例版本为通用商业版7.10、内核版本为1.8.0及以上。具体操作请参见创建阿里云Elasticsearch实例。
操作流程
步骤一:环境准备
- 创建通用商业版7.16版本的阿里云Elasticsearch实例。具体操作请参见创建阿里云Elasticsearch实例。
- 创建一个ECS实例,该实例要与步骤一中创建的Elasticsearch实例在相同专有网络下,且选择Linux操作系统。创建ECS实例的具体操作,请参见自定义购买实例。该ECS实例用来访问阿里云Elasticsearch实例,并部署Prometheus和Grafana,实现阿里云Elasticsearch与Prometheus和Grafana的结合。
- 创建一个接收Prometheus数据的Elasticsearch TimeStream索引。
步骤二:下载并启动node_exporter
node_exporter用于收集各种与硬件和内核相关的指标,并提供给Prometheus进行读取,详细信息请参见node_exporter。
- 连接ECS实例。具体操作请参见通过密码或密钥认证登录Linux实例。说明 本文档以普通用户权限为例。
- 下载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
- 解压安装包并启动node_exporter。
tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz cd node_exporter-1.3.1.linux-amd64 ./node_exporter
步骤三:下载、配置并启动Prometheus
- 连接ECS实例。具体操作请参见通过密码或密钥认证登录Linux实例。
- 在根目录下载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
- 解压Prometheus安装包。
tar xvfz prometheus-2.36.2.linux-amd64.tar.gz
- 在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账号的密码在创建实例时设定,如果忘记可重置,重置密码的注意事项和操作步骤请参见重置实例访问密码。
- url:访问TimeStream索引的URL,格式为:http://<Elasticsearch实例的公网或私网访问地址>:9200/_time_stream/prom_write/<yourTimeStreamIndex>。
- 启动Prometheus。
./prometheus
- 验证Prometheus数据是否已经同步到Elasticsearch的TimeStream索引中。在Elasticsearch的Kibana控制台中,执行以下命令进行验证:
- 查看prom_index索引是否已经有数据。
GET _cat/indices/prom_index?v&s=i
预期结果如下。 - 确认是否能查询到数据并查看数据内容。
GET prom_index/_search
预期结果如下。
- 查看prom_index索引是否已经有数据。
步骤四:下载、启动并配置Grafana Dashboard
- 连接ECS实例。具体操作请参见通过密码或密钥认证登录Linux实例。
- 在根目录下载Grafana安装包。本示例以Grafana 9.0.2版本为例,下载命令如下。
cd ~ wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.0.2.linux-amd64.tar.gz
- 解压Grafana安装包并启动。
tar xvfz grafana-enterprise-9.0.2.linux-amd64.tar.gz cd grafana-9.0.2 ./bin/grafana-server
- 在浏览器中输入Grafana的访问地址
http://<ECS的公网IP地址>:3000
,进入Grafana登录页面,输入用户名和密码进入Grafana控制台。 - 在Grafana中,创建Prometheus的DataSource。
- 在Grafana中,创建展示Prometheus数据源的Dashboard。
- 在Grafana中,导入node_exporter自带的Grafana Dashboard,并配置Prometheus数据源,生成指标监控Dashboard。