zoukankan      html  css  js  c++  java
  • 使用Linux自带日志滚动工具logrotate滚动redis日志示例

    截至到redis-5.0版本,redis仍然不会自动滚动日志文件,如果不处理则日志文件日积月累越来越大,最终将导致磁盘满告警:

    # ls -lh

    total 12G

    -rw-r--r-- 1 redis redis 8.5G Feb 18 10:26 redis-6379.log

    -rw-r--r-- 1 redis redis 1.5G Feb 18 10:26 redis-6380.log

    -rw-r--r-- 1 redis redis 2.0G Feb 18 10:26 redis-6381.log

     

    查看redis的源代码,可发现每次写日志均是先fopenfprintf,实现十分简单,毫无日志滚动逻辑:

    // server.c

    void serverLogRaw(int level, const char *msg)

    {

        FILE *fp;

        。。。。。。

        fp = log_to_stdout? stdout: fopen(server.logfile,"a");

        if (!fp) return;

        。。。。。。

        fflush(fp);

        if (!log_to_stdout) fclose(fp);

        if (server.syslog_enabled)

            syslog(syslogLevelMap[level], "%s", msg);

    }

     

    显然,这是redis运维需要解决的。最易想到的是自己写脚本滚动日志,比如直接利用日志滚动脚本工具log_rotater.sh。不过这里更推荐Linux系统自带的日志滚动工具logrotate

    # which logrotate

    /usr/sbin/logrotate

    # which rsyslogd

    /usr/sbin/rsyslogd

     

    Linux系统自带的日志滚动工具logrotate由两部分组成:一是命令行工具logrotate,二是后台服务rsyslogd

    使用rsyslogd,只需简单的配置即可实现日志滚动。rsyslogd的配置文件为/etc/logrotate.conf,但一般不建议直接修改logrotate.conf,而是在目录/etc/logrotate.d下新增文件的方式。logrotate.confinclude所有logrotate.d目录下的文件,语法是一致的,区别是logrotate.conf定义了默认的配置,而logrotate.d目录下为专有配置。

     

    下列为redis的配置示例:

    # cat /etc/logrotate.d/redis

    /usr/local/redis/log/redis-6379.log

    /usr/local/redis/log/redis-6380.log

    /usr/local/redis/log/redis-6381.log

    {

        rotate 2

        minsize 100M

        nocompress

        missingok

        create 0664 redis redis

        notifempty

    }

     

    配置项说明:

    1) rotate指定日志文件备份数,如果值为0表示不备份

    2) minsize表示日志文件达到多大才滚动

    3) nocompress表示是否压缩备份的日志文件

    4) missingok如果日志丢失,不报错继续滚动下一个日志

    5) notifempty日志文件为空时,不进行轮转,默认值为ifempty

    6) create指定创建新日志文件的属性,logrotate是以root运行的,如果目标日志文件非root运行,则这个一定要指定好。

     

    有关logrotate的详细使用,请参考logrotate资料,本文不过多描述。

     

    注意,修改后需要重启下rsyslogd。如果是CentOS可使用下列任意一种方式重启(实际上systemctl新方式,而service实际也是使用systemctl):

    # service rsyslog restart 

    # systemctl restart  rsyslog.service

  • 相关阅读:
    多线程的互斥(下)——信号量
    Linux下几种另类创建文件之方法
    Linux下VsFTP和ProFTP用户管理高级技巧 之一
    全面了解Linux下Proc文件系统
    许可证大阅兵
    SSH远程快速登录Linux
    为root账户更名
    Linux集群的I/O性能测试
    Think Pad笔记本分区解决思路及方法
    图形界面备份Linux系统介绍
  • 原文地址:https://www.cnblogs.com/aquester/p/10394314.html
Copyright © 2011-2022 走看看