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索引。
登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。
登录Kibana控制台的具体操作,请参见登录Kibana控制台。
在左侧导航栏,单击图标,然后选择 。
在控制台中,执行
PUT _time_stream/prom_index
命令,创建名称为prom_index的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账号的密码在创建实例时设定,如果忘记可重置,重置密码的注意事项和操作步骤请参见重置实例访问密码。
启动Prometheus。
./prometheus
验证Prometheus数据是否已经同步到Elasticsearch的TimeStream索引中。
在Elasticsearch的Kibana控制台中,执行以下命令进行验证:
查看prom_index索引是否已经有数据。
GET _cat/indices/prom_index?v&s=i
预期结果如下。
确认是否能查询到数据并查看数据内容。
GET prom_index/_search
预期结果如下。
步骤四:下载、启动并配置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控制台的左侧导航栏,选择 。
在Data sources页签,单击Add data source。
在Time series databases列表中,单击Prometheus。
在Settings页签中,配置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角色管理实现用户权限管控。
访问TimeStream索引的用户对应的密码。elastic账号的密码在创建实例时设定,如果忘记可重置,重置密码的注意事项和操作步骤请参见重置实例访问密码。
单击Save&test。
配置成功后,系统提示Data source is working。
在Grafana中,创建展示Prometheus数据源的Dashboard。
在Grafana控制台的左侧导航栏,选择 。
单击Add a new panel。
选择Data source和查询时间,单击Run queries查询数据。
单击右上角的Save,保存Dashboard。
在Grafana中,导入node_exporter自带的Grafana Dashboard,并配置Prometheus数据源,生成指标监控Dashboard。
在Grafana控制台的左侧导航栏,选择 。
在Import via grafana.com文本框中,填写node_exporter的Grafana地址或ID:即https://grafana.com/grafana/dashboards/1860或1860。
单击Load。
在配置页面选择Prometheus数据源为您已创建的数据源。
单击Import。
在Dashboard页面右上角,选择查询时间,查看对应时间段内的指标监控Dashboard。
说明关于Grafana更详细的操作教程,请参见Grafana documentation。