配置Elasticsearch

2019-09-08 22:42发布

(一)配置文件位置

Elasticsearch有三个配置文件:

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

这些文件位于config目录中,其默认位置取决于是下载归档文件(tar.gzzip)还是包安装(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.options配置文件。此文件的默认位置是config/jvm.options(从tar或zip发行版)和/etc/elasticsearch/jvm.options(从Debian或RPM软件包安装时)

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

  • 仅包含空格的行被忽略
  • 以#开头的行被视为注释
# this is a comment
  • -开头的行被视为JVM选项,该选项独立于JVM的版本而应用
-Xmx2g
  • 以数字开头后跟 :-仅当JVM的版本与数字匹配时才适用
8:-Xmx2g
  • 以数字开头后跟-:仅当JVM的版本大于或等于数字时才适用
8-:-Xmx2g
  • 以数字开头后跟-数字:仅当JVM的版本落在两个数字的范围内时才适用
8-9:-Xmx2g
  • 所有其他行都将被拒绝

(五)安全设置

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

  1. 该应该使用运行Elasticsearch的用户来执行
  2. 只有一些设置可以从密钥库中读取。但是,密钥库没有验证来阻止不支持的设置。将不受支持的设置添加到密钥库将导致Elasticsearch无法启动。请参阅每个设置的文档,以查看它是否作为密钥库的一部分受支持。
  3. 只有在重新启动Elasticsearch之后,对密钥库的所有修改才会生效。

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

使用elasticsearch-keystore工具管理

创建一个和es配置同目录的elasticsearch.keystore文件

bin/elasticsearch-keystore create  

添加一个key字段,会提示输入值

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

列出keystore中所有的命令设置

bin/elasticsearch-keystore list

通过标准输入赋值

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

添加敏感文件

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

删除设置

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

可重载的安全设置

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

所有安全设置的值(可重新加载或不可加载)在所有群集节点上必须相同。

POST _nodes/reload_secure_settings

此API将在每个群集节点上解密并重新读取整个密钥库,但仅应用可重新加载的安全设置。对其他设置的更改将在下次重新启动后生效。

(六)日志配置

Elasticsearch使用Log4j2进行日志记录。可以使用 log4j2.properties 文件配置log4j2。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 。

######## Server JSON ############################
appender.rolling.type = RollingFile  # Configure the RollingFile appender
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json   # 日志将记录到/var/log/elasticsearch/production.json
appender.rolling.layout.type = ESJsonLayout # 使用JSON布局
appender.rolling.layout.type_name = server  #type_name是一个填充该type字段的标志ESJsonLayout。在解析它们时,它可以更容易地区分不同类型的日志。
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz   # 滚动日志到/var/log/elasticsearch/production-yyyy-MM-dd-i.json; 日志将被压缩i将递增
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy  # 基于时间的滚动策略
appender.rolling.policies.time.interval = 1  # 每天滚动日志
appender.rolling.policies.time.modulate = true # 日志轮换是以天作为分界(而不是相隔24小时)
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy # 使用基于大小的滚动策略
appender.rolling.policies.size.size = 256MB # 256 MB后滚动日志
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  # 压缩日志的大小条件为2 GB
################################################
 Log4j的配置解析会被无关的空格干扰; 如果您在此页面上复制并粘贴任何Log4j设置,或者输入任何的Log4j配置,请确保去掉前导和尾随空格。

如果在appender.rolling.filePattern中追加.gz或者.zip后缀,那么当日志轮换的时候,旧的日志将会被压缩处理。

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

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 # 保留7天
可以在elasticsearch的config的不同子目录下使用多个名字是log4j2.properties 的配置文件(加载配置文件的时候会进行合并处理)

(七)配置日志级别

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

  1. 通过命令行:( -E =例如, -E logger.org.elasticsearch.transport=trace)。最适用于临时调试单个节点(例如,启动问题或开发期间)。
  2. 通过elasticsearch.yml:( : 例如,logger.org.elasticsearch.transport: trace)。当未通过命令行启动Elasticsearch(例如,通过服务启动)或者希望更长期地调整日志记录级别时,这是最合适的。
  3. 通过群集设置当您需要动态调整正在运行的群集上的日志记录级别时,这是最合适的。
PUT /_cluster/settings
{
  "transient": {
    "": ""
  }
}

例如

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

4.通过log4j2.properties:

logger..name = 
logger..level = 

例如

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

弃用日志(Deprecation logging)

除了常规的日志,elasticsearch允许你记录弃用的特性。也就是说由于elasticsearch的升级,有些旧的特性可能会被弃用,当你的配置文件使用到这些弃用的特性时,就会写日志到弃用日志文件,好让你了解elasticsearch做了哪些改动。 这让你更早地确定你将来是否需要迁移某些功能(因为过期的特性不会马上被移除,但未来还是会移除,你可以在未移除之前,使用新的方案代替被移除的特性)。默认地,弃用日志记录对 WARN 级别开启,在这个级别的所有弃用日志消息都会被输出到弃用日志中。

logger.deprecation.level = warn

使用这个配置将会创建一个每日轮转策略的弃用日志文件到你的日志目录。你需要定期检查这个文件,特别是在准备更新一个大版本的时候。

默认使用轮换日志保存策略,日志大于1GB后被压缩,最多创建5个日志文件(4个轮换日志,一个在用的日志)。

你可以通过以下命令禁用弃用日志:

 logger.deprecation.level = error

(八)使用自定义布局

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

登录 后发表评论
0条评论
还没有人评论过~