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。