本文介紹Log Service與Elasticsearch的相容性資訊,包括相容原理、相容的Elasticsearch API和Elasticsearch DSL(Domain Specific Language)等。
本文檔為阿里雲原創文檔,智慧財產權歸阿里雲所有,由於本文檔旨在介紹阿里雲與第三方產品互動的服務能力,因此可能會提及第三方公司或產品等名稱。
相容原理
Elasticsearch是一款基於Apache Lucene的開源、分布式搜尋和分析引擎,是資料處理和分析的主流工具。當您將日誌引擎從Elasticsearch切換為Log Service時,可能遇到使用習慣以及上下遊程式修改問題。為瞭解決這些問題,Log Service提供了Elasticsearch相容介面,最大程度保障Elasticsearch查詢分析方案遷移的平滑度,降低將日誌引擎從Elasticsearch切換為Log Service的使用難度。
Log Service所提供的Elasticsearch相容介面,其相容機制是將Elasticsearch DSL查詢翻譯為Log Service的索引查詢和SQL分析查詢,並且按照Elasticsearch的API格式規範返回查詢分析結果,從而實現Elasticsearch查詢協議的相容。
Log Service的Elasticsearch相容介面是根據Elasticsearch7.10的介面規範實現的。
Elasticsearch相容介面僅支援標準型Logstore,並且至少建立一個欄位索引。
Elasticsearch相容API訪問網域名稱
Elasticsearch相容API的訪問網域名稱格式為https://${project}.${sls-endpoint}/es/
,例如https://etl-guangzhou.cn-guangzhou.log.aliyuncs.com/es/
。其中${project}
為Project名稱,${sls-endpoint}
為Log ServiceProject的訪問網域名稱。更多資訊,請參見服務入口。
支援的Elasticsearch API
Log Service提供的Elasticsearch相容介面支援相容如下Elasticsearch API。
要求方法 | API路徑 | 說明 |
Post | /${index}/_search | 查詢指定的Index。Index對應Log Service的Project和Logstore,格式為 |
Post | /${index}/_async_search | 批量查詢。 |
Post | /_msearch | 批量查詢。 |
Post | /${index}/_bulk | 寫入資料到指定的Index。 重要 _bulk介面不支援資料更新,只支援寫入資料。 |
Get | /${index}/_mapping | 擷取指定Index的Mapping。 |
支援相容的Elasticsearch DSL
Log Service提供的Elasticsearch相容介面支援如下Elasticsearch DSL。
查詢相關的DSL列表
DSL | 功能說明 |
bool | 布爾運算。 |
match_all | 匹配所有日誌。 |
match | 索引匹配。 |
match_phrase | 短語匹配。 查詢時,會將該運算元翻譯為Log Service的SQL LIKE文法,返回結果中的欄位列表為配置了欄位索引的欄位。 |
multi_match | 多欄位匹配。 |
prefix | 首碼查詢。 |
range | 範圍查詢。 |
term | term查詢。 查詢時,會將該運算元翻譯為Log Service的索引查詢文法。 |
terms | 多個term查詢。 查詢時,會將該運算元翻譯為Log Service的索引查詢文法。 |
wildcard | 萬用字元匹配。 查詢時,會將該運算元翻譯為Log Service的SQL分析文法。 |
regexp | 正則匹配。 查詢時,會將該運算元翻譯為Log Service的SQL regexp_like文法。返回結果中的欄位列表為配置了欄位索引的欄位。 |
exists | 欄位存在查詢。 |
ids | ID欄位查詢。 |
彙總相關的DSL列表
類別 | DSL | 說明 |
分組統計 | Date histogram | 根據 |
Histogram | 根據數值間隔進行分組統計。 | |
Range | 根據數值範圍進行分組統計。 | |
Terms | 根據欄位唯一值進行分組統計。 | |
Filter | 根據單個過濾條件進行分組統計。 | |
Filters | 根據多個過濾條件進行分組統計。 | |
指標統計 | Min | 統計最小值。 |
Max | 統計最大值。 | |
Avg | 統計平均值。 | |
Sum | 統計總和。 | |
Count | 統計總數。 | |
Cardinality | 統計不重複的資料總數。 | |
Percentiles | 統計百分位。 | |
返回日誌 | Top hits | 返回分組後的日誌。 |
Elasticsearch相容API與標準Elasticsearch API的差異點
Log Service提供的Elasticsearch相容API不支援更新資料。
Log Service提供的Elasticsearch相容API不支援包含Script的查詢語句。
單個Log ServiceLogstore支援PB級資料量,因此使用Log Service提供的Elasticsearch相容API時,Elasticsearch不需要做Index滾動。
Log Service的索引不會自動建立,您需要通過API方式或控制台手動建立。具體操作,請參見建立索引。
通過Elasticsearch DSL查詢如下欄位時,請注意其映射關係。
Elasticsearch
Log Service
說明
@timestamp
__time__
如果查詢語句中指定了
@timestamp
欄位,則實際查詢時使用的是Log Service的__time__
欄位。_id
無
如果Log Service的資料中存在
_id
欄位,則映射為_id
欄位;如果不存在,則自動使用uuid
或_pack_meta
填充。
RAM授權
您可以使用如下權限原則授予RAM使用者使用Elasticsearch相容API進行查詢和寫入資料的許可權。
系統權限原則:操作簡單。
自訂權限原則:許可權精細,配置複雜。
極簡授權
您可以通過系統權限原則授予RAM使用者使用Elasticsearch相容API查詢、寫入資料的許可權。具體操作,請參見為RAM使用者授權。
系統權限原則名稱 | 查詢許可權 | 寫入許可權 |
AliyunLogFullAccess | Yes | Yes |
AliyunLogReadOnlyAccess | Yes | No |
自訂權限原則
您可以通過自訂權限原則授予RAM使用者使用Elasticsearch相容API查詢、寫入資料的許可權。具體操作,請參見建立自訂權限原則、為RAM使用者授權。
授予RAM使用者使用Elasticsearch相容API查詢和寫入資料許可權。
{ "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/*" } ] }
授予RAM使用者使用Elasticsearch相容API查詢資料的許可權。
{ "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/*" } ] }
授予RAM使用者使用Elasticsearch相容API寫入資料的許可權。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "log:PostLogStoreLogs" ], "Resource": "acs:log:*:*:project/*" } ] }