Simple Log Service (SLS) は、Elasticsearch DSL クエリを SLS インデックスクエリおよび SQL 分析クエリに変換する Elasticsearch 互換 API を提供します。このトピックでは、互換性の原理、サポートされる API 操作、およびサポートされる DSL 構文について説明します。
本ドキュメントは Alibaba Cloud の専有情報です。Alibaba Cloud サービスとサードパーティ製品との連携について説明しており、サードパーティ企業または製品の名称を参照する場合があります。
互換性の原理
Elasticsearch は、Apache Lucene をベースとしたオープンソースの分散検索・分析エンジンです。Elasticsearch から SLS へ移行する際、ワークフローの調整や上流・下流のプログラムの変更が必要になる場合があります。SLS は、この移行を簡素化するために Elasticsearch 互換 API を提供します。
この API は、Elasticsearch DSL クエリを SLS のインデックスクエリおよび SQL 分析クエリに変換し、結果を Elasticsearch API 形式で返します。
-
Elasticsearch 互換 API は、Elasticsearch 7.10 仕様に基づいています。
-
Elasticsearch 互換 API は標準 Logstore のみをサポートしており、少なくとも 1 つのフィールドインデックスを作成する必要があります。
Elasticsearch 互換 API エンドポイント
エンドポイント形式は https://${project}.${sls-endpoint}/es/ です。例: https://etl-guangzhou.cn-guangzhou.log.aliyuncs.com/es/。${project} はプロジェクト名、${sls-endpoint} は SLS エンドポイントです。詳細については、「エンドポイント」をご参照ください。
サポートされる Elasticsearch API 操作
Elasticsearch 互換 API は、以下の操作をサポートしています。
|
リクエストメソッド |
API パス |
説明 |
|
Post |
/${index}/_search |
指定されたインデックスをクエリします。インデックスは、 |
|
Post |
/${index}/_async_search |
バッチクエリを実行します。 |
|
Post |
/_msearch |
バッチクエリを実行します。 |
|
Post |
/${index}/_bulk |
指定されたインデックスにデータを書き込みます。 重要
_bulk 操作はデータの書き込みのみをサポートし、データの更新はサポートしていません。 |
|
Get |
/${index}/_mapping |
指定されたインデックスのマッピングを取得します。 |
サポートされる Elasticsearch DSL
Elasticsearch 互換 API は、以下の Elasticsearch DSL をサポートしています。
クエリ関連の DSL
|
DSL |
説明 |
|
bool |
ブール演算を実行します。 |
|
match_all |
すべてのログに一致します。 |
|
match |
フィールド値に一致します。 |
|
match_phrase |
フレーズに一致します。 SQL LIKE 句に変換されます。インデックス化されたフィールドのみを返します。 |
|
multi_match |
複数のフィールドに一致します。 |
|
prefix |
プレフィックスクエリを実行します。 |
|
range |
範囲クエリを実行します。 |
|
term |
タームクエリを実行します。 SLS インデックスクエリ構文に変換されます。 |
|
terms |
複数のタームに対するクエリを実行します。 SLS インデックスクエリ構文に変換されます。 |
|
wildcard |
ワイルドカードパターンに一致します。 SLS SQL 分析構文に変換されます。 |
|
regexp |
正規表現に一致します。 SQL regexp_like 構文に変換されます。インデックス化されたフィールドのみを返します。 |
|
exists |
フィールドが存在するかどうかを確認します。 |
|
ids |
ID フィールドをクエリします。 |
集約関連の DSL
|
カテゴリ |
DSL |
説明 |
|
グループ統計 |
Date histogram |
|
|
Histogram |
数値間隔でグループ統計を行います。 |
|
|
Range |
数値範囲でグループ統計を行います。 |
|
|
Terms |
フィールドの一意の値でグループ統計を行います。 |
|
|
Filter |
単一のフィルタ条件でグループ統計を行います。 |
|
|
Filters |
複数のフィルタ条件でグループ統計を行います。 |
|
|
メトリック統計 |
Min |
最小値を計算します。 |
|
Max |
最大値を計算します。 |
|
|
Avg |
平均値を計算します。 |
|
|
Sum |
合計を計算します。 |
|
|
Count |
カウントを計算します。 |
|
|
Cardinality |
一意の値の数を計算します。 |
|
|
Percentiles |
パーセンタイルを計算します。 |
|
|
返されたログ |
トップヒット |
グループごとに上位の一致ログを返します。 |
標準 Elasticsearch との違い
-
Elasticsearch 互換 API は、データの更新をサポートしていません。
-
Elasticsearch 互換 API は、スクリプトベースのクエリをサポートしていません。
-
単一の Logstore はペタバイト規模のデータをサポートするため、インデックスのロールオーバーは不要です。
-
インデックスは自動的には作成されません。API またはコンソールを通じて作成してください。インデックスの作成
-
以下のフィールドは、Elasticsearch DSL で特定のマッピングに対応します。
Elasticsearch
SLS
説明
@timestamp__time__クエリでは、
@timestampフィールドは Simple Log Service の__time__フィールドに対応します。_idなし
Simple Log Service データに
_idフィールドが存在する場合、そのフィールドにマッピングされます。_idフィールドが存在しない場合、uuidまたは_pack_metaが自動的に入力されます。
RAM 権限付与
以下のいずれかのアクセスポリシーを使用して、Resource Access Management (RAM) ユーザーに Elasticsearch 互換 API のクエリ権限および書き込み権限を付与してください。
-
システムポリシー:設定が簡単です。
-
カスタムポリシー:きめ細かい権限を提供しますが、設定が複雑です。
シンプルな権限付与
システムポリシーを使用して、RAM ユーザーに Elasticsearch 互換 API のクエリ権限および書き込み権限を付与してください。RAM ユーザーの権限を管理する
|
システムポリシー名 |
クエリ権限 |
書き込み権限 |
|
AliyunLogFullAccess |
あり |
あり |
|
AliyunLogReadOnlyAccess |
あり |
なし |
カスタムポリシー
きめ細かい権限を設定するには、カスタムポリシーを使用してください。カスタムポリシーを作成する RAM ユーザーの権限を管理する
-
Elasticsearch 互換 API のクエリ権限および書き込み権限を付与する場合
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "log:GetIndex", "log:ListLogStores", "log:GetLogStoreHistogram", "log:GetLogstoreLogs", "log:GetLogStoreContextLogs", "log:GetCursorOrData", "log:GetLogstore", "log:PostLogStoreLogs" ], "Resource": "acs:log:*:*:project/*" } ] } -
Elasticsearch 互換 API のクエリ権限のみを付与する場合
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "log:GetIndex", "log:ListLogStores", "log:GetLogStoreHistogram", "log:GetLogstoreLogs", "log:GetLogStoreContextLogs", "log:GetCursorOrData", "log:GetLogstore" ], "Resource": "acs:log:*:*:project/*" } ] } -
Elasticsearch 互換 API の書き込み権限のみを付与する場合
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "log:PostLogStoreLogs" ], "Resource": "acs:log:*:*:project/*" } ] }