一、连接时间的日志
连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这两个文件都无法使用tail或cat命令直接查看。该文件由系统自动更新。Linux提供了如 w, who, finger, id, last, lastlog,ac等命令读取这部分的信息。
ggd543@ubuntu:/home/test$ w # 显示当前有哪些用户登陆了系统,并且正在做什么 23:20:44 up 1 day, 1:20, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT test pts/0 192.168.195.1 20:21 2:59m 0.45s 0.45s -bash test pts/1 192.168.195.1 23:00 0.00s 1.45s 0.07s sshd: test [priv]
ggd543@ubuntu:~$ who # 显示当前有哪些用户已登陆系统 ggd543 pts/0 Feb 25 23:22 (192.168.195.1) test pts/1 Feb 25 23:00 (192.168.195.1)
ggd543@ubuntu:~$ finger # 作用同whom命令 Login Name Tty Idle Login Time Office Office Phone ggd543 ggd543 pts/0 Feb 25 23:22 (192.168.195.1) test pts/1 Feb 25 23:00 (192.168.195.1)
ggd543@ubuntu:/home/test$ ac -p # 查看系统中每个用户连接到系统的累计时间(单位:小时) test 39.37 portaluser 33.44 ggd543 88.59 ggd543@ubuntu:/home/test$ ac -a # 显示系统中所有用户连接到系统的累计总时间(单位:小时) total 161.42 ggd543@ubuntu:/home/test$ ac -d # 查看每天系统中所有用户连接到系统的累计总时间(单位:小时) Feb 4 total 1.55 Feb 7 total 33.50 Feb 8 total 29.55 Feb 9 total 26.46 Feb 10 total 4.00 Feb 11 total 9.33 Feb 20 total 12.04 Feb 21 total 18.26 Feb 24 total 1.64 Today total 25.12
ggd543@ubuntu:/home/test$ sudo accton on # 开启进程日志统计 Turning on process accounting, file set to the default '/var/log/account/pacct'. ggd543@ubuntu:/home/test$ sudo accton off # 关闭进程日志统计 Turning off process accounting. ggd543@ubuntu:/home/test$ sudo accton on Turning on process accounting, file set to the default '/var/log/account/pacct'. ggd543@ubuntu:/home/test$ lastcomm # 查看进程统计日志情况
可以通过 sudo accton $log_file 指定进程统计日志
/var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息syslog服务由配置文件/etc/syslog.conf (ubuntu 11.10是/etc/rsyslog.conf, 而该文件会包含/etc/rsyslog.d目录下的所有辅助配置文件). /etc/syslog.conf的内容格式为:
/var/log/messages :记录Linux操作系统常见的系统和服务错误信息
/var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况
/var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址
/var/log/cron :记录crond计划任务服务执行情况
消息类型.错误级别 动作域
消息类型:auth,authpriv,security,cron, daemon, kern, lpr,mail, news, syslog, user, uucp, local0~local7
动作域: file,user,console,@remote_ip
比如
*.info;mail.none;authpriv.none;cron.none /var/log/messages
表示info级别的任何消息都发送到/var/log/messages日志文件,但邮件系统、验证系统和计划任务的错误级别信息就除外,不发送(none表示禁止)。又比如:
cron.* /var/log/cron
表示所有级别的cron信息发到/var/log/cron文件。 而
*.emerg *
表示emerg错误级别(危险状态)的所有消息类型发给所有用户
假如需要将一台ubuntu系统(假设IP为10.123.76.11)上的所有info级别的auth信息发给一台日志服务器(假设该系统为RHEL 5),则需要在ubuntu系统的/etc/rsyslog.d/50-default.conf中添加一行配置:
auth.info @10.123.76.11
并且在日志服务器的/etc/syslog.conf中添加如下的配置:
SYSLOGD_OPTIONS="-m 0 -r" //只要在这里添加“-r”就行咯 KLOGD_OPTIONS="-x" SYSLOG_UMASK=077
然后重启日志服务器的syslog服务
service syslog restart
随着时间的推移,日志文件会变得越来越大.当日志文件的容量超过一定大小时,会对系统的性能产生影响;有时我们也系统将日志文件做个备份。因此我们需要将日志转储。日志转储方式有每年转储、每月转储、每周转储或者达到一定大小转储等。 Linux中使用logrotate命令进行日志转储。可以配合cron计划任务轻松实现日志文件的定时转储, /etc/logrotate.conf提供了日志转储的相关配置.下面对该配置文件的一些设置项进行解释:
[root@xhot ~]# cat /etc/logrotate.conf # see "man logrotate" for details //可以查看帮助文档 # rotate log files weekly weekly //按每周转储 # keep 4 weeks worth of backlogs rotate 4 // 最多转储4次,由于每次转储按周进行,因此只保留最近4周的日志内容 # create new (empty) log files after rotating old ones create //当转储后的文件不存在时创建它 # 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 //每月转储 create 0664 root utmp //转储后文件不存在时创建它,文件所有者为root, 所属组为utmp,对应的权限为0664 rotate 1 //转储一次 } # system-specific logs may be also be configured here.
举两个例子:
1) 为/var/log/news/目录下的所有文件设置转储参数,每周转储,转储2次,转储时将老的日志文件放到/var/log/news/old目录下,若日志文件不存在,则跳过。完成后重启news新闻组服务,转储时不压缩。那么可以在/etc/logrotate.conf文件的最后添加如下:
/var/log/news/*{ monthly rotate 2 olddir /var/log/news/old missingok postrotate kill -HUP `cat /var/run/inn.pid` endscript nocompress }
2) :为/var/log/httpd/access.log和/var/log/httpd/error.log日志设置转储参数。转储5次,转储时发送邮件给 root@localhost用户,当日志文件达到100KB时才转储,转储后重启httpd服务,那么可以直接在/etc/logrotate.conf文件的最后添加如下:
/var/log/httpd/access.log /var/log/http/error.log{ rotate 5 mail root@localhost size=100k sharedscripts /sbin/killall -HUP httpd endscript }
最后记得重启syslog服务