日志管理
Rsyslog日志管理
采集-------->分析
一、处理日志的进程
日志分类:系统日志,进程日志,应用程序(httpd,nginx,mysql 等是以自己的方式记录日志)
记录日志的用处: 排错,追溯事件,统计流量,审计安全行为
rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证,计划任务…
rsyslogd只是负责记录日志,并不负责处理日志
处理分析日志:
1.少量日志使用vim cat tail less more grep awk这些文档处理程序查看和检索
2.大量日志可以用splunk、logstash、elk
日志存放位置:/var/log
日志服务启动:systemctl start rsyslog
日志配置文件:/etc/rsyslog.conf
[root@ever ~]# ps aux |grep rsyslogd |grep -v grep
root 686 0.0 0.0 219752 8436 ? Ssl 16:35 0:00 /usr/sbin/rsyslogd -n
日志可以存放在本地
日志可以存放在远程服务器,但远程服务器必须打开接收
二、常见的日志文件(系统、进程、应用程序)
ls /var/log/
tail /var/log/messages //系统主日志文件
tail -20 /var/log/messages
tail -f /var/log/messages //动态查看日志文件的尾部
tail -f /var/log/secure //认证、安全
tail /var/log/maillog //跟邮件(postfix)相关
tail /var/log/cron //crond、at进程产生的日志
tail /var/log/dmesg //和系统启动相关,开机后不再记录
grep -i fs /var/log/dmesg //只反映出开机过程的信息,开机成功后不会再改变
dmesg //查看系统开机后的信息
tail /var/log/audit/audit.log //系统审计日志
tail /var/log/yum.log //yum
进程以自己的方式去记录日志
tail /var/log/mysqld.log //MySQL进程自己记录的日志
tail /var/log/httpd/access_log //Apache自己记录的日志
tail /var/log/xferlog //和访问FTP服务器相关
二进制日志:
w //当前登录的用户即: /var/log/wtmp日志
last //最近登录的用户 /var/log/btmp,清空日志用
history -c
lastlog //所有用户的登录情况 /var/log/lastlog
常见的日志文件名:
目录/var/log
messages 系统消息日志文件
bootlog 系统引导和启动的日志
cron 周期性计划任务的日志
secure 安全日志,跟用户账号、登录相关的信息
maillog 邮件日志
btmp 错误(bad)登录的日志,用lastb命令查
wtmp 所有用户的登录、注销信息,用last命令查
案例1:
统计登录失败top 2
grep 'Fail' /var/log/secure |awk '{print $11}' |sort |uniq -c|sort -k1 -n -r |head -2
366 140.205.225.186
140/214
335 140.205.201.44
案例2:
统计登录成功
grep 'Accepted' /var/log/secure*
案例3:
查看网卡是否已被驱动
grep -i eth /var/log/dmesg
r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
r8169 0000:01:00.0: eth0: RTL8168e/8111e at 0xffffc900058b0000, f4:6d:04:77:17:e9, XID
0c200000 IRQ 27
r8169 0000:01:00.0: eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
三、rsyslogd子系统
注:rsyslogd是和大多的日志工作相关的一个进程,有自己的配置文件
rpm -qc rsyslog
/etc/logrotate.d/syslog //和日志的轮转(切割)相关
/etc/rsyslog.conf //rsyslogd的主配置文件
/etc/sysconfig/rsyslog //rsyslogd相关文件
man 3 syslog
vim /etc/rsyslog.conf
配置文件中记录了哪个设备(facility),关于哪个级别的信息,以及如何处理,不同的应用程序会选择不同的
设备进行日志记录
==产生日志的对象
man 3 syslog
LOG_AUTH
LOG_AUTHPRIV 安全认证
LOG_CRON 时钟进程 (cron and at)
LOG_DAEMON 系统进程
LOG_FTP ftp进程
LOG_KERN kernel messages
141/214
LOG_LOCAL0 through LOG_LOCAL7 用户自定义设备
LOG_LPR printer subsystem
LOG_MAIL 邮件系统mail subsystem
LOG_NEWS news subsystem
LOG_SYSLOG syslogd自身产生的日志
LOG_USER (default)
LOG_UUCP
==日志级别level syslogd
遇到何种情况(正常、错误)才会记录日志
LOG_EMERG 紧急,致命,服务无法继续运行,如配置文件丢失
LOG_ALERT 报警,需要立即处理,如磁盘空使用95%
LOG_CRIT 致命行为
LOG_ERR 错误行为
LOG_WARNING 警告信息
LOG_NOTICE 普通
LOG_INFO 标准信息
LOG_DEBUG 调试信息,排错所需,一般不建议使用
注释:
八种级别是从上到下依次降低的,也就是说越来越不紧急的,级别不区分大小写。设备如果有级
别,那么写日志的时候必须要使用比他级别高的才可以写进去,否则写不进去。
练习1:
将authpriv设备日志记录到/var/log/auth.log,日志文件由触发产生
例题1:修改安全认证的日志记录文件
[root@ever ~]# vim /etc/rsyslog.conf
authpriv.* /var/log/secure 将secure改成anquan.log
[root@ever ~]# service rsyslog restart
[root@ever ~]# ssh 172.16.100.134
The authenticity of host '172.16.100.134 (172.16.100.134)' can't be established.
RSA key fingerprint is c5:f0:d9:21:04:fb:1e:bf:0a:22:2f:9e:02:02:4c:6c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.100.134' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Tue Aug 18 15:15:23 2015 from 172.16.100.40
[root@ever ~]# tail /var/log/anquan.log
Aug 20 18:00:19 xiaochen sshd[17606]: Accepted password for root from 172.16.100.134 port
35142 ssh2
Aug 20 18:00:19 xiaochen sshd[17606]: pam_unix(sshd:session): session opened for user root by
(uid=0)
练习2:
改变应用程序sshd的日志设备为local5, 并定义local5设备日志记录到/var/log/local5.local
例题2:将sshd服务的日志设备为local5
一般情况下什么什么服务使用什么日志设备都已经在配置文件中规定好了,如果想要修改就需要在主配置
文件中进行修改,修改成自定义的local0-7的设备
[root@ever ~]# vim /etc/rsyslog.conf
local5.* /var/log/local5.log
[root@ever ~]# service rsyslog restart
[root@ever ~]# vim /etc/ssh/sshd_config
SyslogFacility AUTHPRIV 将AUTHPRIV改成LOCAL5设备,必须是大写,语法规定的
[root@ever ~]# service sshd restart
[root@ever ~]# ssh 172.16.100.134
[email protected]'s password:
Last login: Thu Aug 20 18:00:20 2015 from 172.16.100.134
[root@ever ~]# cat /var/log/local5.log
Aug 20 18:10:17 xiaochen sshd[17811]: Server listening on 0.0.0.0 port 22.
Aug 20 18:10:17 xiaochen sshd[17811]: Server listening on :: port 22.
Aug 20 18:11:00 xiaochen sshd[17826]: Accepted password for root from 172.16.100.134 port
35143 ssh2
用处:测试某个服务的时候,想要将这个服务的所有的日志全部都放到同一个文件中,避免和其他的日志
混合在一起,最后想要用的时候还要从大量的日志中截取
练习3:
使用logger程序写日志到所有终端上
例题3:
[root@localhost ~]# logger -p emerg yyy
练习4:
使用logger程序写日志到指定的设备及级别
注意seinux
[root@ever ~]# vim /etc/rsyslog.conf
local6.* /var/back/back.log
[root@ever ~]# mkdir /var/back
[root@ever ~]# service rsyslog restart
[root@ever ~]# cd /var/back/
[root@ever back]# ls
back.log
[root@ever back]# vim back.sh
!/bin/bash
tar czf /var/back/back_etc_`date +%m-%d`.tar.gz /etc &>/dev/null
find /var/back -mtime +1 -delete
logger -p local6.info -t "backup" "success"
[root@ever back]# /var/back/back.sh
[root@ever back]# ls
back_etc_08-20.tar.gz back.log back.sh
[root@ever back]# cat back.log
Aug 20 18:24:23 xiaochen backup: success
[root@ever ~]# crontab -e
crontab: installing new crontab
[root@ever ~]# crontab -l
00 04 * * * /var/back/back.sh
[root@ever back]# date 082103592015.50
2015年 08月 21日 星期五 03:59:50 CST
[root@ever back]# ls
back_etc_08-20.tar.gz back_etc_08-21.tar.gz back.log back.sh
[root@xever back]# tail /var/log/cron
Aug 20 18:01:01 ever run-parts(/etc/cron.hourly)[17647]: finished 0anacron
Aug 20 18:10:02 ever CROND[17791]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Aug 20 18:20:01 ever CROND[17997]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Aug 20 18:28:36 ever crontab[18134]: (root) BEGIN EDIT (root)
Aug 20 18:28:50 ever crontab[18134]: (root) REPLACE (root)
Aug 20 18:28:50 ever crontab[18134]: (root) END EDIT (root)
Aug 20 18:28:52 ever crontab[18145]: (root) LIST (root)
Aug 20 18:29:01 ever crond[9300]: (root) RELOAD (/var/spool/cron/root)
Aug 21 04:00:47 ever CROND[18170]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Aug 21 04:00:47 ever CROND[18171]: (root) CMD (/var/back/back.sh)
四、集中式日志管理(推送日志)
注意selinux和iptables
==日志服务器(开启接收功能)
[root@ever ~]# vim /etc/rsyslog.conf
Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/local3.log 在下面添加一行日志的存放位置
[root@ever ~]# service rsyslog restart
[root@ever ~]# netstat -tunlp |grep :514
udp 0 0 0.0.0.0:514 0.0.0.0:* 13096/rsyslogd
udp 0 0 :::514 :::* 13096/rsyslogd
[root@ever ~]# tail /var/log/local3.log
==日志客户端
[root@ever ~]# vim /etc/rsyslog.conf
local3.* @172.16.130.1
[root@ever ~]# service rsyslog restart
[root@ever ~]# logger -p local3.info -t "heihei" "wawa"
实验要求:
1、将老师的服务作为日志的服务器端,使用自己的真机向老师的服务器端推送日志
2、将自己的真机作为日志的服务器端,使用自己的虚拟机作为日志的客户端,虚拟机产生的日志需要推送
到自己的真机上面
3、实现虚拟机将日志推送到自己的真机上面,真机再将虚拟机推到真机上的日志推送到老师的服务器上
注意selinux和iptables
真机:
[root@gaozuo ~]# ip a show br0
3: br0: mtu 1500 qdisc noqueue state UNKNOWN
link/ether 44:37:e6:78:2b:3c brd ff:ff:ff:ff:ff:ff
inet 125.222.236.149/24 brd 125.222.236.255 scope global br0
[root@gaozuo ~]# vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
local3.* @125.222.236.120
local3.* /var/log/local3.log
[root@gaozuo ~]# /etc/init.d/rsyslog restart
虚拟机
[root@client ~]# vim /etc/rsyslog.conf
local3.* @125.222.236.149
[root@client ~]# /etc/init.d/rsyslog restart
[root@client ~]# logger -p "local3.info" -t "qianfeng" "fengfeng"
现象:
[root@gaozuo ~]# tail -f /var/log/local3.log
Oct 21 23:04:43 gaozuo fengfeng: fengfeng
[root@xiaochen ~]# tail -f /var/log/local3.log
Oct 21 23:04:43 gaozuo fengfeng: fengfeng
logrotate日志轮转
注:针对任何日志文件
防止单个日志文件容量过大。实现将日志文件定期或按一定大小切割成多个日志文件。定期删除过期的日志文件。
查软件是否已安装:rpm -q logrotate
查文件名列表:rpm -ql logrotate
查配置文件列表:rpm -qc logrotate
一、logrotate (轮转,日志切割)
如果没有日志轮转,日志文件会越来越大,最后导致日志打不开或者是打开时间过长
将丢弃系统中最旧的日志文件,以节省空间
logrotate本身不是系统进程,即日志的轮转不会自动执行,它是通过写到相应的配置文件中使用计划任
务crond每天执行
对日志的切割,你只需要给他定义一个规则
[root@kvm1 ~]# rpm -qa |grep logrotate
logrotate-3.7.8-16.el6.x86_64
[root@kvm1 ~]# rpm -qc logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/rwtab.d/logrotate
/var/lib/logrotate/logrotate.status
[root@localhost ~]# ls /etc/cron.daily/
cups makewhatis.cron prelink rhsmd
logrotate mlocate.cron readahead.cron tmpwatch
[root@kvm1 ~]# cat /etc/cron.daily/logrotate //计划任务
!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 //按照文件规则来轮转日志
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
logrotate 配置文件:
/etc/logrotate.conf (决定每个日志文件如何轮转)
/etc/logrotate.d/*
[root@tianyun ~]# ls /etc/logrotate.conf /etc/logrotate.d/
/etc/logrotate.conf //决定每个日志如何轮转
/etc/logrotate.d/:
acpid cups iscsiuiolog ppp rpm subscription-manager up2date wpa_supplicant
conman httpd mgetty psacct setroubleshoot syslog vsftpd.log yum
主配置文件
[root@tianyun ~]# vim /etc/logrotate.conf
=全局设置==
weekly //轮转的周期,一周轮转
rotate 4 //保留4份
create //轮转后创建新文件
dateext //使用日期作为后缀
compress //是否压缩
RPM packages drop log rotation information into this directory
rpm安装的程序,按照下面目录规则进行轮转
include /etc/logrotate.d //包含该目录下的文件
no packages own wtmp and btmp -- we'll rotate them here
对于wtmp和btmp这样无主的日志,按照下面配置进行轮转
/var/log/wtmp { //对该日志文件设置轮转的方法
monthly //一月轮转一次
minsize 1M //最小达到1M才轮转,即到了规定的时间未达到大小不会轮转
create 0664 root utmp //轮转后创建新文件,并设置权限属主和属组
rotate 1 //保留一份
}
/var/log/btmp {
missingok //丢失不提示
monthly //每月轮转一次
create 0600 root utmp //轮转后创建新文件,并设置权限
rotate 1 //保留一份
}
[root@kvm1 ~]# vim /etc/logrotate.d/yum //原有的设置,没有说保存几份,看上面的全局设置
/var/log/yum.log { //yum日志文件
missingok //丢失不提示
notifempty //如果为空,不轮转
size 30k //达到30k就轮转
yearly //达到一年就轮转一次,两者满足一个就轮转
create 0600 root root //创建新文件
}
[root@kvm1 ~]# ls /etc/logrotate.d/
chrony ppp wpa_supplicant syslog yum
日志的轮转规则文件是在安装rpm包时就自动提供的,无需人为手动编写
只有自己创建的日志文件才需要自己编写日志轮转规则文件
[root@kvm1 ~]# yum -y install httpd
[root@physical ~]# ls /etc/logrotate.d/
chrony ppp wpa_supplicant syslog yum httpd
[root@kvm1 logrotate.d]# yum -y install vsftpd
[root@kvm1 logrotate.d]# ls
chrony httpd ppp syslog vsftpd wpa_supplicant yum
例1:
验证missingok和nomissingok
missingok
[root@kvm1 ~]# cp /etc/logrotate.d/yum /tmp
[root@kvm1 ~]# vim /etc/logrotate.d/yum
/var/log/yum.log {
missingok
notifempty
size 30k
daily
create 0600 root root
}
测试:
[root@kvm1 logrotate.d]# mv /var/log/yum.log /tmp/
[root@kvm1 ~]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
nomissingok
[root@kvm1 ~]# vim /etc/logrotate.d/yum
/var/log/yum.log {
notifempty
size 30k
daily
create 0600 root root
}
[root@kvm1 ~]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
error: stat of /var/log/yum.log failed: No such file or directory
[root@kvm1 ~]# mv /tmp/yum.log /var/log/
例2:
验证notifempty和ifempty
[root@kvm1 ~]# grep yum /var/lib/logrotate.status
“/var/log/yum.log” 2018-8-09-16:14:1
[root@kvm1 logrotate.d]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
notifempty
[root@kvm1 logrotate.d]# ll -h /var/log/yum.log*
-rw------- 1 root root 0 Aug 13 16:33 /var/log/yum.log
147/214
-rw-------. 1 root root 8.9K Aug 13 16:22 /var/log/yum.log-20180813
[root@kvm1 logrotate.d]# date 081417002018
Tue Aug 14 17:00:00 CST 2018
测试:
[root@kvm1 logrotate.d]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
[root@kvm1 logrotate.d]# ll -h /var/log/yum.log*
-rw------- 1 root root 0 Aug 13 16:33 /var/log/yum.log
-rw-------. 1 root root 8.9K Aug 13 16:22 /var/log/yum.log-20180813
ifempty
[root@kvm1 ~]# vim /etc/logrotate.d/yum
/var/log/yum.log {
ifempty
size 30k
daily
create 0600 root root
}
测试:
[root@kvm1 logrotate.d]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
[root@kvm1 logrotate.d]# ll -h /var/log/yum.log*
-rw------- 1 root root 0 Aug 14 17:00 /var/log/yum.log
-rw-------. 1 root root 8.9K Aug 13 16:22 /var/log/yum.log-20180813
-rw------- 1 root root 0 Aug 13 16:33 /var/log/yum.log-20180814
例3:
验证create perm owner group
[root@kvm1 ~]# vim /etc/logrotate.d/yum
/var/log/yum.log {
ifempty
size 30k
daily
create 0644 alice alice
}
[root@kvm1 logrotate.d]# id alice
uid=1002(alice) gid=1002(alice) groups=1002(alice)
测试:
[root@kvm1 logrotate.d]# date 081517002018
Wed Aug 15 17:00:00 CST 2018
[root@kvm1 logrotate.d]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
[root@kvm1 logrotate.d]# ll -h /var/log/yum.log*
-rw-r–r-- 1 alice alice 0 Aug 15 17:00 /var/log/yum.log
-rw-------. 1 root root 8.9K Aug 13 16:22 /var/log/yum.log-20180813
-rw------- 1 root root 0 Aug 13 16:33 /var/log/yum.log-20180814
-rw------- 1 root root 0 Aug 14 17:00 /var/log/yum.log-20180815
例4:
验证rotate
[root@kvm1 ~]# vim /etc/logrotate.d/yum
/var/log/yum.log {
ifempty
size 30k
daily
create 0644 alice alice
rotate 2
}
148/214
测试:
[root@kvm1 logrotate.d]# date 081617002018
Thu Aug 16 17:00:00 CST 2018
[root@kvm1 logrotate.d]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
[root@kvm1 logrotate.d]# logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
[root@kvm1 logrotate.d]# ll -h /var/log/yum.log*
-rw-r–r-- 1 alice alice 0 Aug 16 17:00 /var/log/yum.log
-rw------- 1 root root 0 Aug 14 17:00 /var/log/yum.log-20180815
-rw-r–r-- 1 alice alice 0 Aug 15 17:00 /var/log/yum.log-20180816
例5:
验证关于应用程序的日志轮转规则生效后需要重新加载配置/etc/logrotate.d/httpd
[root@kvm1 logrotate.d]# systemctl start httpd
[root@kvm1 logrotate.d]# ll /var/log/httpd/
total 12
-rw-r–r-- 1 root root 7352 Aug 16 17:07 access_log
[root@kvm1 ~]# vim /etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
rotate 2
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
如果不想要修改时间可以通过强制切割的方式来实现实验效果
[root@kvm1 logrotate.d]# logrotate -f /etc/logrotate.d/httpd
[root@kvm1 logrotate.d]# ll /var/log/httpd/
total 12
-rw-r–r-- 1 root root 7352 Aug 16 17:07 access_log.1
继续访问网站,观察日志文件…
[root@kvm1 logrotate.d]# ll /var/log/httpd/
total 16
-rw-r–r-- 1 root root 9116 Aug 16 17:08 access_log.1
[root@kvm1 logrotate.d]# ll /var/log/httpd/
total 16
-rw-r–r-- 1 root root 10880 Aug 16 17:08 access_log.1
[root@kvm1 ~]# ll /proc/6416/fd
total 0
lr-x------ 1 root root 64 Apr 7 10:02 0 -> /dev/null
lrwx------ 1 root root 64 Apr 7 10:02 1 -> socket:[76246]
l-wx------ 1 root root 64 Apr 7 10:02 2 -> /var/log/httpd/error_log-20170407
lrwx------ 1 root root 64 Apr 7 10:02 3 -> socket:[76890]
lrwx------ 1 root root 64 Apr 7 10:02 4 -> socket:[76891]
lr-x------ 1 root root 64 Apr 7 10:02 5 -> pipe:[76906]
l-wx------ 1 root root 64 Apr 7 10:02 6 -> pipe:[76906]
l-wx------ 1 root root 64 Apr 7 10:02 7 -> /var/log/httpd/access_log-20170407
[root@kvm1 ~]# systemctl reload httpd
[root@kvm1 ~]# ll /proc/6416/fd
total 0
lr-x------ 1 root root 64 Apr 7 10:02 0 -> /dev/null
lrwx------ 1 root root 64 Apr 7 10:02 1 -> socket:[76246]
l-wx------ 1 root root 64 Apr 7 10:02 2 -> /var/log/httpd/error_log
lrwx------ 1 root root 64 Apr 7 10:02 3 -> socket:[76890]
lrwx------ 1 root root 64 Apr 7 10:02 4 -> socket:[76891]
lr-x------ 1 root root 64 Apr 7 10:02 5 -> pipe:[96182]
l-wx------ 1 root root 64 Apr 7 10:02 6 -> pipe:[96182]
l-wx------ 1 root root 64 Apr 7 10:02 7 -> /var/log/httpd/access_log
继续访问网站,观察日志文件…
[root@kvm1 ~]# vim /etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
[root@kvm1 ~]# logrotate -f /etc/logrotate.conf
[root@kvm1 logrotate.d]# ll /var/log/httpd/
total 32
-rw-r–r-- 1 root root 0 Aug 16 17:10 access_log
-rw-r–r-- 1 root root 5588 Aug 16 17:09 access_log.1
-rw-r–r-- 1 root root 10880 Aug 16 17:08 access_log.2
继续访问网站,观察日志文件…
[root@kvm1 logrotate.d]# ll /var/log/httpd/
total 36
-rw-r–r-- 1 root root 1764 Aug 16 17:10 access_log
-rw-r–r-- 1 root root 5588 Aug 16 17:09 access_log.1
-rw-r–r-- 1 root root 10880 Aug 16 17:08 access_log.2
说明:
当切割之后创建新文件,新文件有新的inode number
如果希望进程如rsyslog、nginx进程会把新的日志写入新日志文件中,应该在日志切割后,
告诉一下rsyslog、nginx进程 reload 或 信号(1 or HUP)
例6:
验证关于prerotate/endscript和postrotate/endscript
[root@kvm1 logrotate.d]# cat yum
/var/log/yum.log {
prerotate
chattr -a /var/log/yum.log
endscript
ifempty
size 30k
daily
create 0644 alice alice
rotate 2
postrotate
chattr +a /var/log/yum.log
endscript
}
[root@kvm1 logrotate.d]# logrotate -f /etc/logrotate.d/yum
[root@kvm1 logrotate.d]# ll /var/log/yum.log*
-rw-r–r-- 1 alice alice 0 Aug 16 17:13 /var/log/yum.log
-rw-r–r-- 1 alice alice 54 Aug 16 17:03 /var/log/yum.log.1
[root@kvm1 logrotate.d]# lsattr /var/log/yum.log
-----a---------- /var/log/yum.log