linux:/var/log 日志多,如何处理?rsyslog,logrotate

https://zhuanlan.zhihu.com/p/92804167

rsyslog负责写入日志, logrotate负责备份和删除旧日志, 以及更新日志文件

Linux的日志记录了用户在系统上一切操作,看日志去分析系统的状态是运维人员必须掌握的基本功。

rsyslog日志服务器的优势:

1、日志统一,集中式管理

2、日志实时传送到一个更加安全的远端服务器上,真正记录用户行为,使日志的2次更改可能性大大降低,从而能够对日志进行真实回放,便于问题追踪。

rsyslog的新功能:

rsyslog是一个加强版的syslog,具有各种各样的新功能,典型的有:

1、直接将日志写入到数据库。

2、日志队列(内存队列和磁盘队列)。

3、灵活的模板机制,可以得到多种输出格式。

4、插件式结构,多种多样的输入、输出模块。

5、可以把日志存放在MySQL ,PostgreSQL,Oracle等数据库中

/etc/rsyslog.conf

重启rsyslog

service  rsyslog restart

service rsyslog status 

 日志滚动-logrotate

覆盖之前的日志 保证随着日志的增长 磁盘空间不增长

2.1) logrotate日志滚动的介绍

所有的日志文件都会随着时间的推移和访问次数的增加而迅速增长,因此必须对日志文件进行定期清理以免造成磁盘空间的不必要的浪费,同时也加快了管理员查看日志所用的时间。因而logrotate就非常有存在的必要了,Redhat系统中已经默然安装logrotate且利用logrotate设置了相关对rsyslog日志迅速增长的设置。

logrotate的执行由crond服务实现。在/etc/cron.daily目录中,有个文logrotate,它实际上是个shell script,用来启动logrotate。

logrotate程序每天由cron在指定的时间(/etc/crontab)启动。

logrotate的执行由crond服务实现。在/etc/cron.daily目录中,有个文logrotate,它实际上是个shell script,用来启动logrotate。

logrotate程序每天由cron在指定的时间(/etc/crontab)启动。

 

daily: 日志文件分割频度。可选值为 daily,monthly,weekly,yearly
rotate 7: 一次将存储7个归档日志。对于第8个归档,时间最久的归档将被删除。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
dateext 使用日期作为命名格式
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
nocompress: 如果你不希望对日志文件进行压缩,设置这个参数即可
delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
notifempty: 如果日志文件为空,轮循不会进行。
sharedscripts 表示postrotate脚本在压缩了日志之后只执行一次
create 644 www root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate/endscript: 最通常的作用是让应用重启,以便切换到新的日志文件, 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,nginx 进程将立即再次读取其配置并继续运行。

举例:

include /etc/logrotate.d #包含/etc/logrotate.d目录下的所有配置文件

/var/log/wtmp { #对/var/log/wtmp这个日志文件按照下面的设定日志回滚

monthly #每月轮转一次

create 0664 root utmp #设置wtmp这个日志文件的权限,属主,属组

minsize 1M #日志文件必须大于1M才会去轮换(回滚)

rotate 1 #保存一个轮换日志

}

/var/log/btmp {

missingok #如果文件丢失不报错

monthly

create 0600 root utmp

rotate 1

}

[root@rhel6_1 ~]# cat /etc/logrotate.d/syslog

/var/log/cron #这些文件是rsyslog.conf文件中全局配置定义中指定的Target的路径

/var/log/maillog

/var/log/messages

/var/log/secure

/var/log/spooler

{

sharedscripts

postrotate # 轮换之后重启rsyslog服务

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

endscript

}

 

选项用途
nocompress,compress不压缩,压缩
delaycompress不压缩前一个截断的文件(需要与compress一起用)
daily,weekly,monthly每天/周/月轮转一次
copytruncate清空原有文件,而不是创建一个新文件
create 0644 root utmp新建日志文件,权限、属主、组
ifempty即使用空文件也转储
notifempty日志文件为空不进行转储
olddir <dir>转储后的日志存放目录,必须和当前日志文件在同一个文件系统
rotate 5保留最近的5个日志文件
minisize 1M必须大于1MB才会转转
size 50M超过50MB后轮转日志
mail www@my.org轮换后的把日志发给邮箱
missingok如果日志文件不存在,不报错
prerotate,endscript在logrotate之前执行的命令,如/usr/bin/charrt -a /var/log/logfile
postrotate,endscript在logrotate之后执行的命令,如/usr/bin/charrt +a /var/log/logfile
/bin/kill -HUP $(/bin/cat /var/run/rsyslogd.pid 2>/dev/null) &>/dev/null
/usr/bin/killall -HUP httpd
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
sharedscripts共享脚本,表示切换时只执行一次脚本
dateext增加日期作为后缀,不然会是一串无意义的数字
dateformat .%s切换后文件名,必须配合dateext使用
  • /etc/logrotate.conf

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    # see "man logrotate" for details

    # rotate log files weekly

    weekly          #–每周轮转一次

    # keep 4 weeks worth of backlogs

    rotate 4        #–保留四个

    # create new (empty) log files after rotating old ones

    create          #–rotate后,创建一个新的空文件

    # uncomment this if you want your log files compressed

    #compress       #–默认是不压缩的

    # RPM packages drop log rotation information into this directory

    include /etc/logrotate.d    #–这个目录下面配置文件生效

     

    # no packages own wtmp - we'll rotate them here

    /var/log/wtmp {         #–定义/var/log/wtmp这个日志文件

        monthly                 #–每月轮转一次,取代了上面的全局设定的每周轮转一次

        minsize 1M              #–定义日志必须要大于1M大小才会去轮转

        create 0664 root utmp   #–新的日志文件的权限,属主,属主

        rotate 1                #–保留一个,取代了上面的全局设定的保留四个

    }

     

    /var/log/btmp {

        missingok       #-如果日志丢失, 不报错

        monthly

        create 0600 root utmp

        rotate 1

    }

  • logrotate.conf范例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    # sample logrotate configuration file

    compress     # 全局设置, 压缩

     

    /var/log/messages {

        rotate 5     # 保留5份日志

        weekly       # 每周轮换一次

        postrotate   # 轮换之后重启syslogd服务

        /usr/bin/killall -HUP syslogd

        # rhel6中为:/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

        # 可查看/etc/logrotate.d/下的配置文件

        endscript

    }

     

    "/var/log/httpd/access.log" /var/log/httpd/error.log {   #  指定多个文件, 如果有特殊字符需要用单引号

        rotate 5

        mail www@my.org

        size 100k        # 超过100k后切换日志, 并把老的日志发送邮件给www@my.org

        sharedscripts    # 共享脚本.下面的postrotate脚本只运行一次.

        postrotate

        /usr/bin/killall -HUP httpd

        endscript

    }

     

    /var/log/news/* {    # 少用通配符, 因会它会包括已经切换过的日志, 要用的话最好在*号后加上扩展名, 如*.log

        monthly

        rotate 2

        olddir /var/log/news/old

        missingok

        postrotate

        kill -HUP 'cat /var/run/inn.pid'

        endscript

        nocompress

    }

     

    /var/log/ipwall/messages.log {   #日志路径一定要和rsyslog定义的日志文件路径一致

        rotate 65535             #滚动65535次

        create 0777 syslog adm   #设置权限,方便windows连接samba服务器

        compress                 #采用压缩

        size 50M                 #文件大小50M以上的分割日志

        dateext

        dateformat .%s           #定义文件切割后的文件名,必须配合dateext使用

     

        #posrotate/endscript这段脚本使rsyslog程序重新读取配置文件,程序释放对messages.log文件持有的文件描述符

        postrotate

        /bin/kill -HUP $(/bin/cat /var/run/rsyslogd.pid 2>/dev/null) &>/dev/null

        endscript

    }

  • 强制轮转

    1

    2

    3

    4

    5

    6

    logrotate -f /etc/logrotate.conf     # –强制轮转

    logrotate -vf /etc/logrotate.conf    # –再加一个-v参数查看轮转的过程

     

    logger -t 'aaaa' 'bbbbbb'            #–在日志里加一个内容tag和内容

    tail /var/log/messages

    # Jun 12 20:34:22 kadefor aaaa: bbbbbb

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用logrotate来进行每天的日志清理。logrotate是一个Linux系统中的工具,用于管理日志文件的轮转和压缩。它可以根据预设的规则定期轮转日志文件,以避免日志文件过大占用过多磁盘空间。 要使用logrotate进行每天的日志清理,你需要创建一个logrotate配置文件。在这个配置文件中,你可以指定要轮转的日志文件、轮转的频率以及其他相关的设置。 以下是一个示例的logrotate配置文件,假设你要清理的日志文件是/var/log/daemon.log: ``` /var/log/daemon.log { daily rotate 7 compress delaycompress missingok notifempty create 0640 root adm sharedscripts postrotate /etc/init.d/rsyslog restart endscript } ``` 在这个示例中,配置文件指定了以下设置: - `daily`:表示每天轮转一次日志文件。 - `rotate 7`:表示保留最近7个轮转后的日志文件,旧的日志文件将被删除。 - `compress`:表示压缩轮转后的日志文件。 - `delaycompress`:表示在下一次轮转时才压缩上一次轮转后的日志文件。 - `missingok`:表示如果日志文件不存在,不报错继续执行。 - `notifempty`:表示如果日志文件为空,不轮转。 - `create 0640 root adm`:表示创建新的日志文件时的权限和所属用户组。 - `sharedscripts`:表示在执行轮转前后执行脚本。 - `postrotate`和`endscript`之间的部分是在轮转后执行的脚本。在这个示例中,它重新启动了rsyslog服务,以确保日志继续写入新的日志文件。 你可以将以上配置保存为一个文件,比如/etc/logrotate.d/daemon,然后logrotate会自动按照配置文件进行日志轮转和清理。 请注意,logrotate的具体参数和行为可以根据你的需求进行调整。你可以查看logrotate的文档或使用`man logrotate`命令来获取更多详细的信息和示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值