Elasticsearch7.2中文教程翻译(六): 配置Elasticsearch

@高效码农  July 26, 2019

配置Elasticsearch

Elasticsearch具有良好的默认值,只需要很少的配置。可以使用Cluster Update Settings API 在正在运行的群集上更改大多数设置 。

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

配置文件位置
Elasticsearch有三个配置文件:

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

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

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

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

或者,您可以通过命令行或通过shell配置文件来export获取ES_PATH_CONF环境变量。

对于包分发,config目录位置默认为 /etc/elasticsearch。config目录的位置也可以通过ES_PATH_CONF环境变量进行更改,但请注意,在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}

设置JVM选项

您应该很少需要更改Java虚拟机(JVM)选项。如果这样做,最可能的更改是设置堆大小。本文档的其余部分详细说明了如何设置JVM选项。

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

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

  • 仅包含空格的行被忽略
  • 以#开头的行被视为注释,并被忽略

    # this is a comment
  • -开头的行被视为JVM选项,该选项独立于JVM的版本而应用(与jvm版本无关)

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

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

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

    8-9:-Xmx2g
  • 所有其他行都被忽略了

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

设置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将其他不受支持的设置添加到密钥库将导致Elasticsearch无法启动。请参阅每个设置的文档,以查看它是否作为密钥库的一部分受支持。
  • 只有在重新启动Elasticsearch之后,对密钥库的所有修改才会生效。
  • elasticsearch密钥库目前仅提供模糊处理。将来,将添加密码保护。

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

创建密钥库
要创建elasticsearch.keystore,请使用以下create命令:

bin/elasticsearch-keystore create

文件elasticsearch.keystore将与elasticsearch.yml一起创建。

列出密钥库设置
使用以下list命令可以获得密钥库中的设置列表:

bin/elasticsearch-keystore list

添加字符串设置
可以使用以下add命令添加敏感字符串设置,例如云插件的身份验证凭据:

bin/elasticsearch-keystore add the.setting.name.to.set

该工具将提示设置的值。要通过stdin传递值,请使用--stdin标志:

cat /file/containing/setting/value | bin/elasticsearch-keystore add --stdin the.setting.name.to.set

添加文件设置
您可以使用该add-file命令添加敏感文件,例如云插件的身份验证密钥文件。确保在设置名称后包含文件路径作为参数。

bin/elasticsearch-keystore add-file the.setting.name.to.set /path/example-file.json

删除设置
要从密钥库中删除设置,请使用以下remove命令:

bin/elasticsearch-keystore remove the.setting.name.to.remove

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

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

POST _nodes/reload_secure_settings

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

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

记录日志

https://www.elastic.co/guide/en/elasticsearch/reference/current/logging.html#logging

审核安全设置

您可以启用审计功能来跟踪与安全相关的事件,例如身份验证失败和拒绝连接。记录这些事件使您能够监视集群中的可疑活动,并在发生攻击时提供证据。所有这些设置都可以添加到elasticsearch.yml配置文件中。

一般审核设置

xpack.security.audit.enabled

  • 设置为true在节点上启用审核。默认值为false。这会将审计事件_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

  • 指定是否在某些事件类型(例如)上包含来自REST请求的请求正文authentication_failed。默认值为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

  • 指定是否将节点标识包含在每个审核事件中作为字段。这仅适用于新格式。也就是说,该信息不存在于_access.log文件中。与节点名称不同,如果管理员更改配置文件中的设置,其值可能会更改,则节点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

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


添加新评论