全部產品
Search
文件中心

Elasticsearch:基於TimeStream對接Prometheus+Grafana實現可觀測性

更新時間:Jun 30, 2024

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

相關文檔