配置Elasticsearch
Last updated
Was this helpful?
Last updated
Was this helpful?
Elasticsearch具有良好的默认设置,并且只需要很少的配置。可以使用 API 在正在运行的群集上更改大多数设置 。
配置文件应包含特定于节点的设置(例如node.name
和paths),或包含节点才能加入集群所需的设置,例如cluster.name
和network.host
。
Elasticsearch具有三个配置文件:
elasticsearch.yml
用于配置Elasticsearch
jvm.options
用于配置Elasticsearch JVM设置
log4j2.properties
用于配置Elasticsearch日志记录
这些文件位于config目录中,其默认位置取决于安装是来自归档发行版(tar.gz
或 zip
)还是软件包发行版(Debian或RPM软件包)。
对于存档分发,配置目录位置默认为 $ES_HOME/config
。可以通过ES_PATH_CONF
环境变量来更改config目录的位置, 如下所示:
或者,您可以通过命令行或您的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
在这些文件之一中编辑 条目,以更改配置目录位置。
配置格式为。这是更改数据和日志目录的路径的示例:
设置也可以按以下方式展平:
${...}
在配置文件中用符号引用的环境变量将替换为环境变量的值,例如:
JVM选项文件必须具有后缀.options,并包含遵循特殊语法的以行分隔的JVM参数列表:
仅由空格组成的行将被忽略
以开头的行#
被视为注释,并被忽略
以-
开头的行被视为独立于JVM版本而应用的JVM选项
以数字开头:
后接-
的行被视为仅在JVM版本与该数字匹配时才适用的JVM选项
以数字开头-
后接:
的行被视为JVM选项,仅在JVM版本大于或等于该数字时才适用
以数字开头-
后接数字,后跟:
的行被视为JVM选项,仅当JVM版本在两个数字范围内时才适用
其他所有行均被拒绝
设置Java虚拟机选项的另一种机制是通过 ES_JAVA_OPTS
环境变量。例如:
JVM具有用于观察JAVA_TOOL_OPTIONS
环境变量的内置机制。我们有意在打包脚本中忽略此环境变量。这样做的主要原因是,在某些操作系统(例如Ubuntu)上,默认情况下通过此环境变量安装了代理,我们不希望它们干扰Elasticsearch。
此外,其他一些Java程序也支持JAVA_OPTS
环境变量。这不是 JVM内置的机制,而是生态系统中的约定。但是,我们不支持此环境变量,而是通过上述jvm.options
文件或环境变量来支持设置JVM选项ES_JAVA_OPTS
。
例如,如果你的日志目录(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
。
old style
模式追加器的配置。这些日志将保存在*.log
文件中,如果存档则将保存在文件中* .log.gz
。请注意,应将其视为已弃用,并将在将来删除。
Log4j的配置解析被任何多余的空白所迷惑;如果您在此页面上复制并粘贴任何Log4j设置,或通常输入任何Log4j配置,请确保修剪所有前导和尾随空格。
请注意,您可以替换.gz
为.zip
in appender.rolling.filePattern
以使用zip格式压缩滚动日志。如果删除.gz
扩展名,则日志在滚动时将不会被压缩。
如果要在指定时间段内保留日志文件,则可以将过渡策略与删除操作一起使用。
有四种配置日志记录级别的方法,每种方法都有适合使用的情况。
通过命令行:-E <name of logging hierarchy>=<level>
(例如, -E logger.org.elasticsearch.transport=trace
)。当您临时调试单个节点上的问题(例如,启动问题或开发过程中)时,这是最合适的。
通过elasticsearch.yml
:( 例如, logger.org.elasticsearch.transport: trace
)。当您临时调试问题但未通过命令行(例如,通过服务)启动Elasticsearch或希望更永久地调整日志记录级别时,这是最合适的。
例如:
当您需要动态地调整正在运行的群集上的日志记录级别时,这是最合适的。
通过log4j2.properties
:
例如:
当您需要对记录器进行细粒度控制时(例如,要将记录器发送到另一个文件或以其他方式管理记录器;这是一种罕见的用例),这是最合适的。
除了常规日志记录外,Elasticsearch还允许您启用不赞成使用的操作的日志记录。例如,这使您可以及早确定是否将来需要迁移某些功能。默认情况下,在WARN级别启用弃用日志记录,该级别将发出所有弃用日志消息。
这将在您的日志目录中创建每日滚动弃用日志文件。定期检查此文件,尤其是在您打算升级到新的主要版本时。
默认的日志记录配置已将弃用日志的滚动策略设置为在1 GB之后滚动和压缩,并最多保留五个日志文件(四个滚动日志和活动日志)。
您可以config/log4j2.properties
通过将弃用日志级别设置为以下方式在文件中禁用它error
:
如果X-Opaque-Id
用作HTTP标头,则可以确定触发过时功能的原因。用户ID包含X-Opaque-ID
在弃用JSON日志的字段中。
为了简化对Elasticsearch日志的解析,现在以JSON格式打印日志。这由Log4J布局属性配置appender.rolling.layout.type = ESJsonLayout
。此布局需要type_name
设置一个属性,该属性用于在解析时区分日志流。
您仍然可以使用自己的自定义布局。为此,请
appender.rolling.layout.type
使用其他布局替换该行 。请参阅以下示例:
这些是可用于配置索引生命周期管理的设置
xpack.ilm.enabled
无论是启用还是禁用ILM,将其设置为false
禁用任何ILM REST API端点和功能。默认为true
。
indices.lifecycle.poll_interval
indices.lifecycle.history_index_enabled
是否启用ILM的历史记录索引。如果启用,ILM会将作为ILM策略一部分而采取的操作的历史记录到ilm-history-*
索引中。默认为true
。
index.lifecycle.name
用于管理索引的策略的名称。
index.lifecycle.rollover_alias
index.lifecycle.parse_origination_date
当配置为true
原始日期时,将从索引名称中解析。索引格式必须匹配pattern ^.*-{date_format}-\\d+
,其中date_format
is yyyy.MM.dd
和结尾的数字是可选的(滚动的索引通常会匹配完整格式,例如 logs-2016.10.31-000002
)。如果索引名称与模式不匹配,则索引创建将失败。
index.lifecycle.origination_date
将用于计算其相变的索引寿命的时间戳。这样,用户可以创建包含旧数据的索引,并使用旧数据的原始创建日期来计算索引使用期限。必须为长(Unix纪元)值。
默认情况下,启用监视,但禁用数据收集。要启用数据收集,请使用该xpack.monitoring.collection.enabled
设置。
群集设置优先于
elasticsearch.yml
文件中的设置。
xpack.monitoring.enabled
设置为true
(默认值)以对节点上的Elasticsearch启用Elasticsearch X-Pack监视。
要启用数据收集,还必须将设置
xpack.monitoring.collection.enabled
为true
。默认值为false
。
在6.3.0中添加。设置为true
启用监视数据收集。当此设置为false
默认值时,将不会收集Elasticsearch监视数据,并且会忽略来自其他来源(如Kibana,Beats和Logstash)的所有监视数据。
设置为-1
禁用数据收集,从7.0.0开始不再支持 。 在6.3.0中弃用。使用xpack.monitoring.collection.enabled
设置为false
来替代。控制收集数据样本的频率。默认为10s
。如果您修改收集间隔,则将xpack.monitoring.min_interval_seconds
选项设置kibana.yml
为相同的值。
控制是否应收集有关Elasticsearch集群的统计信息。默认为true
。这与xpack.monitoring.collection.enabled不同,后者允许您启用或禁用所有监视收集。但是,此设置只是禁用了Elasticsearch数据的收集,同时仍然允许其他数据(例如,Kibana,Logstash,Beats或APM Server监视数据)通过此群集。
控制监控从哪个索引收集数据。默认为所有索引。将索引名称指定为以逗号分隔的列表,例如test1,test2,test3
。名称可以包括通配符,例如test*
。您可以在前缀前明确排除索引-
。例如,test*,-test3
将监视test
除以外的所有所有索引test3
。系统索引(如.security 或.kibana )始终以开头.
,通常应对其进行监视。考虑添加.*
到索引列表中,以确保监视系统索引。例如.*,test*,-test3
控制是否收集所有回收率。设置为true
仅收集活动的恢复。默认为false
。
此设置当前仅影响
local
类型出口商。使用http
导出器创建的索引不会自动删除。
xpack.monitoring.exporters
该local
出口是通过监测使用的默认出口国。顾名思义,它会将数据导出到本地群集,这意味着不需要太多配置。
如果您不提供任何出口商,Monitoring会自动为您创建一个。如果提供了任何导出器,则不添加默认值。
type
本地出口商的值必须始终为local
并且是必需的。
use_ingest
是否在每个批量请求中向集群和管道处理器提供占位符管道。默认值为true
。如果被禁用,则意味着它将不使用管道,这意味着将来的发行版无法将批量请求自动升级为可用于将来的请求。
cluster_alerts.management.enabled
是否为此集群创建集群警报。默认值为true
。要使用此功能,必须启用Watcher。如果您具有基本许可证,则不会显示群集警报。
以下列出了http
导出器可以提供的设置。所有设置均显示在您为导出器选择的名称后面:
type
HTTP导出程序的值必须始终为http
并且是必需的。
host
主机支持多种格式,既可以是数组,也可以是单个值。支持的格式包括 hostname
,hostname:port
,http://hostname
, http://hostname:port
,https://hostname
,和 https://hostname:port
。不能假定主机。如果未作为字符串的一部分提供,则默认方案始终为http
,默认端口始终9200
为host
。
auth.username
如果提供auth.secure_password
或,auth.password
则用户名是必需的。
的密码auth.username
。auth.password
如果也指定了优先级。
auth.password
的密码auth.username
。如果auth.secure_password
还指定,则将忽略此设置。
使用auth.secure_password
代替。
connection.timeout
connection.read_timeout
ssl
proxy.base_path
前缀任何传出请求的基本路径,例如/base/path
(然后,批量请求将作为发送/base/path/_bulk
)。没有默认值。
headers
添加到每个请求的可选标头,可以帮助通过代理路由请求。
发送基于数组的标头的n
时间n
为数组的大小。Content-Type
并且Content-Length
无法设置。监视代理程序创建的任何标题都将覆盖此处定义的任何内容。
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"]
。
您可以配置以下TLS / SSL设置。
xpack.monitoring.exporters.$NAME.ssl.supported_protocols
xpack.monitoring.exporters.$NAME.ssl.verification_mode
控制证书的验证。有效值为:full
,它验证所提供的证书是否由受信任的机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。certificate
,它验证提供的证书是否由受信任的权威(CA)签名,但不执行任何主机名验证。none
,不对服务器证书进行任何验证。此模式禁用了SSL / TLS的许多安全性优点,只有在仔细考虑后才能使用。它主要是在尝试解决TLS错误时作为一种临时诊断机制。强烈建议不要将其用于生产集群。默认值为full
。
xpack.monitoring.exporters.$NAME.ssl.cipher_suites
以下设置用于指定通过SSL / TLS连接进行通信时应使用的私钥,证书和受信任证书。私钥和证书是可选的,如果服务器要求客户端认证进行PKI认证,则将使用私钥和证书。
使用PEM编码的文件时,请使用以下设置:
xpack.monitoring.exporters.$NAME.ssl.key
包含私钥的PEM编码文件的路径。
xpack.monitoring.exporters.$NAME.ssl.key_passphrase
用于解密私钥的密码。由于密钥可能未加密,因此此值是可选的。
用于解密私钥的密码。由于密钥可能未加密,因此此值是可选的。
xpack.monitoring.exporters.$NAME.ssl.certificate
指定与密钥关联的PEM编码证书(或证书链)的路径。
xpack.monitoring.exporters.$NAME.ssl.certificate_authorities
应当信任的PEM编码证书文件的路径列表。
使用包含私钥,证书和应受信任的证书的Java密钥库文件(JKS)时,请使用以下设置:
xpack.monitoring.exporters.$NAME.ssl.keystore.path
包含私钥和证书的密钥库文件的路径。
xpack.monitoring.exporters.$NAME.ssl.keystore.password
密钥库的密码。
密钥库的密码。
xpack.monitoring.exporters.$NAME.ssl.keystore.key_password
密钥库中密钥的密码。缺省值为密钥库密码。
密钥库中密钥的密码。缺省值为密钥库密码。
xpack.monitoring.exporters.$NAME.ssl.truststore.path
包含要信任的证书的密钥库的路径。它必须是Java密钥库(jks)或PKCS#12文件。
xpack.monitoring.exporters.$NAME.ssl.truststore.password
信任库的密码。
信任库的密码。
可以将Elasticsearch配置为使用包含私有密钥,证书和应受信任的证书的PKCS#12容器文件(.p12
或多个.pfx
文件)。
PKCS#12文件的配置方式与Java密钥库文件相同:
xpack.monitoring.exporters.$NAME.ssl.keystore.path
包含私钥和证书的密钥库文件的路径。
xpack.monitoring.exporters.$NAME.ssl.keystore.type
密钥库文件的格式。它必须是jks
或PKCS12
。如果密钥库路径以“ .p12”,“。pfx”或“ .pkcs12”结尾,则此设置默认为PKCS12
。否则,默认为jks
。
xpack.monitoring.exporters.$NAME.ssl.keystore.password
密钥库的密码。
密钥库的密码。
xpack.monitoring.exporters.$NAME.ssl.keystore.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
信任库的密码。
信任库的密码。
可以将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
。
在配置将JVM配置为用作Elasticsearch的密钥库或信任库的PKCS#11令牌时,可以通过将适当的值设置为ssl.truststore.password
或ssl.truststore.secure_password
在您配置的上下文中配置令牌的PIN 。由于只能配置一个PKCS#11令牌,因此只有一个密钥库和信任库可用于在Elasticsearch中进行配置。反过来,这意味着在传输层和http层中,只能将一个证书用于TLS。
您几乎不需要更改Java虚拟机(JVM)选项。如果这样做,最可能的更改是设置。本文档的其余部分详细说明了如何设置JVM选项。您可以使用jvm.options
文件或ES_JAVA_OPTS
环境变量来设置选项。
设置或覆盖JVM选项的首选方法是通过JVM选项文件。从tar或zip发行版安装时,根jvm.options
配置文件为,config/jvm.options
并且可以将自定义JVM选项文件添加到config/jvm.options.d/
。从Debian或RPM软件包安装时,根jvm.options
配置文件为, /etc/elasticsearch/jvm.options
并且可以将自定义JVM选项文件添加到 /etc/elasticsearch/jvm.options.d/
。使用的您可以将装入的自定义JVM选项文件绑定到中 /usr/share/elasticsearch/config/jvm.options.d/
。您永远不需要修改根jvm.options
文件,而宁愿使用自定义JVM选项文件。自定义JVM选项的处理顺序是按字典顺序。
使用RPM或Debian软件包时,ES_JAVA_OPTS
可以在指定 。
Elasticsearch使用进行日志记录。可以使用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}
并将解析为节点名称(如果显式设置了节点名称)。
可以查看
点击查看
可以加载多个配置文件(在这种情况下,它们将被合并),只要它们被命名log4j2.properties
并将Elasticsearch config目录作为祖先即可。这对于公开其他记录器的插件很有用。记录器部分包含Java软件包及其相应的日志级别。附加程序部分包含日志的目标。在可以找到有关如何自定义日志记录和所有受支持的附加程序的广泛信息 。
通过:
每行包含一个JSON文档,其属性在中配置ESJsonLayout
。有关更多详细信息,请参见此类。但是,如果JSON文档包含异常,它将被打印在多行上。第一行将包含常规属性,随后的行将包含格式为JSON数组的stacktrace。
()索引生命周期管理检查符合策略标准的索引的频率。默认为10m
。
这些索引级别的ILM设置通常是通过索引模板配置的。有关更多信息,请参阅。
索引翻转时要更新的索引别名。在使用包含过渡操作的策略时指定。当索引翻转时,别名将更新以反映该索引不再是写索引。有关过渡的更多信息,请参见。
您可以在elasticsearch.yml
文件中配置这些监视设置。您还可以使用动态设置其中一些 。
要调整如何监控数据显示在监控界面,配置 中 kibana.yml
。要控制如何从Logstash收集监视数据,请在中配置监视设置logstash.yml
。
有关更多信息,请参阅。
这些xpack.monitoring.collection
设置控制如何从Elasticsearch节点收集数据。您可以使用动态更改所有监视收集设置。
xpack.monitoring.collection.enabled
()
xpack.monitoring.collection.interval
()
xpack.monitoring.elasticsearch.collection.enabled
()
xpack.monitoring.collection.cluster.stats.timeout
()
()用于收集集群统计信息的超时。默认为10s
。
xpack.monitoring.collection.node.stats.timeout
()
()收集节点统计信息的超时。默认为10s
。
xpack.monitoring.collection.indices
()
xpack.monitoring.collection.index.stats.timeout
()
()用于收集索引统计信息的超时。默认为10s
。
xpack.monitoring.collection.index.recovery.active_only
()
xpack.monitoring.collection.index.recovery.timeout
()
()用于收集恢复信息的超时。默认为10s
。
xpack.monitoring.history.duration
()
()保留期限,超过该期限后,将自动删除监视导出器创建的索引。默认为7d
(7天)。此设置的最小值1d
(1天)以确保正在监视某些内容,并且不能将其禁用。
配置代理在何处存储监视数据。默认情况下,代理使用本地导出程序,该导出程序对安装了群集的监视数据进行索引。使用HTTP导出器将数据发送到单独的监视群集。有关更多信息,请参阅, 及其 。
auth.secure_password
(,)
()HTTP连接应该等待套接字打开以请求的时间。默认值为6s
。
()HTTP连接应该等待套接字发送回响应的时间。默认值为10 * connection.timeout
(60s
如果未设置)。
每个HTTP导出器都可以定义自己的TLS / SSL设置或继承它们。请参阅的“ 。
支持的协议版本。有效协议:SSLv2Hello
, SSLv3
,TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
。如果JVM的SSL提供程序支持TLSv1.3,则默认值为TLSv1.3,TLSv1.2,TLSv1.1
。否则,默认值为 TLSv1.2,TLSv1.1
。如果xpack.security.fips_mode.enabled
是true
,则不能使用SSLv2Hello
或SSLv3
。请参阅。
支持的密码套件取决于您使用的Java版本。例如,对于11版的默认值是TLS_AES_256_GCM_SHA384
, TLS_AES_128_GCM_SHA256
,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
,TLS_RSA_WITH_AES_256_GCM_SHA384
, TLS_RSA_WITH_AES_128_GCM_SHA256
,TLS_RSA_WITH_AES_256_CBC_SHA256
, TLS_RSA_WITH_AES_128_CBC_SHA256
,TLS_RSA_WITH_AES_256_CBC_SHA
, TLS_RSA_WITH_AES_128_CBC_SHA
。上面的默认密码套件列表包括TLSv1.3密码,以及需要256位AES加密的Java密码学扩展(JCE)无限强度管辖权策略文件的密码。如果TLSv1.3是不可用,TLSv1.3密码TLS_AES_256_GCM_SHA384
和 TLS_AES_128_GCM_SHA256
不包括在默认列表。如果256位AES不可用,则AES_256
其名称中带有密码的密码将不包括在默认列表中。最后,AES GCM在11之前的Java版本中存在性能问题,并且仅在使用Java 11或更高版本时才包含在默认列表中。有关更多信息,请参见Oracle的 。
xpack.monitoring.exporters.$NAME.ssl.secure_key_passphrase
()
xpack.monitoring.exporters.$NAME.ssl.keystore.secure_password
()
xpack.monitoring.exporters.$NAME.ssl.keystore.secure_key_password
()
xpack.monitoring.exporters.$NAME.ssl.truststore.secure_password
()
xpack.monitoring.exporters.$NAME.ssl.keystore.secure_password
()
xpack.monitoring.exporters.$NAME.ssl.keystore.secure_key_password
()
xpack.monitoring.exporters.$NAME.ssl.truststore.secure_password
()