通过配置阿里云Elasticsearch实例的YML参数,您可以设置允许自动创建索引、删除索引指定名称、配置Auditlog索引、开启Watcher以及其他配置。本文介绍如何配置YML参数、CORS访问、reindex白名单、Auditlog和queue大小。

注意事项

2020年10月起,由于阿里云Elasticsearch网络架构调整,导致部分通过reindex方式跨集群迁移数据的场景受到了限制。如果需要使用reindex方式跨集群迁移数据,请参见通过实例私网打通将自建Elasticsearch数据迁移至阿里云中的注意事项进行处理。
说明 对于华北3(张家口)和海外地域,由于网络架构调整时间不确定,因此需要提交工单,联系阿里云Elasticsearch技术支持,校验网络是否可以互通。

修改配置

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. 进入目标实例。
    1. 在顶部菜单栏处,选择资源组和地域。
    2. 在左侧导航栏,单击Elasticsearch实例,然后在Elasticsearch实例中单击目标实例ID。
  4. 在左侧导航栏,选择配置与管理 > ES集群配置
  5. ES集群配置页面,单击YML文件配置右侧的修改配置
  6. YML文件配置页面,按照以下说明进行配置。
    说明 如果您需要查看elasticsearch.yml的内容,可登录Kibana控制台,执行GET _cluster/settings?include_defaults命令。
    参数 说明
    自动创建索引 当Elasticsearch实例接收到新文档后,如果没有对应索引,是否允许系统自动创建索引。

    对应的YML文件的配置项为action.auto_create_index,默认为false

    阿里云Elasticsearch默认不允许自动创建索引,您可以通过以下方式开启:
    重要 自动创建的索引可能不符合您的预期,建议您评估后再开启。
    • 通过控制台集群配置开启。该操作为YML静态配置,会触发实例重启。
    • 通过动态方式快速开启(不需要重启)。登录Kibana控制台,通过以下命令设置允许自动创建索引:
      • 允许自动创建所有索引
        PUT /_cluster/settings
        {
          "persistent": {
            "action": {
              "auto_create_index": "true"
            }
          }
        }
        重要 该方式将开放所有索引的自动创建功能,如果您需要禁止,请将true改成false
      • 只允许自动创建部分指定索引,如下示例仅允许自动创建系统索引:
        PUT /_cluster/settings
        {
          "persistent": {
            "action": {
              "auto_create_index": "+.*,-*"
            }
          }
        }
    删除索引指定名称 在删除索引时是否需要明确指定索引名称。如果选择删除或关闭时索引名称支持通配符,则可以使用通配符进行批量删除索引。索引删除后不可恢复,请谨慎使用此配置。

    对应的YML文件的配置项为action.destructive_requires_name,默认为true

    Auditlog 开启后,系统会记录Elasticsearch实例对应的增、删、改、查等操作产生的审计日志,该日志信息会占用您的磁盘空间,同时也会影响性能,不建议开启,请谨慎使用此配置。更多参数说明,请参见配置Auditlog(审计日志)
    重要 Elasticsearch 7.x版本支持在控制台查看审计日志,且目前仅开放部分地域,详情请参见使用限制。查看时需要先开启Auditlog,详细信息请参见查询日志。其他版本需要在集群中查看审计日志,例如通过在Kibana控制台上查看.security_audit_log-*开头的索引查看审计日志。

    对应的YML文件的配置项为xpack.security.audit.enabled,默认为false

    开启Watcher 开启后,可使用X-Pack的Watcher功能。请注意定时清理.watcher-history*索引,避免占用大量磁盘空间。

    对应的YML文件的配置项为xpack.watcher.enabled,默认为false

    其他Configure配置 支持的部分配置项如下(以下配置项,如果没有标识具体适用于哪个Elasticsearch版本,默认兼容Elasticsearch 5.x、6.x和7.x版本):
    • 配置CORS访问
      • http.cors.enabled
      • http.cors.allow-origin
      • http.cors.max-age
      • http.cors.allow-methods
      • http.cors.allow-headers
      • http.cors.allow-credentials
    • 配置reindex白名单

      reindex.remote.whitelist

    • 配置Auditlog(审计日志)
      重要 Elasticsearch 7.x版本仅支持配置xpack.security.audit.logfile.events.include参数。
      • xpack.security.audit.enabled
      • xpack.security.audit.index.bulk_size
      • xpack.security.audit.index.flush_interval
      • xpack.security.audit.index.rollover
      • xpack.security.audit.index.events.include
      • xpack.security.audit.logfile.events.include(仅适用于7.x版本)
      • xpack.security.audit.index.events.exclude
      • xpack.security.audit.index.events.emit_request_body
    • 配置queue大小
      • thread_pool.bulk.queue_size(适用于5.x版本)
      • thread_pool.write.queue_size(适用于6.x及7.x版本)
      • thread_pool.search.queue_size
    • 自定义SQL插件配置

      xpack.sql.enabled

      默认情况下Elasticsearch实例会启用X-Pack自带的SQL插件,如需上传自定义的SQL插件,请将xpack.sql.enabled设置为false

    重要
    • 配置YML文件会触发集群滚动重启。如果集群中的索引有副本且集群负载正常(CPU使用率在60%左右,堆内存使用率在50%左右,load_1m低于CPU核数),一般情况下,在重启过程中可持续对外提供服务。重启时长与集群规模、数据量及负载情况等有关系,建议在业务低峰期操作。
    • 如果集群负载过高且索引没有副本,同时业务中存在大量的写入或查询等场景,在集群变更过程中,业务可能会出现偶发的访问超时现象。建议在客户端访问脚本中配置重试机制,以减小对业务的影响。
  7. 选中该操作会重启实例,请确认后操作,单击确定
    确定后,Elasticsearch实例会重启。重启过程中,可在任务列表查看进度。重启成功后,即可完成YML文件的配置。

配置CORS访问

通过配置跨域资源共享CORS(Cross-origin resource sharing)访问,设置是否允许其他域资源下的浏览器向阿里云Elasticsearch发送请求。您可以在YML文件配置中,配置CORS访问,支持配置的参数如下。
重要
  • 表格中的参数是阿里云Elasticsearch为支持HTTP协议开放的自定义配置。
  • 表格中的参数仅支持静态配置。如果您想使配置生效,需要将配置信息写入elasticsearch.yml文件中。
  • 表格中的参数依赖于集群网络设定(Network settings)。
参数 默认值 说明
http.cors.enabled false 设置是否启用跨域资源访问(Elasticsearch是否允许其他域资源下的浏览器向其发送请求):
  • true:启用。Elasticsearch会处理OPTIONS CORS请求。如果发送请求中的域信息已在http.cors.allow-origin中声明,那么Elasticsearch会在头信息中附加Access-Control-Allow-Origin,以响应跨域请求。
  • false:不启用。Elasticsearch会忽略请求头中的域信息,将不会使用Access-Control-Allow-Origin信息头应答。如果客户端不支持发送附加域信息头的preflight请求,或者不校验从服务端返回的报文的头信息中的Access-Control-Allow-Origin信息,那么跨域安全访问将受到影响。如果关闭CORS支持,则客户端只能尝试通过发送OPTIONS请求,以了解此响应信息是否存在。
http.cors.allow-origin “” 域资源配置项,可设置接受来自哪些域名的请求。默认不允许接受跨域请求且无配置。支持正则表达式,例如/https?:\/\/localhost(:[0-9]+)?/,表示可响应符合此正则的请求信息。
重要 *是合法配置,表示集群支持来自任意域名的跨域请求,此配置存在安全风险,不建议使用。
http.cors.max-age 1728000(20天) 浏览器可发送OPTIONS请求以获取CORS配置信息,此配置项可设置获取的信息在浏览器中的缓存时间,单位为秒。
http.cors.allow-methods OPTIONS, HEAD, GET, POST, PUT, DELETE 请求方法配置项。
http.cors.allow-headers X-Requested-With, Content-Type, Content-Length 请求头信息配置项。
http.cors.allow-credentials false 凭证信息配置项目,设置是否允许响应头中返回Access-Control-Allow-Credentials信息:
  • true:允许
  • false:不允许

配置reindex白名单

通过当前集群调用reindex API,从远程集群迁移索引数据前,需要先配置reindex白名单。您可以在YML文件配置中,配置reindex白名单,支持配置的参数如下。
参数 默认值 说明
reindex.remote.whitelist [] 设置远程Elasticsearch集群的访问地址,将其添加到当前集群的远程访问白名单中。

白名单支持hostport的组合,并使用逗号分隔多个主机配置(例如otherhost:9200,another:9200,127.0.10.**:9200,localhost:**),不识别协议信息。

配置reindex白名单时,如果远程Elasticsearch集群为单可用区的阿里云Elasticsearch实例,请使用<阿里云Elasticsearch实例的域名>:9200;如果为多可用区实例,请使用实例中所有数据节点的IP地址与端口的组合。具体示例如下:
  • 单可用区单可用区配置示例
    reindex.remote.whitelist: ["es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200"]
  • 多可用区多可用区reindex白名单配置
    reindex.remote.whitelist: ["10.0.xx.xx:9200","10.0.xx.xx:9200","10.0.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200"]
    说明 reindex白名单配置完成后,即可调用reindex API重建索引。具体操作,请参见通过reindex迁移数据

配置Auditlog(审计日志)

Auditlog为审计日志,默认关闭。查看审计日志前,需要先开启Auditlog。开启后,系统会记录Elasticsearch实例对应的增、删、改、查等操作产生的日志。对于审计日志的开启、配置和查看,阿里云Elasticsearch不同版本实例的操作有所不同,具体如下。
说明 关于Auditlog的更多详细信息,请参见Auditing Security Settings

7.x版本

  1. 进入YML文件配置面板。
    具体操作请参见修改配置
  2. Auditlog索引区域,选择开启Auditlog索引,开启Auditlog索引。
  3. 自定义Auditlog配置。
    对于7.x版本实例,开启Auditlog索引后,其他Configure配置中显示默认的xpack.security.audit.logfile.events.include参数配置,您可以进行调整,示例如下:
    xpack:
      security:
        audit:
          logfile:
            events:
              include: >-
                access_denied,anonymous_access_denied,authentication_failed,connection_denied,tampered_request,run_as_denied,run_as_granted
    重要
    • 7.x版本实例仅支持配置xpack.security.audit.logfile.events.include参数。
    • 默认Auditlog配置只会在审计日志中打印请求被拒绝或失败的审计日志,如需获取请求成功的审计日志,需要添加access_granted事件。添加后,磁盘将存储所有访问信息,可能会存在磁盘使用率过高的风险,建议您问题排查完后,关闭审计日志功能。
  4. 查看审计日志(Auditlog)。
    对于7.x版本实例,开启Auditlog索引后,您可以在控制台的日志查询页面查看审计日志,详细信息请参见查询日志。目前审计日志功能仅开放部分地域,详情请参见使用限制

非7.x版本

  1. 进入YML文件配置面板。
    具体操作请参见YML文件配置
  2. Auditlog索引区域,选择开启Auditlog索引,开启Auditlog索引。
    Auditlog索引的默认配置如下,您可以根据具体业务进行调整。
    xpack.security.audit.index.bulk_size: 5000
    xpack.security.audit.index.events.emit_request_body: false
    xpack.security.audit.index.events.exclude: run_as_denied,anonymous_access_denied,realm_authentication_failed,access_denied,connection_denied
    xpack.security.audit.index.events.include: authentication_failed,access_granted,tampered_request,connection_granted,run_as_granted
    xpack.security.audit.index.flush_interval: 180s
    xpack.security.audit.index.rollover: hourly
    xpack.security.audit.index.settings.index.number_of_replicas: 1
    xpack.security.audit.index.settings.index.number_of_shards: 10
    配置 默认设置 说明
    xpack.security.audit.index.bulk_size 1000 当您将多个审计事件分批写入到一个Auditlog索引中时,可通过该参数,设置写入事件的数量。
    xpack.security.audit.index.flush_interval 1s 控制缓冲事件刷新到索引的频率。
    xpack.security.audit.index.rollover daily 控制滚动构建到新索引的频率,可以设置为hourlydailyweeklymonthly
    xpack.security.audit.logfile.events.include access_denied,anonymous_access_denied,authentication_failed, connection_denied,tampered_request,run_as_denied,run_as_granted 控制何种Auditlog事件可以被采集到审计日志中。目前审计日志功能仅开放部分地域,详情请参见使用限制。完整事件类型列表,请参见Audit event types (7.x)
    xpack.security.audit.index.events.include access_denied, access_granted, anonymous_access_denied, authentication_failed, connection_denied, tampered_request, run_as_denied, run_as_granted 控制何种Auditlog事件可以被写入到索引中,仅非7.x版本的实例支持。完整事件类型列表,请参见Audit event types (6.x)
    xpack.security.audit.index.events.exclude null(默认不处理任何事件) 构建索引过程中,排除的Auditlog事件。
    xpack.security.audit.index.events.emit_request_body false 当触发明确的事件类型时(例如authentication_failed),是否忽略或包含以REST发送的请求体。
    重要 当Auditlog中包含RequestBody信息时,可能会在日志文件中暴露敏感信息。
  3. 查看审计日志(Auditlog)。
    对于非7.x版本实例,当开启Auditlog后,Auditlog文件将输出到Elasticsearch实例中,并使用.security_audit_log-*开头的索引名称。因此您可以通过在Kibana控制台上查看.security_audit_log-*开头的索引来查看审计日志。
    重要 Auditlog索引会占用实例的存储空间。由于Elasticsearch不支持自动过期清除策略,因此需要手动清除旧的Auditlog索引。
  4. 可选:配置存储Auditlog的索引分片。
    对于非7.x版本实例,您可以通过xpack.security.audit.index.settings配置存储Auditlog的索引分片。以下配置构建Auditlog索引的分片和副本均为1
    xpack.security.audit.index.settings:
      index:
        number_of_shards: 1
        number_of_replicas: 1
    说明 如果您希望通过传入配置参数生成Auditlog索引,请在开启Auditlog索引(设置xpack.security.audit.enabledtrue)的同时传入此配置。否则,Auditlog索引将使用默认的number_of_shards: 5number_of_replicas: 1配置。

配置queue大小

通过自定义queue大小,调整文档写入和搜索的队列大小。您可以在YML文件配置中,配置queue大小。以下示例配置文档写入和搜索queue大小为5001000,实际业务中请根据具体情况自行调整。
  • 5.x版本
    thread_pool.bulk.queue_size: 500
    thread_pool.search.queue_size: 1000
  • 6.x及7.x版本
    thread_pool.write.queue_size: 500
    thread_pool.search.queue_size: 1000
参数 默认值 说明
thread_pool.bulk.queue_size 200 文档写入队列大小,适用于阿里云Elasticsearch 5.x版本。
thread_pool.write.queue_size 200 文档写入队列大小,适用于阿里云Elasticsearch 6.x及7.x版本。
thread_pool.search.queue_size 1000 文档搜索队列大小。
说明 Elasticsearch实例的thread_pool.search.queue_size参数的最大值为1000,调整为1000以上仍取值为1000。