我已经在 Ubuntu 机器上安装了 ElasticSearch 1.4.1。
它的日志在默认位置:
/var/log/elasticsearch/
当我运行 ElasticSearch 时,一段时间后日志文件变大,变得难以处理。
日志已经处于循环文件模式。也就是说,每天都有一个新的日志文件。
我想将日志配置为压缩(例如 = file.log.zip ,目前它们不是)。
我也知道我可以在logging.yml文件里做,但我不知道怎么做。
有人可以帮我吗?
最佳答案
经过一些挖掘(也在 ElasticSearch 源代码中),我找到了答案。 :)
通常,当您使用像 ElasticSearch 这样的软件并希望将其用于生产环境时,您会认为像日志记录这样的基本功能就可以解决所有问题。 遗憾的是,在当前版本(1.4 及之前的版本)中情况并非如此。
ElasticSearch 使用 log4j 作为其日志记录机制。
log4j 正在执行以下操作:
- 将日志添加到日志文件
- 当日志文件大于 CONFIGURED_VALUE 时轮转日志文件
如果 ElasticSearch 的使用量很大,日志会堆积起来并最终填满您的整个存储空间。
答案是添加以下内容:
- 压缩旧的旋转日志文件
- 确保日志文件总数不会超过 CONFIGURED_VALUE
答案是有另一个名为 log4j-extensions 的 API,它扩展了 log4j 功能并压缩了循环日志文件。
遗憾的是,它将仅在下一个版本 1.5 或 master 分支中可用,供我们这些疯狂的从源代码编译 ElasticSearch 的人使用。 (参见 log4j rollingPolicy support)。
但是,有一个更简单的解决方案:
使用 LOGROTATE 来处理您的日志。
如果 ElasticSearch 在 Linux 操作系统上运行,您可以使用 logrotate 守护程序。 (看看什么是log rotate 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)。
显然,您可以根据需要配置它。
关于logging - ElasticSearch:如何配置 logging.yml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28696069/