【发布时间】:2015-09-29 16:30:16
【问题描述】:
我已经在 Ubuntu 机器上安装了 Cassandra 2.0.11。
日志记录配置是默认的。日志文件的位置在
/var/log/cassandra/
此外,日志文件已经处于轮换模式。
如何配置要压缩的日志文件? 所以它不会消耗大量的磁盘存储空间。
【问题讨论】:
我已经在 Ubuntu 机器上安装了 Cassandra 2.0.11。
日志记录配置是默认的。日志文件的位置在
/var/log/cassandra/
此外,日志文件已经处于轮换模式。
如何配置要压缩的日志文件? 所以它不会消耗大量的磁盘存储空间。
【问题讨论】:
适用于 Cassandra 2.0 及之前的版本
如果您从这里关注docs,您可能看到了 compress 命令。默认情况下,logrotate 将使用 gzip 压缩旋转的文件。man page 表示您还可以设置 compresscmd 和 compressext 以使用您自己的压缩应用程序(即 zip)。您可能可以将自己的压缩脚本放在一起。
例子:
/var/log/cassandra/output.log {
size 1k
copytruncate
create
compress
compresscmd /bin/bzip2
compressext .bz2
rotate 4
}
适用于 Cassandra 2.1 及更高版本
根据documentation,您应该在rollingPolicy 中以zip 或gz 结束您的fileNamePattern。就像这里的example 一样。
第二个链接上的 Cassandra 文档还说:
默认策略在大小超过后滚动system.log文件 20MB。档案以 zip 格式压缩。 Logback 为日志命名 文件 system.log.1.zip、system.log.2.zip 等等。更多 信息,请参阅 logback 文档。
【讨论】:
答案仅适用于 Cassandra 2.0 及更早版本。
Cassandra 2.0 及之前的版本使用 log4j 作为日志记录 API。 它满足了以下需求:
它不满足压缩\归档旧文件以节省存储空间的需要。
为了支持旧日志文件的压缩,你需要使用log4j-extensions(见compress log4j log files) 如果您真的想在 Cassandra 中激活它,您需要执行以下操作:
显然,您这样做的机会很小。太麻烦了。
有一个简单的解决方案:(仅适用于 Linux 操作系统)
将 Cassandra 配置为使用简单日志记录
sudo vi /etc/cassandra/log4j-server.properties
在此文件中更改以下内容:
# Add the new Appender to the rootLogger
log4j.rootLogger=INFO,stdout,F,R
# Mark the following configuration (all the RollingFileAppender)
# rolling log file
#log4j.appender.R=org.apache.log4j.RollingFileAppender
#log4j.appender.R.maxFileSize=1MB
#log4j.appender.R.maxBackupIndex=3
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=%5p [%t] %d{ISO8601} %F (line %L) %m%n
#log4j.appender.R.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
#log4j.appender.R.RollingPolicy.FileNamePattern=cassandra.%d{yyyy-MM-dd-HH}.gz
#log4j.appender.R.RollingPolicy.ActiveFileName =cassandra.log
# Edit the next line to point to your logs directory
#log4j.appender.R.File=/var/log/cassandra/cassandra.log
########################################################
# Add the new File Appender
# file appender
# Define the file appender
log4j.appender.F=org.apache.log4j.FileAppender
# Set the name of the file
log4j.appender.F.File=/var/log/cassandra/cassandra.log
# Define the layout for file appender
log4j.appender.F.layout=org.apache.log4j.PatternLayout
log4j.appender.F.layout.conversionPattern=%5p [%t] %d{ISO8601} %F (line %L) %m%n
现在 Cassandra 只记录一个文件,而不是轮换它。接下来...
配置 logrotate 守护进程来处理日志文件
如果你真的想知道什么是 logrotate:Understanding logrotate utility
执行以下操作:
sudo vi /etc/logrotate.d/cassandra
将以下数据添加到文件中:
/var/log/cassandra/cassandra.log {
daily
rotate 50
size 100M
copytruncate
compress
delaycompress
missingok
notifempty
create 644 cassandra cassandra
}
就是这样。从现在开始,logrotate 将处理您的日志文件并将整体存储空间保持在不超过 5GB。
如果您想更改存储大小,请根据需要配置 rotate 和 size。
【讨论】: