Alibaba Cloud Elasticsearch は、時系列データの保存と使用を強化するための aliyun-timestream プラグインを提供しています。このプラグインを使用すると、Prometheus Query Language(PromQL)ステートメントを実行して Elasticsearch のデータをクエリできます。このプラグインは、Prometheus および Grafana とシームレスに統合することもできます。このトピックでは、aliyun-timestream プラグインに基づいて Prometheus API を使用する方法について説明します。
背景情報
aliyun-timestream は、Elastic コミュニティによって提供される時系列製品の機能に基づいて、Alibaba Cloud Elasticsearch チームによって開発されたプラグインです。このプラグインは、時系列データの保存と使用のパフォーマンスを向上させるために使用されます。 aliyun-timestream は、ドメイン固有言語(DSL)ステートメントの代わりに Prometheus Querying Language(PromQL)ステートメントを使用して、保存されているメトリックデータをクエリします。これにより、クエリ操作が簡素化され、クエリ効率が向上します。 aliyun-timestream はストレージコストも削減します。詳細については、aliyun-timestream の概要をご参照ください。
前提条件
次のバージョン要件を満たす Elasticsearch クラスタが作成されていること。クラスタのバージョンが V7.10 で、クラスタのカーネルバージョンが V1.8.0 以降であること、またはクラスタのバージョンが V7.16 以降で、クラスタのカーネルバージョンが V1.7.0 以降であること。Elasticsearch クラスタの作成方法については、Alibaba Cloud Elasticsearch クラスタの作成をご参照ください。
Prometheus API の説明
Prometheus API を使用して、Prometheus のリモート書き込み API を使用して書き込まれたデータ、または任意の時系列インデックスのデータをクエリできます。
Prometheus API を使用してデータをクエリする場合、返されるメトリックフィールドとディメンションフィールドのプレフィックスとサフィックスは表示されません。デフォルトの時系列データモデルに基づいて書き込まれたデータを Prometheus API を使用してクエリする場合、返されるメトリックフィールドのプレフィックス metrics. は表示されず、返されるディメンションフィールドのプレフィックス labels. は表示されません。
{
"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" : [ // scrape_samples_post_metric_relabeling
{
"type" : "gauge",
"help" : "",
"unit" : ""
}
],
"scrape_samples_scraped" : [ // scrape_samples_scraped
{
"type" : "gauge",
"help" : "",
"unit" : ""
}
],
"scrape_duration_seconds" : [ // scrape_duration_seconds
{
"type" : "gauge",
"help" : "",
"unit" : ""
}
],
"scrape_series_added" : [ // scrape_series_added
{
"type" : "gauge",
"help" : "",
"unit" : ""
}
],
"up" : [ // 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" // メトリックのサフィックス
}
}リモート書き込み API
リクエスト構文
POST /_time_stream/prom_write/{index}
---PB data---使用方法
remote_write:
- url: "http://127.0.0.1:9200/_time_stream/prom_write/prom_index"
basic_auth:
username: elastic
password: xxxxPrometheus は、リモート書き込み API を使用して、ディメンションフィールドのプレフィックスが labels. で、メトリックフィールドのプレフィックスが metrics. であるデフォルトの時系列データモデルのみに基づいて、時系列インデックスにデータを書き込みます。
インスタントクエリ API
リクエスト構文
GET /_time_stream/prom/{index}/query
POST /_time_stream/prom/{index}/query使用方法
Prometheus のインスタントクエリ API については、Prometheus インスタントクエリをご参照ください。
範囲クエリ API
リクエスト構文
GET /_time_stream/prom/{index}/query_range
POST /_time_stream/prom/{index}/query_range使用方法
Prometheus の範囲クエリ API については、Prometheus 範囲クエリをご参照ください。
シリーズメタデータ API
リクエスト構文
GET /_time_stream/prom/{index}/series
POST /_time_stream/prom/{index}/series使用方法
Prometheus のシリーズメタデータ API は、時系列のリストをクエリするために使用されます。この API の詳細については、Prometheus finding series by label matchersをご参照ください。
ラベルメタデータ API
リクエスト構文
GET /_time_stream/prom/{index}/labels
POST /_time_stream/prom/{index}/labels使用方法
Prometheus のラベルメタデータ API は、ディメンションのリストをクエリするために使用されます。この API の詳細については、Prometheus getting label namesをご参照ください。
ラベル値メタデータ API
リクエスト構文
GET /_time_stream/prom/{index}/label/<label_name>/values使用方法
Prometheus のラベル値メタデータ API は、ディメンション値のリストをクエリするために使用されます。この API の詳細については、Prometheus querying label valuesをご参照ください。
メトリックメタデータ API
リクエスト構文
GET /_time_stream/prom/{index}/metadata使用方法
Prometheus のメトリックメタデータ API は、メトリックのリストをクエリするために使用されます。この API の詳細については、Prometheus querying metric metadataをご参照ください。
aliyun-timestream による PromQL のサポート
式のサポート
| 式 | タイプ | サポートされているかどうか | 説明 |
| powOp | binaryOperator | はい | べき乗 |
| unaryOp | binaryOperator | はい | 正負 |
| multOp | binaryOperator | はい | 乗算、除算、剰余 |
| addOp | binaryOperator | はい | 加算、減算 |
| compareOp | binaryOperator | はい | 比較(==、>=、>、<=、<、!=) |
| andUnlessOp | binaryOperator | はい | 集合演算(and、or、unless) |
| orOp | binaryOperator | はい | 集合演算(or) |
| function | vector | はい | 関数 |
| aggregation | vector | はい | 集計演算 |
| instantSelector | vector | はい | インスタントセレクタ |
| matrixSelector | vector | はい | ベクトルセレクタ |
| offset | vector | はい | オフセット |
| literal | vector | はい | 定数 |
| labelMatcher | vector | はい | ラベルマッチング |
| grouping | group | いいえ | グループ化集計。on、ignoring、group_left、group_right など |
集計演算子のサポート
| 集計演算子 | サポートされているかどうか |
| sum(ディメンション全体の合計を計算) | はい |
| min(ディメンション全体の最小値を選択) | はい |
| max(ディメンション全体の最大値を選択) | はい |
| avg(ディメンション全体の平均を計算) | はい |
| group(結果のベクトル内のすべての値は 1) | いいえ |
| stddev(ディメンション全体の母集団標準偏差を計算) | いいえ |
| stdvar(ディメンション全体の母集団分散を計算) | いいえ |
| count(ベクトル内の要素数をカウント) | はい |
| count_values(同じ値を持つ要素数をカウント) | はい |
| bottomk(サンプル値で最も小さい k 個の要素) | はい |
| topk(サンプル値で最も大きい k 個の要素) | はい |
| quantile(ディメンション全体の φ 分位数(0 ≤ φ ≤ 1)を計算) | はい |
関数のサポート
| 関数 | サポートされているかどうか |
| 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) | はい |