全部产品
Search
文档中心

Elasticsearch:Integrasi aliyun-timestream dengan API Prometheus

更新时间:Jul 02, 2025

Alibaba Cloud Elasticsearch menyediakan plugin aliyun-timestream untuk meningkatkan penyimpanan dan penggunaan data deret waktu. Plugin ini memungkinkan Anda menjalankan pernyataan Prometheus Query Language (PromQL) untuk menanyakan data di Elasticsearch. Plugin ini juga dapat diintegrasikan secara mulus dengan Prometheus dan Grafana. Topik ini menjelaskan cara menggunakan API Prometheus berdasarkan plugin aliyun-timestream.

Informasi latar belakang

aliyun-timestream adalah plugin yang dikembangkan oleh tim Alibaba Cloud Elasticsearch berdasarkan fitur produk deret waktu dari komunitas Elastic. Plugin ini digunakan untuk meningkatkan kinerja penyimpanan dan penggunaan data deret waktu. aliyun-timestream menggunakan pernyataan Prometheus Querying Language (PromQL) sebagai pengganti bahasa domain-spesifik (DSL) untuk menanyakan data metrik yang tersimpan, membantu menyederhanakan operasi query dan meningkatkan efisiensi query. Plugin ini juga mengurangi biaya penyimpanan. Untuk informasi lebih lanjut, lihat Ikhtisar aliyun-timestream.

Prasyarat

Cluster Elasticsearch yang memenuhi persyaratan versi berikut telah dibuat: Versi cluster adalah V7.10 dan versi kernel cluster adalah V1.8.0 atau lebih baru, atau versi cluster adalah V7.16 atau lebih baru dan versi kernel cluster adalah V1.7.0 atau lebih baru. Untuk informasi tentang cara membuat cluster Elasticsearch, lihat Buat Cluster Alibaba Cloud Elasticsearch.

Deskripsi API Prometheus

Anda dapat menggunakan API Prometheus untuk menanyakan data yang ditulis menggunakan remote write API dari Prometheus atau data dalam indeks deret waktu apa pun.

Jika Anda menggunakan API Prometheus untuk menanyakan data, awalan dan akhiran bidang metrik dan dimensi yang dikembalikan tidak ditampilkan. Jika Anda menggunakan API Prometheus untuk menanyakan data yang ditulis berdasarkan model data deret waktu default, awalan metrics. dari bidang metrik yang dikembalikan tidak ditampilkan, dan awalan labels. dari bidang dimensi yang dikembalikan tidak ditampilkan.

Sebagai contoh, data berikut ditulis menggunakan remote write API dari Prometheus:
{
  "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"
}
Jika Anda menggunakan API Prometheus untuk menanyakan data di atas, awalan labels. dari bidang dimensi yang dikembalikan tidak ditampilkan. Kode berikut memberikan contoh respons menggunakan API /api/v1/labels untuk menanyakan data di atas:
{
  "status" : "success",
  "data" : [
    "__name__",
    "instance",
    "job"
  ]
}
                
Jika Anda menggunakan API Prometheus untuk menanyakan data di atas, awalan metrics. dari bidang metrik yang dikembalikan tidak ditampilkan. Kode berikut memberikan contoh respons menggunakan API /api/v1/metadata untuk menanyakan data di atas:
{
  "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" : ""
      }
    ]
  }
}
Jika Anda menyesuaikan pengaturan saat membuat indeks deret waktu, Anda harus menentukan awalan dan akhiran untuk bidang metrik dan dimensi yang Anda unggah. Jika tidak, ketika Anda menggunakan API Prometheus untuk menanyakan data dalam indeks deret waktu, data sebenarnya akan dikembalikan. Kode berikut memberikan contoh cara menentukan awalan dan akhiran tersebut:
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"
  }
}

Remote write API

Sintaks permintaan

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

Catatan penggunaan

Jika Anda mengonfigurasi parameter remote_write saat menginstal Prometheus, Anda dapat menggunakan Prometheus untuk menyinkronkan data ke Elasticsearch. Kode berikut memberikan contoh konfigurasi:
remote_write:
  - url: "http://127.0.0.1:9200/_time_stream/prom_write/prom_index"
    basic_auth:
     username: elastic
     password: xxxx

Prometheus menggunakan remote write API untuk menulis data ke indeks deret waktu hanya berdasarkan model data deret waktu default di mana awalan bidang dimensi adalah labels. dan awalan bidang metrik adalah metrics..

Instant query API

Sintaks permintaan

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

Catatan penggunaan

Untuk informasi tentang instant query API dari Prometheus, lihat Prometheus Instant Queries.

Range query API

Sintaks permintaan

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

Catatan penggunaan

Untuk informasi tentang range query API dari Prometheus, lihat Prometheus Range Queries.

Series metadata API

Sintaks permintaan

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

Catatan penggunaan

API metadata series dari Prometheus digunakan untuk menanyakan daftar deret waktu. Untuk informasi lebih lanjut tentang API ini, lihat Prometheus Finding Series by Label Matchers.

Label metadata API

Sintaks permintaan

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

Catatan penggunaan

API metadata label dari Prometheus digunakan untuk menanyakan daftar dimensi. Untuk informasi lebih lanjut tentang API ini, lihat Prometheus Getting Label Names.

Label value metadata API

Sintaks permintaan

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

Catatan penggunaan

API metadata nilai label dari Prometheus digunakan untuk menanyakan daftar nilai dimensi. Untuk informasi lebih lanjut tentang API ini, lihat Prometheus Querying Label Values.

Metric metadata API

Sintaks permintaan

GET /_time_stream/prom/{index}/metadata

Catatan penggunaan

API metadata metrik dari Prometheus digunakan untuk menanyakan daftar metrik. Untuk informasi lebih lanjut tentang API ini, lihat Prometheus Querying Metric Metadata.

Dukungan aliyun-timestream untuk PromQL

Dukungan untuk ekspresi

EkspresiTipeDidukung atau tidakDeskripsi
powOpbinaryOperatorYaPangkat
unaryOpbinaryOperatorYaPositif dan negatif
multOpbinaryOperatorYaPerkalian, pembagian, dan modulo
addOpbinaryOperatorYaPenambahan dan pengurangan
compareOpbinaryOperatorYaPerbandingan (==, >=, >, <=, <, dan !=)
andUnlessOpbinaryOperatorYaOperasi set (and, or, dan unless)
orOpbinaryOperatorYaOperasi set (or)
functionvectorYaFungsi
aggregationvectorYaOperasi agregasi
instantSelectorvectorYaPemilih instan
matrixSelectorvectorYaPemilih vektor
offsetvectorYaOffset
literalvectorYaKonstanta
labelMatchervectorYaPencocokan label
groupinggroupTidakAgregasi grup, termasuk on, ignoring, group_left, dan group_right

Dukungan untuk operator agregasi

Operator agregasiDidukung atau tidak
sum(menghitung jumlah total dimensi)Ya
min(memilih minimum dimensi)Ya
max(memilih maksimum dimensi)Ya
avg(menghitung rata-rata dimensi)Ya
group(semua nilai dalam vektor hasilnya adalah 1)Tidak
stddev(menghitung deviasi standar populasi dimensi)Tidak
stdvar(menghitung varians standar populasi dimensi)Tidak
count(menghitung jumlah elemen dalam vektor)Ya
count_values(menghitung jumlah elemen dengan nilai yang sama)Ya
bottomk(elemen terkecil k berdasarkan nilai sampel)Ya
topk(elemen terbesar k berdasarkan nilai sampel)Ya
quantile(menghitung φ-kuantil (0 ≤ φ ≤ 1) dimensi)Ya

Dukungan untuk fungsi

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