日志切割
日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。
logrotate 是个十分有用的工具,它可以自动对日志进行截断(或轮转)、压缩以及删除旧的日志文件。例如,你可以设置 logrotate,让 /var/log/foo
日志文件每 30 天轮转,并删除超过 6 个月的日志。配置完后,logrotate 的运作完全自动化,不必进行任何进一步的人为干预。
在 Nebula 中使用 logrotate
安装 logrotate
在 Ubuntu上
sudo apt install logrotate
在 CentOS 上
sudo yum install logrotate
配置 Nebula 服务和 logrotate
每个 Nebula 服务会生成四种日志:INFO、WARNING、ERROR、FATAL。
这里我们以 nebula-graphd 的 /usr/local/nebula/logs/nebula-graphd.INFO
日志切割为例说明
在 nebula-graphd.conf 中设置 timestamp_in_logfile_name
为 false
:
--timestamp_in_logfile_name=false
在 /etc/logrotate.d
目录下创建名为 nebula-graphd.INFO
的日志切割配置文件,配置如下:
/usr/local/nebula/logs/nebula-graphd.INFO{
daily
rotate 5
copytruncate
nocompress
missingok
notifempty
create 644 root root
maxsize 500m
}
参数说明:
- daily:日志文件将按天轮循。其它可用值为’daily’,‘weekly’或者’yearly’。
- rotate 5:一次将存储 5 个归档日志。对于第六个归档,时间最久的归档将被删除。
- copytruncate:配置 copytruncate 后如果 crontab 中定时运行 lograte 时满足 rotate 条件的话,将拷贝原来的 nebula-graphd.INFO 为 nebula-graphd.INFO.1,而 nebula-graphd.INFO 本身会清空,新日志写在 nebula-graphd.INFO 里。
- nocompress:在轮循任务完成后,已轮循的归档将不使用 gzip 进行压缩。
- missingok:在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。notifempty如果日志文件为空,轮循不会进行。
- create 644 root:root以指定的权限创建全新的日志文件,同时 logrotate 也会重命名原始日志文件。
- maxsize 500m:当日志超过指定的大小时或者超过设定的周期如 daily 时转储,bytes(缺省)及 KB(sizek)或MB(sizem),注意:不可配置超过 1500 m,因为 glog 不指定日志大小时,默认最大 1800 m 切割。
logrotate 定时任务
安装 logrotate 后,logrotate 默认会定时每天跑一次,比如在 Ubuntu 上会有 /etc/cron.daily/logrotate
的定时任务脚本。如果日志增长过快,可以增加 crontab 任务来尽早发现 log size 超过 maxsize 的情况,在 Ubuntu 上可以通过增加每分钟都跑一次的 logrotate 定时任务,通过编辑 /etc/crontab
,增加一行:
* * * * * root /etc/cron.daily/logrotate
以上为本次 logrotate 分享。