全部產品
Search
文件中心

Elasticsearch:TimeStream整合Prometheus介面

更新時間:Jun 30, 2024

Elasticsearch團隊自研的TimeStream時序引擎增強外掛程式,支援使用PromQL查詢Elasticsearch資料,無縫對接Prometheus+Grafana。本文介紹如何基於Elasticsearch TimeStream使用Prometheus整合介面。

背景資訊

TimeStream是Elasticsearch團隊自研,並結合Elastic社區時序類產品特性共建的時序引擎。Elasticsearch提供的TimeStream時序增強功能外掛程式,最佳化了Elasticsearch在儲存指標資料方面的DSL(Domain-Specific Language)查詢複雜且慢以及儲存成本過高等問題。詳細資料請參見TimeStream時序增強引擎介紹

前提條件

已建立Elasticsearch執行個體,且執行個體版本為通用商業版7.16及以上、核心版本為1.7.0及以上,或者執行個體版本為通用商業版7.10、核心版本為1.8.0及以上。具體操作請參見建立Elasticsearch執行個體

Prometheus API說明

Prometheus API除了可以訪問通過Prometheus Remote Write方式寫入的資料,也可以訪問任意TimeStream索引。

Prometheus API支援去掉返回的指標和維度前尾碼關鍵字。如果使用預設的資料模型,指標首碼metric.會被去掉,維度首碼label.會被去掉。

例如,通過Prometheus Remote Write方式寫入如下資料:
{
  "labels": {
    "instance": "127.0.0.1:9114",
    "job": "elasticsearch"
  },
  "metrics": {
    "up": 0.0,
    "scrape_samples_post_metric_relabeling": 0.0,
    "scrape_samples_scraped": 0.0,
    "scrape_duration_seconds": 4.45999E-4,
    "scrape_series_added": 0.0
  },
  "@timestamp": "1655717638795"
}
Prometheus API返回的維度欄位會去掉首碼labels.,/api/v1/labels介面返回結果如下:
{
  "status" : "success",
  "data" : [
    "__name__",
    "instance",
    "job"
  ]
}
                
Prometheus API返回的指標欄位會去掉首碼metrics.,/api/v1/metadata介面返回結果如下:
{
  "status" : "success",
  "data" : {
    "scrape_samples_post_metric_relabeling" : [
      {
        "type" : "gauge",
        "help" : "",
        "unit" : ""
      }
    ],
    "scrape_samples_scraped" : [
      {
        "type" : "gauge",
        "help" : "",
        "unit" : ""
      }
    ],
    "scrape_duration_seconds" : [
      {
        "type" : "gauge",
        "help" : "",
        "unit" : ""
      }
    ],
    "scrape_series_added" : [
      {
        "type" : "gauge",
        "help" : "",
        "unit" : ""
      }
    ],
    "up" : [
      {
        "type" : "gauge",
        "help" : "",
        "unit" : ""
      }
    ]
  }
}
如果您自訂了資料模型,則需要額外配置前尾碼關鍵字,否則Prometheus API返回的就是實際的資料。配置前尾碼關鍵字的樣本如下:
PUT _time_stream/{name}
{
  "time_stream": {
    "labels_fields": "@labels.*_l",
    "metrics_fields": "@metrics.*_m",
    "label_prefix": "@labels.",
    "label_suffix": "_l",
    "metric_prefix": "@metrics.",
    "metric_suffix": "_m"
  }
}

RemoteWrite介面

API

POST /_time_stream/prom_write/{index}
---PB data---

使用說明

在Prometheus中配置Remote Write,即可將Prometheus資料同步到Elasticsearch,配置樣本如下:
remote_write:
  - url: "http://127.0.0.1:9200/_time_stream/prom_write/prom_index"
    basic_auth:
     username: elastic
     password: xxxx

Prometheus通過Remote Write寫入資料到TimeStream索引,只支援預設的時序資料模型,即維度首碼是label.,指標首碼是metric.

Instant Query介面

API

GET  /_time_stream/prom/{index}/query
POST /_time_stream/prom/{index}/query

使用說明

Prometheus Instant Query介面,詳細資料請參見Prometheus instant queries

Range Query介面

API

GET  /_time_stream/prom/{index}/query_range
POST /_time_stream/prom/{index}/query_range

使用說明

Prometheus Range Query介面,詳細資料請參見Prometheus range queries

Series Metadata介面

API

GET  /_time_stream/prom/{index}/series
POST /_time_stream/prom/{index}/series

使用說明

Prometheus查詢時間軸的介面,詳細資料請參見Prometheus finding series by label matchers

Labels Metadata介面

API

GET  /_time_stream/prom/{index}/labels
POST /_time_stream/prom/{index}/labels

使用說明

Prometheus查詢維度(label)列表的介面,詳細資料請參見Prometheus getting label names

Label Values Metadata介面

API

GET /_time_stream/prom/{index}/label/<label_name>/values

使用說明

Prometheus查詢維度對應values列表的介面,詳細資料請參見Prometheus querying label values

Metric Metadata介面

API

GET /_time_stream/prom/{index}/metadata

使用說明

Prometheus查詢指標(Metrics)列表的介面,詳細資料請參見Prometheus querying metric metadata

TimeStream PromQL支援情況

運算式支援情況

運算式類型是否支援說明
powOpbinaryOperator冪乘
unaryOpbinaryOperator正、負
multOpbinaryOperator乘、除、模數
addOpbinaryOperator加、減
compareOpbinaryOperator比較(==,>=, >, <=, <, !=)
andUnlessOpbinaryOperator集合運算(and、or、unless)
orOpbinaryOperator集合運算(or)
functionvector函數
aggregationvector彙總運算
instantSelectorvector瞬時選取器
matrixSelectorvector向量選取器
offsetvector位移量
literalvector常量
labelMatchervector標籤匹配
groupinggroupgroup彙總,包括on、ignoring、group_left、group_right

Aggregation operator支援情況

Aggregation operator是否支援
sum(calculate sum over dimensions)
min(select minimum over dimensions)
max(select maximum over dimensions)
avg(calculate the average over dimensions)
group(all values in the resulting vector are 1)
stddev(calculate population standard deviation over dimensions)
stdvar(calculate population standard variance over dimensions)
count(count number of elements in the vector)
count_values(count number of elements with the same value)
bottomk(smallest k elements by sample value)
topk(largest k elements by sample value)
quantile(calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions)

Function支援情況

Function是否支援
abs(v instant-vector)
absent(v instant-vector)
absent_over_time(v range-vector)
ceil(v instant-vector)
changes(v range-vector)
clamp(v instant-vector, min scalar, max scalar)
clamp_max(v instant-vector, max scalar)
clamp_min(v instant-vector, min scalar)
day_of_month(v=vector(time()) instant-vector)
day_of_week(v=vector(time()) instant-vector)
days_in_month(v=vector(time()) instant-vector)
delta(v range-vector)
deriv(v range-vector)
exp(v instant-vector)
floor(v instant-vector)
histogram_quantile(φ scalar, b instant-vector)
holt_winters(v range-vector, sf scalar, tf scalar)
hour(v=vector(time()) instant-vector)
idelta(v range-vector)
increase(v range-vector)
irate(v range-vector)
label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)
label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)
ln(v instant-vector)
log2(v instant-vector)
log10(v instant-vector)
minute(v=vector(time()) instant-vector)
month(v=vector(time()) instant-vector)
predict_linear(v range-vector, t scalar)
rate(v range-vector)
resets(v range-vector)
round(v instant-vector, to_nearest=1 scalar)
scalar(v instant-vector)
sgn(v instant-vector)
sort(v instant-vector)
sort_desc()
sqrt(v instant-vector)
time()
timestamp(v instant-vector)
vector(s scalar)
year(v=vector(time()) instant-vector)
avg_over_time(range-vector)
min_over_time(range-vector)
max_over_time(range-vector)
sum_over_time(range-vector)
count_over_time(range-vector)
quantile_over_time(scalar, range-vector)
stddev_over_time(range-vector)
stdvar_over_time(range-vector)
last_over_time(range-vector)
present_over_time(range-vector)
acos(v instant-vector)
acosh(v instant-vector)
asin(v instant-vector)
asinh(v instant-vector)
atan(v instant-vector)
atanh(v instant-vector)
cos(v instant-vector)
cosh(v instant-vector)
sin(v instant-vector)
sinh(v instant-vector)
tan(v instant-vector)
tanh(v instant-vector)
deg(v instant-vector)
pi()
rad(v instant-vector)