このトピックでは、Simple Log ServiceとElasticsearchの互換性について説明します。 このトピックでは、Simple Log Serviceと互換性のあるElasticsearch API操作とElasticsearchドメイン固有言語 (DSL) についても説明します。
このトピックはAlibaba Cloud独自の情報であり、Alibaba Cloudがサードパーティサービスとやり取りするために提供する機能について説明します。 したがって、このトピックでは、サードパーティの企業およびサービスの名前を参照できます。
互換性
Elasticsearchは、Apache Luceneに基づいて構築されたオープンソースの分散検索および分析エンジンです。 Elasticsearchは、データ処理と分析によく使用されます。 ログエンジンをElasticsearchからSimple log Serviceに切り替える場合、使用習慣や上流および下流のプログラムを変更する必要がある場合があります。 これらの問題を解決するために、Log ServiceはElasticsearchと互換性のあるAPIを提供し、Elasticsearchのクエリと分析ソリューションのスムーズな移行を保証し、Simple Log Serviceの使用の難しさを軽減します。
Simple Log ServiceのElasticsearch互換APIは、Elasticsearch DSLクエリ構文を、Simple Log Serviceのインデックスベースのクエリ構文とSQL分析構文に変換します。 その後、Simple Log Serviceは、Elasticsearchの要件を満たす形式でクエリと分析の結果を返します。 このようにして、Elasticsearchクエリプロトコルを実装できます。
Simple Log ServiceのElasticsearch互換APIは、Elasticsearch 7.10のAPI仕様に基づいて実装されています。
標準ログストアを使用し、少なくとも1つのフィールドインデックスを作成する場合にのみ、Elasticsearch互換API操作を呼び出すことができます。
Elasticsearchと互換性のあるAPIエンドポイント
Elasticsearch互換APIのエンドポイントは、https://${project}.${sls-endpoint}/es/
形式です。 例: https://etl-guangzhou.cn-guangzhou.log.aliyuncs.com/es/
。 ${project}
はプロジェクトの名前を指定します。 ${sls-endpoint}
は、プロジェクトのエンドポイントを指定します。 詳細については、「エンドポイント」をご参照ください。
サポートされているElasticsearch互換のAPI操作
次の表に、Simple Log ServiceのElasticsearch互換APIと互換性のあるElasticsearch APIの操作を示します。
リクエスト方法 | APIパス | 説明 |
リクエスト方法 | APIパス | 説明 |
Post | /${index}/_search | 指定されたインデックスを照会します。 indexフィールドは、Simple Log ServiceプロジェクトとLogstoreを指定します。 形式: |
Post | /${index}/_async_search | 一度に複数のリソースを照会します。 |
Post | /_msearch | 一度に複数のリソースを照会します。 |
Post | /${index}/_bulk | 指定したインデックスにデータを書き込みます。 _bulk操作はデータ書き込みのみをサポートし、データ更新はサポートしません。 |
Get | /${index}/_mapping | 指定されたインデックスのマッピングを照会します。 |
サポートされているElasticsearch DSL
次の表では、Simple Log ServiceのElasticsearch互換APIと互換性のあるElasticsearch DSLについて説明します。
DSL | 説明 |
bool | ブール演算を実行します。 |
match_all | すべてのログと一致します。 |
match | インデックスと一致します。 |
match_phrase | フレーズと一致します。 クエリを実行すると、演算子はSimple Log ServiceのSQL LIKE句に変換されます。 クエリ結果のフィールドは、フィールドインデックスで設定されます。 |
multi_match | 複数のフィールドに一致します。 |
prefix | プレフィックスを照会します。 |
range | 範囲を照会します。 |
term | 用語を照会します。 クエリを実行すると、演算子はSimple Log Serviceのインデックスベースのクエリ構文に変換されます。 |
terms | 複数の用語を照会します。 クエリを実行すると、演算子はSimple Log Serviceのインデックスベースのクエリ構文に変換されます。 |
wildcard | ワイルドカードパターンと一致します。 クエリを実行すると、演算子はSimple Log ServiceのSQL分析構文に変換されます。 |
regexp | 正規表現と一致します。 クエリを実行すると、演算子はSimple Log ServiceのSQL regexp_like関数に変換されます。 クエリ結果のフィールドは、フィールドインデックスで設定されます。 |
exists | 値が存在するかどうかをチェックします。 |
ids | IDフィールドを照会します。 |
カテゴリ | DSL | 説明 |
グループ別の統計分析 | Date histogram |
|
Histogram | 特定の値間隔に基づいて統計を分析します。 | |
Range | 値の範囲に基づいて統計を分析します。 | |
Terms | フィールドの一意の値に基づいて統計を分析します。 | |
Filter | 単一のフィルター条件に基づいて統計を分析します。 | |
Filters | 複数のフィルター条件に基づいて統計を分析します。 | |
メトリックベースの統計分析 | Min | 最小値を計算します。 |
Max | 最大値を計算します。 | |
Avg | 平均値を計算します。 | |
Sum | 合計値を計算します。 | |
Count | 数量を計算します。 | |
Cardinality | 一意の値の総数を計算します。 | |
Percentiles | 値のパーセンタイルを計算します。 | |
ログを返す | Top hits | 集計されたログを返します。 |
Elasticsearch互換APIと標準のElasticsearch APIの違い
Simple Log ServiceのElasticsearch互換APIは、データ更新をサポートしていません。
Simple Log ServiceのElasticsearch互換APIは、スクリプトを含むクエリステートメントをサポートしていません。
Simple Log Service Logstoreを使用すると、ペタバイト単位のデータを照会できます。 Simple Log ServiceのElasticsearch互換APIを使用する場合、Elasticsearchはインデックスのロールオーバーを実行する必要はありません。
Simple Log Serviceは自動的にインデックスを作成しません。 API操作を呼び出すか、Simple Log Serviceコンソールを使用してインデックスを作成する必要があります。 詳細については、「インデックスの作成」をご参照ください。
Elasticsearch DSLを使用してフィールドをクエリする場合、ElasticsearchとSimple Log Serviceのフィールド間のマッピングに注意してください。 次の表に、フィールドマッピングについて説明します。
Elasticsearch
Simple Log Service
説明
Elasticsearch
Simple Log Service
説明
@ timestamp
__time__
クエリステートメントで
@ timestamp
フィールドを指定すると、Simple Log Serviceの__time__
フィールドがマッピングされます。_id
なし
Simple Log Serviceに
_id
フィールドが存在する場合、Elasticsearchの_idフィールドはSimple Log Serviceの_id
フィールドにマッピングされます。 _idフィールドがSimple Log Serviceに存在しない場合、システムはuuid
または_pack_meta
フィールドを生成し、_idフィールドの値をuuidまたは_pack_metaフィールドにマップします。RAM ユーザーへの権限付与
次の方法を使用して、Elasticsearch互換APIを使用してデータを照会または書き込む権限をRAMユーザーに付与できます。
シンプルモード: システムポリシーを使用して、RAMユーザーに必要な権限を付与できます。 パラメーターを設定する必要はありません。
カスタムモード: カスタムポリシーを作成し、RAMユーザーにポリシーをアタッチできます。 このモードでは、きめ細かいアクセス制御を実行できます。 しかし、このモードの構成は複雑である。
シンプルモードカスタムモードシステムポリシーを使用して、Elasticsearch互換APIを使用して、RAMユーザーにデータのクエリまたは書き込み権限を付与できます。 次の表に、システムポリシーを示します。 詳細については、「RAMユーザーを作成し、RAMユーザーにSimple Log Serviceへのアクセスを許可する」をご参照ください。
システムポリシー名
クエリ権限
書き込み権限
AliyunLogFullAccess
必須
必須
AliyunLogReadOnlyAccess
必須
選択可能
カスタムポリシーを使用して、Elasticsearch互換APIを使用して、RAMユーザーにデータのクエリまたは書き込み権限を付与できます。 次の例は、カスタムポリシーの設定方法を示しています。 詳細については、「カスタムポリシーの作成」および「RAMユーザーへの権限付与」をご参照ください。
次のスクリプトは、Elasticsearch互換APIを使用してデータのクエリと書き込みを行う権限をRAMユーザーに付与するサンプルポリシーを示しています。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "log:GetIndex", "log:GetLogStoreContextLogs", "log:ListLogStores", "log:GetLogStoreHistogram", "log:GetLogstoreLogs", "log:GetLogStoreContextLogs", "log:GetCursorOrData", "log:GetLogstore", "log:PostLogStoreLogs" ], "Resource": "acs:log:*:*:project/*" } ] }
次のスクリプトは、Elasticsearch互換APIを使用してデータを照会する権限をRAMユーザーに付与するサンプルポリシーを示しています。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "log:GetIndex", "log:GetLogStoreContextLogs", "log:ListLogStores", "log:GetLogStoreHistogram", "log:GetLogstoreLogs", "log:GetLogStoreContextLogs", "log:GetCursorOrData", "log:GetLogstore" ], "Resource": "acs:log:*:*:project/*" } ] }
次のスクリプトは、Elasticsearch互換APIを使用してRAMユーザーにデータを書き込む権限を付与するサンプルポリシーを示しています。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "log:PostLogStoreLogs" ], "Resource": "acs:log:*:*:project/*" } ] }