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.
{
"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"
}{
"status" : "success",
"data" : [
"__name__",
"instance",
"job"
]
}
{
"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" : ""
}
]
}
}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
remote_write:
- url: "http://127.0.0.1:9200/_time_stream/prom_write/prom_index"
basic_auth:
username: elastic
password: xxxxPrometheus 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}/queryCatatan 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_rangeCatatan 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}/seriesCatatan 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}/labelsCatatan 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>/valuesCatatan 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}/metadataCatatan 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
| Ekspresi | Tipe | Didukung atau tidak | Deskripsi |
| powOp | binaryOperator | Ya | Pangkat |
| unaryOp | binaryOperator | Ya | Positif dan negatif |
| multOp | binaryOperator | Ya | Perkalian, pembagian, dan modulo |
| addOp | binaryOperator | Ya | Penambahan dan pengurangan |
| compareOp | binaryOperator | Ya | Perbandingan (==, >=, >, <=, <, dan !=) |
| andUnlessOp | binaryOperator | Ya | Operasi set (and, or, dan unless) |
| orOp | binaryOperator | Ya | Operasi set (or) |
| function | vector | Ya | Fungsi |
| aggregation | vector | Ya | Operasi agregasi |
| instantSelector | vector | Ya | Pemilih instan |
| matrixSelector | vector | Ya | Pemilih vektor |
| offset | vector | Ya | Offset |
| literal | vector | Ya | Konstanta |
| labelMatcher | vector | Ya | Pencocokan label |
| grouping | group | Tidak | Agregasi grup, termasuk on, ignoring, group_left, dan group_right |
Dukungan untuk operator agregasi
| Operator agregasi | Didukung 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
| Fungsi | Didukung 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 |