本文介绍日志服务与Elasticsearch的兼容性信息,包括兼容原理、兼容的Elasticsearch API和Elasticsearch DSL(Domain Specific Language)等。
本文档为阿里云原创文档,知识产权归阿里云所有,由于本文档旨在介绍阿里云与第三方产品交互的服务能力,因此可能会提及第三方公司或产品等名称。
兼容原理
Elasticsearch是一款基于Apache Lucene的开源、分布式搜索和分析引擎,是数据处理和分析的主流工具。当您将日志引擎从Elasticsearch切换为日志服务时,可能遇到使用习惯以及上下游程序修改问题。为了解决这些问题,日志服务提供了Elasticsearch兼容接口,最大程度保障Elasticsearch查询分析方案迁移的平滑度,降低将日志引擎从Elasticsearch切换为日志服务的使用难度。
日志服务所提供的Elasticsearch兼容接口,其兼容机制是将Elasticsearch DSL查询翻译为日志服务的索引查询和SQL分析查询,并且按照Elasticsearch的API格式规范返回查询分析结果,从而实现Elasticsearch查询协议的兼容。
日志服务的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}
为日志服务Project的访问域名。更多信息,请参见服务入口。
支持的Elasticsearch API
日志服务提供的Elasticsearch兼容接口支持兼容如下Elasticsearch API。
请求方法 | API路径 | 说明 |
Post | /${index}/_search | 查询指定的Index。Index对应日志服务的Project和Logstore,格式为 |
Post | /${index}/_async_search | 批量查询。 |
Post | /_msearch | 批量查询。 |
Post | /${index}/_bulk | 写入数据到指定的Index。 重要 _bulk接口不支持数据更新,只支持写入数据。 |
Get | /${index}/_mapping | 获取指定Index的Mapping。 |
支持兼容的Elasticsearch DSL
日志服务提供的Elasticsearch兼容接口支持如下Elasticsearch DSL。
查询相关的DSL列表
DSL | 功能说明 |
bool | 布尔运算。 |
match_all | 匹配所有日志。 |
match | 索引匹配。 |
match_phrase | 短语匹配。 查询时,会将该算子翻译为日志服务的SQL LIKE语法,返回结果中的字段列表为配置了字段索引的字段。 |
multi_match | 多字段匹配。 |
prefix | 前缀查询。 |
range | 范围查询。 |
term | term查询。 查询时,会将该算子翻译为日志服务的索引查询语法。 |
terms | 多个term查询。 查询时,会将该算子翻译为日志服务的索引查询语法。 |
wildcard | 通配符匹配。 查询时,会将该算子翻译为日志服务的SQL分析语法。 |
regexp | 正则匹配。 查询时,会将该算子翻译为日志服务的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的差异点
日志服务提供的Elasticsearch兼容API不支持更新数据。
日志服务提供的Elasticsearch兼容API不支持包含Script的查询语句。
单个日志服务Logstore支持PB级数据量,因此使用日志服务提供的Elasticsearch兼容API时,Elasticsearch不需要做Index滚动。
日志服务的索引不会自动创建,您需要通过API方式或控制台手动创建。具体操作,请参见创建索引。
通过Elasticsearch DSL查询如下字段时,请注意其映射关系。
Elasticsearch
日志服务
说明
@timestamp
__time__
如果查询语句中指定了
@timestamp
字段,则实际查询时使用的是日志服务的__time__
字段。_id
无
如果日志服务的数据中存在
_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/*" } ] }