日志服务与Elasticsearch的兼容性

本文介绍日志服务与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,并且至少创建一个字段索引。

image

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,格式为${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

根据@timestamp字段进行分组统计。

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/*"
            }
        ]
    }