配置 Elasticsearch

目录

配置文件位置

配置文件格式

环境变量替换

集群和节点设置类型

设置 JVM 选项

安全设置

可重新加载的安全设置

日志配置 

配置日志记录级别

弃用日志记录

JSON 日志格式

 审计安全设置

一般审计设置

审核事件设置

本地节点信息设置

审核日志文件事件忽略策略

跨集群复制设置

Elasticsearch 转换设置

Elasticsearch 中的索引生命周期管理设置

集群级别设置

索引级别设置

许可证设置

Elasticsearch 中的机器学习设置

Elasticsearch 中的监控设置

X-Pack 监控 TLS/SSL 设置

Elasticsearch 中的安全设置 

Elasticsearch 中的快照生命周期管理设置

Elasticsearch 中的SQL 访问设置

Elasticsearch 中的观察者设置


Elasticsearch 提供了良好的默认值并且需要很少的配置。可以使用集群更新设置API在正在运行的集群上更改大多数设置 。

配置文件应包含特定于节点的设置(例如node.name和 路径),或节点为了能够加入集群而需要的设置,例如cluster.namenetwork.host

配置文件位置

Elasticsearch 有三个配置文件:

  • elasticsearch.yml 用于配置 Elasticsearch
  • jvm.options 用于配置 Elasticsearch JVM 设置
  • log4j2.properties 用于配置 Elasticsearch 日志记录

这些文件位于 config 目录中,其默认位置取决于安装是来自存档分发版(tar.gz或 zip)还是软件包分发版(Debian 或 RPM 软件包)。

对于存档分发,配置目录位置默认为 $ES_HOME/config. 可以通过ES_PATH_CONF环境变量更改配置目录的位置, 如下所示:

ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch

或者可以通过命令行或 shell 配置文件export设置ES_PATH_CONF环境变量。

对于包分发,配置目录位置默认为 /etc/elasticsearch. 也可以通过ES_PATH_CONF环境变量更改 config 目录的位置,但请注意,仅在shell 中设置它是不够的。相反,这个变量来自 /etc/default/elasticsearch(对于 Debian 包)和 /etc/sysconfig/elasticsearch(对于 RPM 包)。需要相应地编辑ES_PATH_CONF=/etc/elasticsearch这些文件之一中的条目以更改配置目录位置。

配置文件格式

配置格式为YAML。以下是更改数据和日志目录路径的示例:

path:
    data: /var/lib/elasticsearch
    logs: /var/log/elasticsearch

设置也可以按如下方式进行:

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

环境变量替换

配置文件中使用符号引用${...}的环境变量将替换为环境变量的值。例如:

node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

环境变量的值必须是简单的字符串。使用逗号分隔的字符串, Elasticsearch 将解析为列表的值。例如,Elasticsearch 会将以下字符串拆分为${HOSTNAME}环境变量的值列表:

export HOSTNAME=“host1,host2"

集群和节点设置类型

集群和节点设置可以根据它们的配置方式进行分类:

动态的

可以使用集群更新设置 API配置和更新正在运行的集群上的动态设置 。

还可以在未启动或关闭的节点上使用本地配置动态设置elasticsearch.yml

TIPS

最好使用集群更新设置 API 设置动态的、集群范围的设置,并且elasticsearch.yml仅用于本地

配置。使用集群更新设置 API 可确保所有节点上的设置都相同。如果不小心

elasticsearch.yml在不同的节点上配置了不同的设置,则可能很难注意到差异。

静态的

静态设置只能在未启动或关闭的节点上使用 elasticsearch.yml.

必须在集群中的每个相关节点上设置静态设置。

设置 JVM 选项

应该很少需要更改 Java 虚拟机 (JVM) 选项。最有可能的更改是设置heap size。本文档的其余部分详细解释了如何设置 JVM 选项。可以使用jvm.options文件或ES_JAVA_OPTS环境变量设置选项。

设置 JVM 选项(包括系统属性和 JVM 标志)的首选方法是通过jvm.options配置文件。该文件的默认位置是config/jvm.options(从 tar 或 zip 发行版安装时)和/etc/elasticsearch/jvm.options(从 Debian 或 RPM 包安装时)。

NOTE


如果使用的是 ElasticsearchDocker 发行版,建议使用ES_JAVA_OPTS环境变量设置堆大小 

此文件包含遵循特殊语法的以行分隔的 JVM 参数列表:

  • 仅由空格组成的行将被忽略
  • #开头的行被视为注释并被忽略

    # this is a comment
  • -开头的行被视为独立于 JVM 版本而适用的 JVM 选项

    -Xmx2g
  • 以数字开头、后跟 :的行被视为 JVM 选项,仅当 JVM 版本与数字匹配时才适用

    8:-Xmx2g
  • 以数字开头、后跟 -: 的行被视为 JVM 选项,仅当 JVM 版本大于或等于该数字时才适用

    8-:-Xmx2g
  • 以数字开头、后跟 -数字:的行被视为 JVM 选项,仅当 JVM 版本落在这两个数字的范围内时才适用

    8-9:-Xmx2g
  • 所有其他行都被拒绝

可以将自定义 JVM 标志添加到此文件,也可将此配置check到版本控制系统中。

设置 Java 虚拟机选项的另一种机制是通过 ES_JAVA_OPTS环境变量。例如:

export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch

当使用 RPM 或 Debian 软件包时,ES_JAVA_OPTS可以在系统配置文件中指定 。

JVM 具有用于观察JAVA_TOOL_OPTIONS 环境变量的内置机制。官方有意在打包脚本中忽略此环境变量。这样做的主要原因是在某些操作系统(例如 Ubuntu)上,默认情况下通过此环境变量安装了代理,在此情况下就会干扰 Elasticsearch。

此外,其他一些 Java 程序支持JAVA_OPTS环境变量。这不是JVM 内置的机制,而是生态系统中的约定。但是,官方不支持此环境变量,而是支持通过jvm.options文件或环境变量设置JVM选项ES_JAVA_OPTS,如上。

安全设置

一些敏感的设置,依靠文件系统权限来保护它们的值是不够的。对于这个用例,Elasticsearch 提供了一个密钥库和管理密钥库中设置的elasticsearch-keystore工具

重要

只有部分设置被设计为从密钥库中读取。密钥库没有阻止不受支持的设置的验证。向密钥库添加不受支持的设置会导致 Elasticsearch 无法启动。要查看密钥库中是否支持设置,请查找设置参考中的“安全”限定符。

 对密钥库的所有修改只有在重新启动 Elasticsearch 后才会生效。

NOTE


Elasticsearch 密钥库目前仅提供混淆功能。未来将添加密码保护。

这些设置,就像elasticsearch.yml配置文件中的常规设置一样,需要在集群中的每个节点上指定。目前,所有安全设置都是特定于节点的设置,在每个节点上必须具有相同的值。

可重新加载的安全设置

就像elasticsearch.yml中的设置值一样,对密钥库内容的更改不会自动应用于正在运行的 Elasticsearch 节点。重新读取设置需要重新启动节点。但是,某些安全设置被标记为 可重新加载。此类设置可以重新读取并应用到正在运行的节点上。

所有安全设置的值,无论是否可重新加载,在所有集群节点上都必须相同。进行所需的安全设置更改后,使用bin/elasticsearch-keystore add命令调用:

POST _nodes/reload_secure_settings

此 API 在每个集群节点上解密并重新读取整个密钥库,但仅应用可重新加载的安全设置。对其他设置的更改在下次重新启动之前不会生效。一旦调用返回,重新加载就完成了,这意味着依赖于这些设置的所有内部数据结构都已更改。一切都应该看起来好像设置从一开始就具有新值。

更改多个可重新加载的安全设置时,需要在集群每个节点上修改所有设置,然后在每次修改后发出reload_secure_settings调用而不是重新加载。

有可重新加载的安全设置:

日志配置 

Elasticsearch 使用Log4j 2进行日志记录。Log4j 2 可以使用 log4j2.properties 文件进行配置。Elasticsearch 公开了三个属性 、${sys:es.logs.base_path}、 ${sys:es.logs.cluster_name}${sys:es.logs.node_name}可以在配置文件中引用这些属性来确定日志文件的位置。属性${sys:es.logs.base_path}将解析为日志目录, ${sys:es.logs.cluster_name}将解析为集群名称(在默认配置中用作日志文件名的前缀), ${sys:es.logs.node_name}将解析为节点名称(如果明确设置了节点名称)。

例如,如果你的日志目录(path.logs)是/var/log/elasticsearch,集群名为production,${sys:es.logs.base_path}将解析为/var/log/elasticsearch, ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log 将解析为/var/log/elasticsearch/production.log

######## Server JSON ############################
appender.rolling.type = RollingFile 
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json 
appender.rolling.layout.type = ESJsonLayout 
appender.rolling.layout.type_name = server 
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz 
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 
appender.rolling.policies.time.interval = 1 
appender.rolling.policies.time.modulate = true 
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy 
appender.rolling.policies.size.size = 256MB 
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete 
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName 
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize 
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB 
################################################
appender.rolling.type配置RollingFile appender
appender.rolling.fileName配置日志文件名
appender.rolling.layout.type配置layout类型为JSON
######## Server -  old style pattern ###########
appender.rolling_old.type = RollingFile
appender.rolling_old.name = rolling_old
appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.log 
appender.rolling_old.layout.type = PatternLayout
appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n
appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.old_log.gz
old style模式appenders的配置。这些日志将保存在 *.log文件中,如果归档将保存在文件中 * .log.gz。请注意,这些应被视为已弃用,并将在未来删除。  
NOTE
任何无关的空格会影响Log4j 的配置解析;如果在此页面上复制粘贴任何 Log4j 设置,或输入任何一般的 Log4j 配置,请务必修剪前缀和尾随空格。

请注意,可以替换appender.rolling.filePattern配置项的后缀.gz.zip,以使用 zip 格式压缩滚动日志。如果删除.gz 扩展,则日志不会在滚动时被压缩。

如果要在指定的时间段内保留日志文件,可以使用带删除操作的翻转策略。

appender.rolling.strategy.type = DefaultRolloverStrategy 
appender.rolling.strategy.action.type = Delete 
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} 
appender.rolling.strategy.action.condition.type = IfFileName 
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified 
appender.rolling.strategy.action.condition.nested_condition.age = 7D 

可以加载多个配置文件(在这种情况下它们将被合并),只要它们被命名log4j2.properties并且以 Elasticsearch 配置目录作为根目录;这对于暴露额外记录器的插件很有用。logger 部分包含 java 包及其相应的日志级别。appender 部分包含日志的目的地。有关如何自定义日志记录和所有支持的 appender 的大量信息可以在Log4j 文档中找到 。

配置日志记录级别

有四种配置日志级别的方法,每种方法都有适合使用的情况。

  1. 通过命令行:(-E <name of logging hierarchy>=<level>例如, -E logger.org.elasticsearch.discovery=debug)。当在单个节点上临时调试问题时(例如,启动问题或开发过程中出现问题),这是最合适的。
  2. 通过elasticsearch.yml:(<name of logging hierarchy>: <level>例如, logger.org.elasticsearch.discovery: debug)。当临时调试问题但不通过命令行(例如,通过服务)启动 Elasticsearch 或希望在更持久的基础上调整日志记录级别时,这是最合适的。
  3. 通过集群设置

    PUT /_cluster/settings
    {
      "transient": {
        "<name of logging hierarchy>": "<level>"
      }
    }
    例如:
    PUT /_cluster/settings
    {
      "transient": {
        "logger.org.elasticsearch.discovery": "DEBUG"
      }
    }
    1. 当需要在正在运行的集群上动态调整日志级别时,这是最合适的。

  4. 通过log4j2.properties:

    logger.<unique_identifier>.name = <name of logging hierarchy>
    logger.<unique_identifier>.level = <level>

         列如        

logger.discovery.name = org.elasticsearch.discovery
logger.discovery.level = debug

        当需要对记录器进行细粒度控制时,这是最合适的(例如,想要将记录器发送到另一个文件,或以不同方式管理记录器;这是一个罕见的用例)。

弃用日志记录

        除了常规日志记录之外,Elasticsearch 还允许启用已弃用操作的日志记录。例如,这允许及早确定将来是否需要迁移某些功能。默认情况下,弃用日志记录在 WARN 级别,该级别将发出所有弃用日志消息。

logger.deprecation.level = warn

这将在配置的日志目录中创建每日滚动弃用日志文件。定期检查此文件,尤其是当打算升级到新的主要版本时。

默认日志记录配置已将弃用日志的滚动策略设置为在 1 GB 后滚动和压缩,并最多保留五个日志文件(四个滚动日志和一个活动日志)。

可以通过如下所示,在文件config/log4j2.properties中将弃用日志级别设置为error来禁用它:

logger.deprecation.name = org.elasticsearch.deprecation
logger.deprecation.level = error

如果HTTP  header中使用了X-Opaque-Id ,则可确定是什么触发了已弃用的功能。弃用JSON日志的X-Opaque-ID字段中包含了用户 ID。

{
  "type": "deprecation",
  "timestamp": "2019-08-30T12:07:07,126+02:00",
  "level": "WARN",
  "component": "o.e.d.r.a.a.i.RestCreateIndexAction",
  "cluster.name": "distribution_run",
  "node.name": "node-0",
  "message": "[types removal] Using include_type_name in create index requests is deprecated. The parameter will be removed in the next major version.",
  "x-opaque-id": "MY_USER_ID",
  "cluster.uuid": "Aq-c-PAeQiK3tfBYtig9Bw",
  "node.id": "D7fUYfnfTLa2D7y-xw6tZg"
}

JSON 日志格式

为了更轻松地解析 Elasticsearch 日志,日志现在以 JSON 格式打印。这是由 Log4J 布局属性配置的appender.rolling.layout.type = ESJsonLayout。这种布局需要设置一个属性type_name,用于在解析时区分日志流。

appender.rolling.layout.type = ESJsonLayout
appender.rolling.layout.type_name = server

每行包含一个 通过ESJsonLayout配置属性的JSON 文档。有关更多详细信息,请参阅此类javadoc。如果 JSON 文档包含异常,它将被打印在多行上。第一行将包含常规属性,后续行将包含格式化为 JSON 数组的堆栈跟踪。

NOTE

仍然可以使用自己的自定义布局。通过设置appender.rolling.layout.type属性可设置不同的布局。请参阅下面的示例:

appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %.-10000m%n
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz

 审计安全设置

可以在集群中每个节点的elasticsearch.yml配置文件中配置安全审计设置。有关更多信息,请参阅启用审计日志记录

一般审计设置

xpack.security.audit.enabled

设置为true在节点上启用审计。默认值为false。这会将审计事件放在以<clustername>_audit.json 每个节点命名的专用文件中。

审核事件设置

可以使用以下设置控制事件和有关记录内容的其他一些信息:

xpack.security.audit.logfile.events.include

指定要包含在审计输出中的事件。默认值为: access_denied, access_granted, anonymous_access_denied, authentication_failed, connection_denied, tampered_request, run_as_denied, run_as_granted

xpack.security.audit.logfile.events.exclude

从输出中排除指定的事件。默认情况下,不排除任何事件。

xpack.security.audit.logfile.events.emit_request_body

指定是否在某些事件类型(如authentication_failed)上包含来自REST请求的请求体。 默认值为false

重要

审计时不执行过滤,因此在审计事件中包含请求正文时,敏感数据可能会以纯文本形式进行审计。


本地节点信息设置

xpack.security.audit.logfile.emit_node_name

指定是否将节点名称作为字段包含在每个审计事件中。默认值为true

xpack.security.audit.logfile.emit_node_host_address

指定是否将节点的 IP 地址作为字段包含在每个审计事件中。默认值为false

xpack.security.audit.logfile.emit_node_host_name

指定是否将节点的主机名作为字段包含在每个审计事件中。默认值为false

xpack.security.audit.logfile.emit_node_id

指定是否将节点 ID 作为字段包含在每个审计事件中。这仅适用于新格式。也就是说,这个信息在<clustername>_access.log文件中是不存在的。与node name不同,如果管理员更改配置文件中的设置,其值可能会更改,节点 id 将在集群重新启动后保持不变,管理员无法更改它。默认值为true

审核日志文件事件忽略策略

这些设置会影响忽略策略 ,这些策略可以对将哪些审计事件打印到日志文件进行细粒度控制。具有相同策略名称的所有设置组合形成一个策略。如果某个事件与特定策略的所有条件匹配,则该事件将被忽略且不打印。

xpack.security.audit.logfile.events.ignore_filters.<policy_name>.users

用户名或通配符列表。指定的策略不会为匹配这些值的用户打印审计事件。

xpack.security.audit.logfile.events.ignore_filters.<policy_name>.realms

身份验证领域名称或通配符的列表。指定的策略不会为这些领域中的用户打印审计事件。

xpack.security.audit.logfile.events.ignore_filters.<policy_name>.roles

角色名称或通配符列表。指定的策略不会为具有这些角色的用户打印审计事件。如果用户有多个角色,其中一些角色不在策略范围内,策略将 涵盖此事件。

xpack.security.audit.logfile.events.ignore_filters.<policy_name>.indices

索引名称或通配符列表。当事件中的所有索引都匹配这些值时,指定的策略将不会打印审计事件。如果事件涉及多个指数,其中一些 不在保单涵盖范围内,则保单将涵盖此事件。

跨集群复制设置

可以使用集群更新设置 API在实时集群上动态更新这些跨集群复制设置 。

远程恢复设置

以下设置可用于对远程恢复期间传输的数据进行速率限制 :

ccr.indices.recovery.max_bytes_per_sec(动态)

限制每个节点上的总入站和出站远程恢复流量。由于此限制适用于每个节点,但可能有许多节点同时执行远程恢复,因此远程恢复字节总数可能远高于此限制。如果将此限制设置得太高,那么正在进行的远程恢复可能会消耗过多的带宽(或其他资源),这可能会破坏集群的稳定性。leader和follows集群都使用此设置。例如,如果在leader上设置为20mb,即使follows正在请求并且可以接收60mb/s,leader也只会以20mb/s发送给follows。默认为40mb.

高级远程恢复设置

可以设置以下专家设置来管理远程恢复消耗的资源:

ccr.indices.recovery.max_concurrent_file_chunks(动态)

控制每次恢复可以并行发送的文件块请求数。由于多个远程恢复可能已经并行运行,因此增加此专家级设置可能仅在单个分片的远程恢复未达到配置的总入站和出站远程恢复流量的情况下有所帮助ccr.indices.recovery.max_bytes_per_sec。默认为5. 最大允许值为10

ccr.indices.recovery.chunk_size(动态)

控制文件传输期间跟随者请求的块大小。默认为 1mb.

ccr.indices.recovery.recovery_activity_timeout(动态)

控制恢复活动的超时时间。此超时主要适用于leader集群。在恢复过程中,leader 集群必须打开内存中的资源来向follower 提供数据。如果leader在这段时间内没有收到follower的recovery请求,就会关闭资源。默认为 60 秒。

ccr.indices.recovery.internal_action_timeout(动态)

控制远程恢复过程中各个网络请求的超时时间。单个操作超时可能会导致恢复失败。默认为 60 秒。

Elasticsearch 转换设置

无需配置任何设置即可使用转换。它默认启用。

所有这些设置都可以添加到elasticsearch.yml配置文件中。还可以使用集群更新设置 API跨 集群更新动态设置

TIPS
动态设置优先于elasticsearch.yml 文件中的设置。

常规转换设置

xpack.transform.enabled

设置为true(默认)以在节点上启用转换。

如果在elasticsearch.yml中配置为false,则在节点上禁用转换 API。此时,节点无法启动或管理转换或接收与转换 API 相关的传输(内部)通信请求。

重要

如果要在集群中使用转换功能,则必须在所有符合主节点的节点和所有数据节点上将xpack.transform.enabled设置为true。这是默认行为。 

xpack.transform.num_transform_failure_retries(动态)

转换遇到非致命错误时重试的次数。一旦重试次数用完,转换任务将被标记为failed。默认值为10,有效最小值0 ,最大值为100。如果转换已在运行,则必须重新启动它才能使用更改后的设置。

Elasticsearch 中的索引生命周期管理设置

这些是可用于配置索引生命周期管理(ILM) 的设置。

集群级别设置

xpack.ilm.enabled

(boolean) 无论是启用还是禁用 ILM,将此设置为false禁用任何 ILM REST API 端点和功能。默认为true.

indices.lifecycle.history_index_enabled

(boolean) 是否启用 ILM 的历史索引。如果启用,ILM 会把作为 ILM 策略的一部分所采取的操作的历史记录记录到ilm-history-* 索引中。默认为true.

indices.lifecycle.poll_interval

动态时间单位值)索引生命周期管理检查符合策略标准的索引的频率。默认为10m.

索引级别设置

这些索引级 ILM 设置通常通过索引模板进行配置。有关更多信息,请参阅创建生命周期策略

index.lifecycle.name

Dynamic , string) 用于管理索引的策略名称。

index.lifecycle.rollover_alias

Dynamic , string) 索引翻转时要更新的索引别名。指定何时使用包含翻转操作的策略。当索引翻转时,别名被更新以反映该索引不再是写索引。有关翻转的更多信息,请参阅配置翻转

index.lifecycle.parse_origination_date

Dynamic , boolean) 当配置为true原始日期时,将从索引名称解析。索引格式必须与 pattern ^.*-{date_format}-\\d+匹配,其中date_formatyyyy.MM.dd,尾随数字是可选的(翻转的索引通常与完整格式匹配,例如。 logs-2016.10.31-000002)。如果索引名称与模式不匹配,索引创建将失败。

index.lifecycle.origination_date

Dynamic , long) 将用于计算其阶段转换的索引年龄的时间戳。这允许用户创建包含旧数据的索引,并使用旧数据的原始创建日期来计算索引年龄。必须是一个long(Unix 纪元)值。

许可证设置

可以在elasticsearch.yml文件中配置此许可设置。有关详细信息,请参阅 许可证管理

xpack.license.self_generated.type

设置为basic(默认)以启用基本 X-Pack 功能。

如果设置为trial,则自行生成的许可证仅允许在 30 天内访问 x-pack 的所有功能。如果需要,可以稍后将集群降级为基本许可证。

Elasticsearch 中的机器学习设置

无需配置任何设置即可使用机器学习。它默认启用。
重要
机器学习使用 SSE4.2 指令,因此只能在 CPU 支持SSE4.2 的机器上工作。如果在旧硬件上运行 Elasticsearch,则必须禁用机器学习(通过设置 xpack.ml.enabled 为 false)。
所有这些设置都可以添加到 elasticsearch.yml配置文件中。还可以使用 集群更新设置 API跨  集群更新动态设置

TIPS

动态设置优先于elasticsearch.yml 文件中的设置。

一般机器学习设置

node.ml

        设置为true(默认)将节点标识为机器学习节点

        如果在elasticsearch.yml中设置为false,则节点无法运行作业。如果设置为 true但是xpack.ml.enabled设置为falsenode.ml则忽略该设置并且节点无法运行作业。如果要运行作业,集群中必须至少有一个机器学习节点。

 重要


在专用协调节点或专用主节点上,禁用该node.ml角色。

xpack.ml.enabled

        设置为true(默认)以在节点上启用机器学习。

        如果设置为false,则在节点上禁用机器学习 API。因此,节点无法打开作业、启动数据馈送或接收与机器学习 API 相关的传输(内部)通信请求。如果节点是协调节点,来自客户端(包括 Kibana)的机器学习请求也会失败。有关在特定 Kibana 实例中禁用机器学习的更多信息,请参阅 Kibana 机器学习设置

重要


如果想在集群中使用机器学习功能,建议在所有节点上设置xpack.ml.enabledtrue。这是默认行为。至少,它必须在所有符合主节点的节点上启用。如果要在客户端或 Kibana 中使用机器学习功能,还必须在所有协调节点上启用它。 

xpack.ml.inference_model.cache_size

        允许的最大推理缓存大小。推理缓存存在于每个摄取节点上的 JVM 堆中。缓存为inference处理器提供更快的处理时间 。该值可以是静态字节大小的值(即“2gb”)或总分配堆的百分比。默认值为“40%”。

xpack.ml.inference_model.time_to_live

        推理模型缓存中模型的生存时间 (TTL)。TTL 是根据上次访问计算得出的。所述inference处理器尝试从高速缓存模型加载。如果inference处理器在 TTL 期间没有收到任何文档,则引用模型将被标记为从缓存中逐出。如果稍后处理文档,模型将再次加载到缓存中。默认为5m.

xpack.ml.max_inference_processors(动态)

  inference所有摄取管道中允许 的类型处理器总数。一旦达到限制,inference就不允许向管道添加处理器。默认为50.

xpack.ml.max_machine_memory_percent(动态)

        机器学习可用于运行分析过程的机器内存的最大百分比。(这些进程独立于 Elasticsearch JVM。)默认为 30%。该限制基于机器的总内存,而不是当前的可用内存。如果这样做会导致机器学习作业的估计内存使用量超过限制,则不会将作业分配给节点。

xpack.ml.max_model_memory_limit(动态)

  model_memory_limit可以为该节点上的任何作业设置 的最大属性值。如果尝试创建具有大于model_memory_limit此设置值的属性值的作业,则会发生错误。更新此设置时,现有作业不受影响。有关该model_memory_limit属性的更多信息 ,请参阅`analysis_limits`

xpack.ml.max_open_jobs(动态)

        一个节点上可以同时运行的最大作业数。默认为 20. 在这种情况下,作业包括异常检测作业和数据框分析作业。最大作业数也受内存使用情况的限制。因此,如果作业的估计内存使用量高于允许值,则节点上运行的作业将减少。在 7.1 版之前,此设置是每个节点的非动态设置。它在 7.1 版中成为集群范围的动态设置。因此,只有在集群中的每个节点都运行 7.1 或更高版本后,才会使用节点启动后对其值的更改。最大允许值为512

xpack.ml.node_concurrent_job_allocations(动态)

  每个节点上可以同时处于opening状态的最大作业数。通常,作业在转移到open状态之前会在此状态下花费少量时间。在打开时恢复大量模型的作业在opening状态中肯定会花费更多时间。默认为2.

高级机器学习设置

这些设置适用于高级用例;默认值通常就足够了:

xpack.ml.enable_config_migration(动态)

        预留配置。

xpack.ml.max_anomaly_records(动态)

        每个桶输出的最大记录数。默认值为 500

xpack.ml.max_lazy_ml_nodes(动态)

        懒启动机器学习节点的数量。在第一个机器学习作业打开之前不需要 ML 节点的情况下很有用。它默认为0并且有一个最大可接受的值3。如果 ML 节点的当前数量>=此设置,则假定没有更多可用的惰性节点,因为已经提供了所需数量的节点。当使用此设置打开作业>0并且没有节点可以接受该作业时,该作业将保持该OPENING状态,直到将新的 ML 节点添加到集群并将作业分配为在该节点上运行。

 重要


此设置假定某些外部进程能够将 ML 节点添加到集群中。此设置仅在与此类外部进程结合使用时才有用。

xpack.ml.process_connect_timeout(动态)

        与 Elasticsearch JVM 分开运行的机器学习进程的连接超时时间。默认为10s. 一些机器学习与 Elasticsearch JVM 分开运行的进程完成。当此类进程启动时,它们必须连接到 Elasticsearch JVM。如果此类进程未在此设置指定的时间段内连接,则假定该进程已失败。默认为10s. 此设置的最小值为5s

Elasticsearch 中的监控设置

默认情况下,监控处于启用状态,但数据收集处于禁用状态。要启用数据收集,请使用xpack.monitoring.collection.enabled设置。

可以在elasticsearch.yml文件中配置这些监控设置。还可以使用集群更新设置 API动态设置其中一些 设置

要调整如何监控数据显示在监控界面,配置 kibana.yml中的 xpack.monitoring设置。要控制如何从Logstash收集监控数据,在logstash.yml中配置 xpack.monitoring设置 。

有关更多信息,请参阅监控集群

常规监控设置

xpack.monitoring.enabled

设置为true(默认)以在节点上为 Elasticsearch 启用 Elasticsearch X-Pack 监控。

NOTE


要启用数据收集,还必须设置xpack.monitoring.collection.enabled 为true。其默认值为false

监控集合设置

这些xpack.monitoring.collection设置控制如何从 Elasticsearch 节点收集数据。可以使用集群更新设置 API动态更改所有监控集合设置。

xpack.monitoring.collection.enabled(动态)

        [ 6.3.0 ] 设置为true启用监控数据的收集。当此设置为false(默认)时,不会收集 Elasticsearch 监控数据,并忽略来自其他来源(例如 Kibana、Beats 和 Logstash)的所有监控数据。

xpack.monitoring.collection.interval(动态)

        从 7.0.0 开始,不再支持设置为-1以禁用数据收集。 [ 6.3.0 ]

        控制收集数据样本的频率。默认为10s. 如果修改收集间隔,请将kibana.ymlxpack.monitoring.min_interval_seconds 选项设置为相同的值。

xpack.monitoring.elasticsearch.collection.enabled(动态)

        控制是否应收集有关 Elasticsearch 集群的统计信息。默认为true. 这与 xpack.monitoring.collection.enabled 不同,它允许启用或禁用所有监控收集。但是,此设置只是禁用 Elasticsearch 数据的收集,同时仍允许其他数据(例如 Kibana、Logstash、Beats 或 APM 服务器监控数据)通过此集群。

xpack.monitoring.collection.cluster.stats.timeout(动态)

        ( time value ) 收集集群统计信息的超时时间。默认为10s.

xpack.monitoring.collection.node.stats.timeout(动态)

        ( time value ) 收集节点统计信息的超时时间。默认为10s.

xpack.monitoring.collection.indices(动态)

        控制 Monitoring 从哪些索引收集数据。默认为所有索引。将索引名称指定为逗号分隔的列表,例如test1,test2,test3。名称可以包括通配符,例如test*。可以通过添加-来明确排除索引。例如test*,-test3将监视所有以test开头的索引,除了test3。 像 .security* 或 .kibana* 这样的系统索引总是以 .开头,通常应该被监控。考虑添加.*到索引列表中以确保监控系统索引。例如.*,test*,-test3

xpack.monitoring.collection.index.stats.timeout(动态)

        ( time value ) 收集索引统计信息的超时时间。默认为10s.

xpack.monitoring.collection.index.recovery.active_only(动态)

        控制是否收集所有回收。设置为true仅收集活动恢复。默认为false.

xpack.monitoring.collection.index.recovery.timeout(动态)

        ( time value ) 收集恢复信息的超时时间。默认为10s.

xpack.monitoring.history.duration(动态)

        ( time value ) 保留期限,超过此期限,Monitoring 导出器创建的索引将被自动删除。默认为7d(7 天)。

        此设置的最小值为1d(1 天)以确保正在监视某些内容,并且无法禁用它。

重要


此设置目前仅影响local-type 导出器。使用http导出器创建的索引不会自动删除。

xpack.monitoring.exporters

        配置代理存储监控数据的位置。默认情况下,代理使用本地导出器来索引安装它的集群上的监控数据。使用 HTTP 导出器将数据发送到单独的监控集群。有关详细信息,请参阅本地导出器设置、 HTTP 导出器设置和 工作原理

本地出口商设置

        该local出口是通过监测使用的默认出口。顾名思义,它将数据导出到本地集群,这意味着不需要太多配置。

如果不提供任何导出器,则 Monitoring 会自动创建一个。如果提供了任何导出器,则不会添加默认值。

xpack.monitoring.exporters.my_local:
  type: local

type

        本地导出器的值必须始终为local并且是必需的。

use_ingest

        是否为每个批量请求向集群和管道处理器提供占位符管道。默认值为true。如果禁用,则意味着它不会使用管道,这意味着未来的版本无法自动升级批量请求以适应未来的需求。

cluster_alerts.management.enabled

        是否为此集群创建集群警报。默认值为true。要使用此功能,必须启用 Watcher。如果有基本许可证,则不会显示集群警报。

HTTP 导出器设置

        以下列出了可以随http导出器提供的设置。所有设置都按照为导出器选择的名称显示:

xpack.monitoring.exporters.my_remote:
  type: http
  host: ["host:port", ...]

type

        HTTP 导出器的值必须始终为http并且是必需的。

host

        Host 支持多种格式,既可以是数组,也可以是单个值。支持的格式包括 hostnamehostname:porthttp://hostname http://hostname:porthttps://hostname,和 https://hostname:port。不能假设Hosts。默认协议始终为http,如果未提供host端口,则默认端口始终为9200

xpack.monitoring.exporters:
  example1:
    type: http
    host: "10.1.2.3"
  example2:
    type: http
    host: ["http://10.1.2.4"]
  example3:
    type: http
    host: ["10.1.2.5", "10.1.2.6"]
  example4:
    type: http
    host: ["https://10.1.2.3:9200"]

auth.username

        如果提供了auth.password,则需要用户名。

auth.password

  auth.username的密码。

connection.timeout

        ( time value ) HTTP 连接应该等待套接字为请求打开的时间量。默认值为6s

connection.read_timeout

        ( time value ) HTTP 连接应该等待套接字发回响应的时间量。默认值为10 * connection.timeout(如果两者都没有设置则为60s)。

ssl

        每个 HTTP 导出器都可以定义自己的 TLS / SSL 设置或继承它们。请参阅下面的 TLS/SSL 部分

proxy.base_path

        为任何传出请求添加前缀的基本路径,例如/base/path(例如,批量请求将作为/base/path/_bulk发送)。没有默认值。

headers

        添加到每个请求的可选标头,可以帮助通过代理路由请求。

xpack.monitoring.exporters。my_remote:
 headers:
 X-My-Array: [abc, def, xyz]
     X-My-Header: abc123   

        基于数组的标头发送n次,n是数组的大小。Content-Type 和Content-Length无法设置。监控代理创建的任何header都将覆盖此处定义的任何内容。

index.name.time_format

        默认情况下,用于更改每日监控索引的默认日期后缀的机制。默认值为yyyy.MM.dd,这就是每天创建索引的原因。

use_ingest

        是否为每个批量请求向监控集群和管道处理器提供占位符管道。默认值为true。如果禁用,则意味着它不会使用管道,这意味着未来的版本无法自动升级批量请求以适应未来的需求。

cluster_alerts.management.enabled

        是否为此集群创建集群警报。默认值为true。要使用此功能,必须启用 Watcher。如果有基本许可证,则不会显示集群警报。

cluster_alerts.management.blacklist

        防止创建特定的集群警报。它还删除当前集群中已存在的任何适用监视。

可以将以下任何手表标识符添加到黑名单:

  • elasticsearch_cluster_status
  • elasticsearch_version_mismatch
  • elasticsearch_nodes
  • kibana_version_mismatch
  • logstash_version_mismatch
  • xpack_license_expiration

例如:["elasticsearch_version_mismatch","xpack_license_expiration"]

X-Pack 监控 TLS/SSL 设置

可以配置以下 TLS/SSL 设置。

xpack.monitoring.exporters.$NAME.ssl.supported_protocols

        支持的协议与版本。有效协议:SSLv2HelloSSLv3TLSv1TLSv1.1TLSv1.2TLSv1.3. 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认为TLSv1.3,TLSv1.2,TLSv1.1. 否则,默认为 TLSv1.2,TLSv1.1

NOTE


如果xpack.security.fips_mode.enabledtrue,则不能使用 SSLv2HelloSSLv3。参见FIPS 140-2

xpack.monitoring.exporters.$NAME.ssl.verification_mode

        控制证书的验证。有效值为:

  • full,它验证提供的证书是否由受信任的机构 (CA) 签名,并验证服务器的主机名(或 IP 地址)是否与证书中标识的名称匹配。
  • certificate,它验证提供的证书是否由受信任的机构 (CA) 签名,但不执行任何主机名验证。
  • none不验证服务器的证书。此模式禁用了 SSL/TLS 的许多安全优势,只有在经过非常仔细的考虑后才能使用。它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产集群上使用它。

    默认值为full

xpack.monitoring.exporters.$NAME.ssl.cipher_suites

        支持的密码套件因使用的 Java 版本而异。例如,对于11版的默认值是TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHATLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA

 NOTE

上面的默认密码套件列表包括 TLSv1.3 密码,需要Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files以进行 256 位 AES 加密。如果TLSv1.3不可用,TLSv1.3 ciphers TLS_AES_256_GCM_SHA384和 TLS_AES_128_GCM_SHA256不包括在默认列表。如果 256 位 AES 不可用,则名字中包含AES_256的ciphers不包含在默认列表中。最后,AES GCM 在 11 之前的 Java 版本中存在已知的性能问题,并且仅在使用 Java 11 或更高版本时才包含在默认列表中。

 有关更多信息,请参阅 Oracle 的 Java 加密体系结构文档

X-Pack 监控 TLS/SSL 密钥和可信证书设置

        以下设置用于指定在通过 SSL/TLS 连接进行通信时应使用的私钥、证书和可信证书。私钥和证书是可选的,如果服务器需要客户端身份验证进行 PKI 身份验证,再使用它们。

PEM 编码文件

使用 PEM 编码文件时,请使用以下设置:

xpack.monitoring.exporters.$NAME.ssl.key

包含私钥的 PEM 编码文件的路径。

xpack.monitoring.exporters.$NAME.ssl.key_passphrase

用于解密私钥的密码。由于密钥可能未加密,因此该值是可选的。

xpack.monitoring.exporters.$NAME.ssl.secure_key_passphrase安全

用于解密私钥的密码。由于密钥可能未加密,因此该值是可选的。

xpack.monitoring.exporters.$NAME.ssl.certificate

指定与密钥关联的 PEM 编码证书(或证书链)的路径。

xpack.monitoring.exporters.$NAME.ssl.certificate_authorities

应受信任的 PEM 编码证书文件的路径列表。

Java 密钥库文件

使用包含应信任的私钥、证书和证书的 Java 密钥库文件 (JKS) 时,请使用以下设置:

xpack.monitoring.exporters.$NAME.ssl.keystore.path

包含私钥和证书的密钥库文件的路径。

xpack.monitoring.exporters.$NAME.ssl.keystore.password

密钥库的密码。

xpack.monitoring.exporters.$NAME.ssl.keystore.secure_password安全

密钥库的密码。

xpack.monitoring.exporters.$NAME.ssl.keystore.key_password

密钥库中密钥的密码。默认值为密钥库密码。

xpack.monitoring.exporters.$NAME.ssl.keystore.secure_key_password安全

密钥库中密钥的密码。默认值为密钥库密码。

xpack.monitoring.exporters.$NAME.ssl.truststore.path

包含要信任的证书的密钥库的路径。它必须是 Java 密钥库 (jks) 或 PKCS#12 文件。

xpack.monitoring.exporters.$NAME.ssl.truststore.password

信任库的密码。

xpack.monitoring.exporters.$NAME.ssl.truststore.secure_password安全

信任库的密码。

PKCS#12 文件

Elasticsearch 可以配置为使用包含私钥、证书和应该信任的证书的PKCS#12 容器文件(.p12或多个.pfx文件)。

PKCS#12 文件的配置方式与 Java 密钥库文件相同:

xpack.monitoring.exporters.$NAME.ssl.keystore.path

包含私钥和证书的密钥库文件的路径。

xpack.monitoring.exporters.$NAME.ssl.keystore.type

密钥库文件的格式。它必须是jksPKCS12。如果密钥库路径以“.p12”、“.pfx”或“.pkcs12”结尾,则此设置默认为PKCS12。否则,它默认为jks

xpack.monitoring.exporters.$NAME.ssl.keystore.password

密钥库的密码。

xpack.monitoring.exporters.$NAME.ssl.keystore.secure_password安全

密钥库的密码。

xpack.monitoring.exporters.$NAME.ssl.keystore.key_password

密钥库中密钥的密码。默认值为密钥库密码。

xpack.monitoring.exporters.$NAME.ssl.keystore.secure_key_password安全

密钥库中密钥的密码。默认值为密钥库密码。

xpack.monitoring.exporters.$NAME.ssl.truststore.path

包含要信任的证书的密钥库的路径。它必须是 Java 密钥库 (jks) 或 PKCS#12 文件。

xpack.monitoring.exporters.$NAME.ssl.truststore.type

将此设置PKCS12为指示信任库是 PKCS#12 文件。

xpack.monitoring.exporters.$NAME.ssl.truststore.password

信任库的密码。

xpack.monitoring.exporters.$NAME.ssl.truststore.secure_password安全

信任库的密码。

PKCS#11 令牌

Elasticsearch 可以配置为使用包含私钥、证书和应该信任的证书的 PKCS#11 令牌。

PKCS#11 令牌需要在 JVM 级别进行额外配置,可以通过以下设置启用:

xpack.monitoring.exporters.$NAME.keystore.type

将此设置PKCS11为指示应将 PKCS#11 令牌用作密钥库。

xpack.monitoring.exporters.$NAME.truststore.type

信任库文件的格式。对于 Java 密钥库格式,请使用jks. 对于 PKCS#12 文件,请使用PKCS12. 对于 PKCS#11 令牌,请使用PKCS11. 默认值为 jks.

NOTE

在为JVM 配置用作 Elasticsearch 的密钥库或信任库的 PKCS#11 令牌时,可以通过正在配置的上下文ssl.truststore.password 或ssl.truststore.secure_password在配置的上下文中设置适当的值来配置令牌的 PIN 。由于只能配置一个 PKCS#11 令牌,因此只有一个密钥库和信任库可用于在 Elasticsearch 中进行配置。这反过来意味着只有一个证书可用于传输层和 http 层中的 TLS。

Elasticsearch 中的安全设置 

暂未翻译

Elasticsearch 中的快照生命周期管理设置

暂未翻译

Elasticsearch 中的SQL 访问设置

暂未翻译

Elasticsearch 中的观察者设置

暂未翻译