Elasticsearch 6.3官方教程翻译系列(2.2):配置

原创 esjson 搜索引擎 1865

2.2 配置 (Configuring Elasticsearch)

Elasticsearch提供了很好的默认设置,并且只需要很少的配置。
使用群集更新设置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。
config目录的位置可以通过ES_PATH_CONF环境变量进行更改,如下所示:

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

或者,您可以通过命令行或通过shell配置文件导出ES_PATH_CONF环境变量。

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

配置文件格式
配置格式是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}

提示设置(已经弃用)

(已经弃用)

对于不希望存储在配置文件中的设置,可以使用值$ {prompt.text}或$ {prompt.secret}并在前台启动Elasticsearch。
$ {prompt.secret}已禁用回显功能,以便输入的值不会显示在您的终端中;
$ {prompt.text}将允许您在输入时看到该值。例如:

node:
  name: ${prompt.text}

启动Elasticsearch时,系统会提示您输入实际值,如下所示:

Enter value for [node.name]:

2.2.1 设置JVM选项 (Setting JVM options)

您应该很少需要更改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选项
-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文件或环境变量ES_JAVA_OPTS设置JVM选项,如上所述。

2.2.2 安全设置 (Secure Settings)

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

注意: 这里的所有命令都应该以运行Elasticsearch的用户身份运行。

注意: 只有一些设置被设计为从密钥库中读取。查看每个设置的文档以查看它是否作为密钥库的一部分受支持。

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

注意: elasticsearch密钥库目前仅提供混淆功能。将来,密码保护将被添加。

2.2.2.1 创建密钥存储区(Creating the keystore)

要创建elasticsearch.keystore,请使用create命令:

bin/elasticsearch-keystore create

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

2.2.2.2 列出keystore中的设置

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

bin/elasticsearch-keystore list

2.2.2.3 添加字符串设置

可以使用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

2.2.2.4 删除设置

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

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

2.2.3 记录配置 (Logging configuration)

Elasticsearch使用Log4j 2进行日志记录。Log4j 2可以使用log4j2.properties文件进行配置。Elasticsearch公开了三个属性$ {sys:es.logs.base_path},$ {sys:es.logs.cluster_name}和$ {sys:es.logs.node_name}(如果节点名称是通过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。

# 1.配置RollingFile appender
appender.rolling.type = RollingFile 
appender.rolling.name = rolling
# 2.记录到/var/log/elasticsearch/production.log
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log 
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
# 3.将日志滚动到/var/log/elasticsearch/production-yyyy-MM-dd-i.log;日志将被压缩在每一卷,i变量会增加
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz 
appender.rolling.policies.type = Policies
# 4.使用基于时间的滚动策略
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 
# 5.每日滚动日志
appender.rolling.policies.time.interval = 1 
# 6. 在日边界上对齐滚动条(而不是每24小时滚动一次)
appender.rolling.policies.time.modulate = true 
# 7.使用基于尺寸的滚动策略
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy 
# 8.在256 MB后滚动日志(生成新文件)
appender.rolling.policies.size.size = 256MB 
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
# 9.滚动日志时使用删除操作
appender.rolling.strategy.action.type = Delete 
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
# 10.只删除符合文件模式的日志
appender.rolling.strategy.action.condition.type = IfFileName 
# 11.该模式仅用于删除主日志
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
# 12. 只有在累积了太多压缩日志的情况下才能删除
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize 
# 13. 压缩日志上的大小条件为2 GB
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB

Log4j的配置解析会被任何无关的空白混淆;如果您在此页面上复制并粘贴任何Log4j设置,或者通常输入任何Log4j配置,请务必修剪任何前导和尾随空格。

请注意,您可以用appender.rolling.filePattern中的.zip替换.zz来压缩使用zip格式的滚动日志。
如果删除.gz扩展名,则日志在滚动时不会被压缩。

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

# 1.配置DefaultRolloverStrategy
appender.rolling.strategy.type = DefaultRolloverStrategy 
# 2.配置处理生成新文件时的删除操作
appender.rolling.strategy.action.type = Delete 
# 3.Elasticsearch日志的基本路径
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} 
# 4.处理翻车时应用的条件
appender.rolling.strategy.action.condition.type = IfFileName 
# 5.从匹配glob $ {sys:es.logs.cluster_name}的基路径删除文件 - *;这是日志文件滚动到的glob;这只需要删除滚动的Elasticsearch日志,但不能删除弃用和慢日志
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
# 6.适用于与glob匹配的文件的嵌套条件
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified 
# 7. 保留七天的日志
appender.rolling.strategy.action.condition.nested_condition.age = 7D

只要将多个配置文件命名为log4j2.properties并将Elasticsearch config目录作为祖先,就可以加载多个配置文件(在这种情况下,它们将被合并)。
这对于公开其他记录器的插件很有用。
记录器部分包含Java软件包及其相应的日志级别。
appender部分包含日志的目标。
有关如何自定义日志记录以及所有支持的appender的详细信息可以在Log4j文档中找到。

2.2.3.1 配置日志级别设置

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

1.通过命令行:-E <日志层次结构的名称> = <level>(例如,-E logger.org.elasticsearch.transport = trace)。
当您临时在单个节点上调试问题时(例如,启动问题或开发期间),这是最合适的。

2.通过elasticsearch.yml:<记录层次结构的名称>:<level>(例如,logger.org.elasticsearch.transport:trace)。
当您临时调试问题但不是通过命令行(例如,通过服务)启动Elasticsearch,或者希望更加永久地调整日志记录级别时,这是最合适的。

3.通过群集设置

PUT /_cluster/settings
{
  "transient": {
    "<name of logging hierarchy>": "<level>"
  }
}

例如:

PUT /_cluster/settings
{
  "transient": {
    "logger.org.elasticsearch.transport": "trace"
  }
}

当您需要动态调整正在运行的群集的日志记录级别时,这是最合适的。

  1. 通过log4j2.properties
logger.<unique_identifier>.name = <name of logging hierarchy>
logger.<unique_identifier>.level = <level>

例如:

logger.transport.name = org.elasticsearch.transport
logger.transport.level = trace

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

2.2.3.2 弃用操作记录

除了常规日志记录之外,Elasticsearch还允许您启用已弃用操作的日志记录。
例如,如果您将来需要迁移某些功能,则可以提前确定。
默认情况下,弃用日志记录在WARN级别处处于启用状态,即所有弃用日志消息将发出的级别。

logger.deprecation.level = warn

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

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

您可以通过将弃用日志级别设置为error,在config / log4j2.properties文件中禁用它。

Elasticsearch 教程 原创

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

关于我

过所爱的生活,爱所过的生活,快乐的生活,才能生活快乐,快乐的工作,才有快乐人生,生活的理想其实就是理想的生活!