我在Ubuntu机器上安装了ElasticSearch 1.4.1。
其日志位于默认位置:
/var/log/elasticsearch/
当我运行ElasticSearch时,一段时间后日志文件会增长,并且很难处理它们。
日志已处于旋转文件模式。意思是,每天都有一个新的日志文件。
我想配置要压缩的日志(例如= file.log.zip ,目前他们不是)。
我也知道我可以在 logging.yml 文件中执行此操作,但我不知道该怎么做。
有人可以帮我吗?
答案 0 :(得分:25)
经过一番挖掘(也在ElasticSearch源代码中),我找到了答案。 :)
通常,当您使用像ElasticSearch这样的软件并希望它在生产中使用时,您会认为像日志这样的基本功能都在处理。 可悲的是,在当前版本(1.4及之前版本)中并非如此。
ElasticSearch使用log4j作为其日志记录机制。
log4j正在执行以下操作:
如果ElasticSearch中使用频繁,则日志堆积起来并最终填满整个存储空间。
答案是添加以下内容:
答案是,还有另一个名为log4j-extensions的API,它扩展了log4j功能并压缩了旋转的日志文件。
可悲的是,它只适用于下一版本1.5或主分支,适用于从源代码编译ElasticSearch的疯狂人员。 (见log4j rollingPolicy support)。
但是,有一个更简单的解决方案:
使用LOGOTATE处理您的日志。
如果ElasticSearch在Linux操作系统上运行,您可以使用 logrotate 守护程序。 (参见什么是日志轮转Understanding logrotate utility)
您需要执行以下操作:
重置日志配置
sudo vi /etc/elasticsearch/logging.yml
在 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"
创建用于处理日志文件的新文件
sudo vi /etc/logrotate.d/elasticsearch
将以下内容添加到logrotate文件中:
/var/log/elasticsearch/*.log {
daily
rotate 100
size 50M
copytruncate
compress
delaycompress
missingok
notifempty
create 644 elasticsearch elasticsearch
}
之后重启ElasticSearch
sudo service elasticsearch stop
sudo service elasticsearch start
这样您就可以将日志文件总存储量限制为5GB(旋转100 * 50M)。
显然,您可以根据需要进行配置。
答案 1 :(得分: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"