Elasticseach配置

一、简介

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

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

1.1、配置文件位置

ElasticSearch有三个配置文件:

  • 使用ElasticSearch.yml配置ElasticSearch
  • 使用jvm.options配置ElasticSearch JVM
  • 使用log4j2.properties配置ElasticSearch日志记录

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

1.2、配置文件格式

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

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

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

1.3、环境变量替换

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

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选项。
-Xmx2g
  • 以数字开头、后跟a:后跟a-的行被视为一个JVM选项,该选项仅在JVM版本与数字匹配时适用。
8:-Xmx2g
  • 以数字开头、后跟-后跟A:的行被视为一个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选项,如上所述。

三、安全设置

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

注意:这里的所有命令都应该作为运行ElasticSearch的用户运行。

重要:只有一些设置设计为从密钥库中读取。但是,密钥库没有有效的来阻止不支持的设置。向密钥库添加不支持的设置将导致ElasticSearch向密钥库添加其他不支持的设置将导致ElasticSearch无法启动。参阅每个设置的文档,以查看它是否受密钥库的支持。

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

注意:ElasticSearch密钥库目前只提供模糊处理。以后会增加密码保护。

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

3.1、创建密钥库

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

bin/elasticsearch-keystore create

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

3.2、列出keystore中的设置

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

bin/elasticsearch-keystore list

3.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

3.4、添加文件设置

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

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

3.5、删除设置

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

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

3.6、重新加载的安全设置

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

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

POST _nodes/reload_secure_settings
---------------------------------------
curl -X POST "localhost:9200/_nodes/reload_secure_settings?pretty"

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

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

四、日志记录配置

ElasticSearch使用log4j 2进行日志记录。可以使用log4j2.properties文件配置log4j 2。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 <1>
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json <2>
appender.rolling.layout.type = ESJsonLayout <3>
appender.rolling.layout.type_name = server <4>
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz  <5>
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy <6>
appender.rolling.policies.time.interval = 1 <7>
appender.rolling.policies.time.modulate = true <8> 
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy <9>
appender.rolling.policies.size.size = 256MB <10>
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete <11>
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName <12> 
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* <13>
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize <14>
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB <15>
################################################

配置RollingFile附加器

  • 配置RollingFile附加器

  • 记录到/var/log/elasticsearch/production.json

  • 使用JSON输出。

  • type_name是一个填充esjsonlayout中类型字段的标志。它可以用来在解析日志时更容易地区分不同类型的日志。

  • 滚动压缩到自增I的/var/log/elasticsearch/production-yyyy-MM-dd-i.json

  • 使用time-based的滚动策略

  • 每天滚动日志

  • 在日边界上对齐辊(而不是每隔24小时滚动一次)

  • 使用size-based的滚动策略

  • 256 MB后的滚动日志

  • 滚动日志时使用删除操作

  • 仅删除与文件模式匹配的日志

  • 模式是只删除主日志

  • 仅当我们累积了太多压缩日志时才删除

  • 压缩日志的大小条件为2 GB

######## 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 <1>
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

旧样式模式附加器的配置。这些日志将保存在*.log文件中,如果存档,则保存在*.log.gz文件中。请注意,这些应该被视为已弃用,并将在将来删除。

注意:log4j的配置解析会被任何无关的空白混淆;如果您复制并粘贴此页上的任何log4j设置,或者输入任何log4j配置,请确保修剪任何前导和尾随的空白。

注意,您可以在appender.rolling.filepattern中将.gz替换为.zip,以使用zip格式压缩已卷日志。如果删除.gz扩展名,则不会在滚动日志时对其进行压缩。

如果要将日志文件保留指定的一段时间,可以使用带有删除操作的滚动策略。

appender.rolling.strategy.type = DefaultRolloverStrategy <1>
appender.rolling.strategy.action.type = Delete <2>
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} <3>
appender.rolling.strategy.action.condition.type = IfFileName <4>
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* <5>
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified <6>
appender.rolling.strategy.action.condition.nested_condition.age = 7D <7>
  • 配置默认Rolloverstrategy

  • 配置用于处理滚动的Delete 操作

  • ElasticSearch日志的基本路径

  • 处理滚动时应用的条件

  • 从与glob${sys:es.logs.cluster_name}-*匹配的基本路径中删除文件;这是要将日志文件滚动到的glob;这只需要删除滚动的ElasticSearch日志,而不必删除取消预测和慢速日志。

  • 要应用于与glob匹配的文件的嵌套条件

  • 保留日志7天

  • 只要将多个配置文件命名为log4j2.properties并将elasticsearch config目录作为根目录,就可以加载多个配置文件(在这种情况下,它们将被合并);这对于公开其他记录器的插件很有用。记录器部分包含Java包及其对应的日志级别。appender部分包含日志的目标。

4.1、配置日志等级

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

  • 1、通过命令行:-E <name of logging hierarchy>=<level> (e.g.,-E logger.org.elasticsearch.transport=trace)。当您在单个节点上临时调试一个问题(例如,启动或开发过程中的问题)时,这是最合适的方法。
  • 2、通过elasticsearch.yml: : (e.g.,logger.org.elasticsearch.transport: trace)当您临时调试一个问题,但没有通过命令行(例如,通过服务)启动ElasticSearch,或者您希望在更持久的基础上调整日志级别时,这是最合适的。
  • 3、通过cluster settings:
PUT /_cluster/settings
{
  "transient": {
    "<name of logging hierarchy>": "<level>"
  }
}

例如:

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

当需要动态地调整活动运行的集群上的日志级别时,这是最合适的。

  • 4、通过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

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

4.2、废弃的日志

除了常规日志记录之外,ElasticSearch还允许您启用不推荐的操作的日志记录。例如,如果您将来需要迁移某些功能,您可以提前确定。默认情况下,禁用日志记录在警告级别启用,即所有禁用日志消息将发出的级别。

logger.deprecation.level = warn

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

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

您可以在config/log4j2.properties文件中通过将取消预测日志级别设置为error来禁用它。

4.3、JSON log format

为了使分析ElasticSearch日志更容易,日志现在以JSON格式打印。这是由log4j布局属性appender.rolling.layout.type=esjsonlayout配置的。此布局需要设置一个type_name属性,用于在分析时区分日志流。

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

每一行包含一个json文档,其属性在ESJsonLayout中配置。但是,如果一个JSON文档包含一个异常,它将被打印在多行上。第一行将包含常规属性,随后的行将包含格式化为JSON数组的stacktrace。

注意:您仍然可以使用自己的自定义布局。为此,请用其他布局替换行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可在节点上启用审核。默认值为假。这会将审核事件放入每个节点上名为_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

指定是否将node name作为字段包含在每个审核事件中。默认值为true。

xpack.security.audit.logfile.emit_node_host_address

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

xpack.security.audit.logfile.emit_node_host_name

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

xpack.security.audit.logfile.emit_node_id

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

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

这些设置会影响ignore policies ,这些策略允许对哪些审核事件打印到日志文件进行细粒度控制。具有相同策略名称的所有设置组合成一个策略。如果一个事件符合特定策略的所有条件,那么它将被忽略而不打印。

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

索引名或通配符的列表。当事件中的所有索引与这些值匹配时,指定的策略将不打印审核事件。如果事件涉及多个指数,其中一些指数不包含在策略中,则策略将不包含此事件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值