ElasticSearch:如何配置 logging.yml
ElasticSearch: How to configure logging.yml
我已经在 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
答案是还有另一个 API 称为 log4j-extensions,它扩展了 log4j 功能并压缩了旋转日志文件。
遗憾的是,它将仅在下一个版本 1.5 或 master 分支中提供给我们这些从源代码编译 ElasticSearch 的疯子。 (参见 log4j rollingPolicy support)。
但是,有一个更简单的解决方案:
使用 LOGROTATE 来处理您的日志。
如果 ElasticSearch 在 Linux OS 上 运行,您可以使用 logrotate 守护程序。 (看看什么是log rotateUnderstanding 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)。
显然,您可以根据需要配置它。
我有点不同意你的回答。首先,我建议不要使用 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"
我已经在 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
答案是还有另一个 API 称为 log4j-extensions,它扩展了 log4j 功能并压缩了旋转日志文件。
遗憾的是,它将仅在下一个版本 1.5 或 master 分支中提供给我们这些从源代码编译 ElasticSearch 的疯子。 (参见 log4j rollingPolicy support)。
但是,有一个更简单的解决方案:
使用 LOGROTATE 来处理您的日志。
如果 ElasticSearch 在 Linux OS 上 运行,您可以使用 logrotate 守护程序。 (看看什么是log rotateUnderstanding 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)。
显然,您可以根据需要配置它。
我有点不同意你的回答。首先,我建议不要使用 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"