ElasticSearch:如何配置logging.yml

rav*_*n99 16 zip logging elasticsearch

我在Ubuntu机器上安装了ElasticSearch 1.4.1.

其日志位于默认位置:

/var/log/elasticsearch/
Run Code Online (Sandbox Code Playgroud)

当我运行ElasticSearch时,一段时间后日志文件会增长,并且很难处理它们.

日志已处于旋转文件模式.意思是,每天都有一个新的日志文件.

我想配置要压缩的日志(例如= file.log.zip,目前它们不是).

我也知道我可以在logging.yml文件中执行此操作,但我不知道该怎么做.

有人可以帮助我吗?

rav*_*n99 25

经过一些挖掘(也在ElasticSearch源代码中),我找到了答案.:)

通常,当您使用像ElasticSearch这样的软件并希望它在生产中使用时,您会认为像日志这样的基本功能都在处理.可悲的是,在当前版本(1.4及之前版本)中并非如此.

ElasticSearch使用log4j作为其日志记录机制.

log4j正在执行以下操作:

  1. 将日志添加到日志文件中
  2. 当日志文件大于CONFIGURED_VALUE时,旋转日志文件

如果ElasticSearch中使用频繁,则日志堆积并最终填满整个存储.

答案是添加以下内容:

  1. 压缩旧的旋转日志文件
  2. 确保总日志文件不会超过CONFIGURED_VALUE

答案是,还有另一个名为log4j-extensions的API,它扩展了log4j功能并压缩了旋转的日志文件.

遗憾的是,它只能在下一版本1.5或分支中供我们这些从源代码编译ElasticSearch的疯狂人员使用.(参见log4j rollingPolicy支持).

但是,有一个更简单的解决方案:

使用LOGROTATE来处理您的日志.

如果ElasticSearch在Linux OS上运行,则可以使用logrotate守护程序.(参见什么是日志旋转了解logrotate实用程序)

您需要执行以下操作:

  1. 重置日志配置
  2. 创建用于处理日志文件的新文件

重置日志配置

sudo vi /etc/elasticsearch/logging.yml
Run Code Online (Sandbox Code Playgroud)

logging.yml中更改以下内容

# Mark the dailyRollingFile Appender
#  file:
#    type: dailyRollingFile
#    file: ${path.logs}/${cluster.name}.log
#    datePattern: "'.'yyyy-MM-dd"
#    layout:
#      type: pattern
#      conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"

# Add the file Appender
file:
  type: file
  file: ${path.logs}/${cluster.name}.log
  datePattern: "'.'yyyy-MM-dd"
  layout:
    type: pattern
    conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"
Run Code Online (Sandbox Code Playgroud)

创建用于处理日志文件的新文件

sudo vi /etc/logrotate.d/elasticsearch
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到logrotate文件中:

/var/log/elasticsearch/*.log {
    daily
    rotate 100
    size 50M
    copytruncate
    compress
    delaycompress
    missingok
    notifempty
    create 644 elasticsearch elasticsearch
}
Run Code Online (Sandbox Code Playgroud)

之后重启ElasticSearch

sudo service elasticsearch stop
sudo service elasticsearch start
Run Code Online (Sandbox Code Playgroud)

这样您就可以将日志文件总存储量限制为5GB(旋转100*50M).

显然,您可以根据需要进行配置.


Rum*_*les 7

我会稍微不同意你的回答.首先,我建议不要使用zip,如果你使用gzip,你仍然可以从命令行读取文件而不先提取它们.其次,虽然logrotation是一个方便的工具,log4j应该能够原生地处理它自己的日志轮换.以下配置应该很好地工作:

 file:
    type: org.apache.log4j.rolling.RollingFileAppender
    file: ${path.logs}/${cluster.name}.log
    rollingPolicy: org.apache.log4j.rolling.TimeBasedRollingPolicy
    rollingPolicy.FileNamePattern: ${path.logs}/${cluster.name}.log.%d{yyyy-MM-dd}.gz
    layout:
      type: pattern
      conversionPattern: "%d{ISO8601}[%-5p][%-25c] %m%n"
Run Code Online (Sandbox Code Playgroud)