Xiaopei's DokuWiki

These are the good times in your life,
so put on a smile and it'll be alright

User Tools

Site Tools


it:linux:log

日志管理

TIPS

  • Graylog2 提供了一种日志格式: GELF, 特点 是可以加任意 _[additional field]

记日志

  • logger $MSG 可以在 syslog 中记录 $MSG

管日志

rsyslog

Main article: rsyslog

LogAnalyzer

http://loganalyzer.adiscon.com/

学习目标:

  1. 如何只显示指定日志?

系统日志

As of Debian 5.0, rsyslog has become the default syslog

rsyslog 的配置位于 /etc/rsyslog.conf/etc/rsyslog.d/

cron/daemon log 默认会未打开, 需修改/etc/rsyslog.d/50-default.conf

如何检查服务器是否正常关机?

$ grep “Kernel logging.* stopped.” kern.log

另外, 开机时, kern.log 会记录 “imklog 5.8.1, log source = /proc/kmsg started”.

Log File Usage
/var/log/croncron
/var/log/messages General log messages1)
/var/log/boot System boot log
var/log/wtmp, /var/log/faillog这两个文件可以记录正确登陆系统者的帐号资讯 (wtmp) 与错误登陆时所使用的帐号资讯 (faillog) 这对於追踪一般帐号者的使用行为很有帮助
/var/log/debug Debugging log messages
/var/log/auth.log User login and authentication logs , 基本上,只要牵涉到『需要输入帐号口令』的软件,那么w都会被记录在此文件中
/var/log/daemon.log Running services such as squid, ntpd and others log message to this file
/var/log/dmesg Linux kernel ring buffer log, 记录系统在启动的时候核心侦测过程所产生的各项资讯. 直接用 dmesg 可查, 但时间不可读, debian 下可看 /var/log/kern.log
/var/log/dpkg.log All binary package log includes package installation and other information
/var/log/faillog User failed login log file
/var/log/kern.log Kernel log file
/var/log/lpr.log Printer log file
/var/log/mail.* All mail server message log files
/var/log/mysql.* MySQL server log file
/var/log/user.log All userlevel logs
/var/log/xorg.0.log X.org log file
/var/log/apache2/* Apache web server log files directory
/var/log/lighttpd/* Lighttpd web server log files directory
/var/log/fsck/* fsck command log
/var/log/apport.log Application crash report / log file

logrotate

/etc/logrotate.conf
# 底下的配置是 "logrotate 的默认配置值" ,如果个别的文件配置了其他的参数,
# 则将以个别的文件配置为主,若该文件没有配置到的参数则以这个文件的内容为默认值!
 
weekly    <==默认每个礼拜对登录文件进行一次 rotate 的工作
rotate 4  <==保留几个登录文件呢?默认是保留四个! 如果想保留所有日志, 可以 rotate 5000(weekly 的话快 100 年了)
create    <==由於登录文件被更名,因此创建一个新的来继续储存之意!
#compress <==被更动的登录文件是否需要压缩?如果登录文件太大则可考虑此参数启动
 
include /etc/logrotate.d
# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来运行 rotate 的工作!
 
/var/log/wtmp {       <==仅针对 /var/log/wtmp 所配置的参数
    monthly           <==每个月一次,取代每周!
    minsize 1M        <==文件容量一定要超过 1M 后才进行 rotate (略过时间参数)
    create 0664 root utmp <==指定新建文件的权限与所属帐号/群组
    rotate 1          <==仅保留一个,亦即仅有 wtmp.1 保留而已。
}
# 这个 wtmp 可记录登陆者与系统重新启动时的时间与来源主机及登陆期间的时间。
# 由於具有 minsize 的参数,因此不见得每个月一定会进行一次喔!要看文件容量。
# 由於仅保留一个登录文件而已,不满意的话可以将他改成 rotate 5 吧!

强制 logrotate (run logrotate manually): $ logrotate –force /etc/logrotate.d/lighttpd

Adding a hostname to Logrotate email subjects

  1. 编写额外的发邮件的脚本:
    /usr/local/bin/logrotatemail.sh
    #! /bin/bash
    /bin/mail $1 "`hostname`: $2" $3
     
    # 或者
     
    #!/bin/bash
    HOST=`hostname`
    /bin/mail -s$HOST: $1$2 $3
  2. 修改 logrotate 的配置

Adding a hostname to Logrotate email subjects

手动 logrotate

logrotate 的缺陷:

  • olddir 必须和 log 在相同分区 (The directory must be on the same physical device as the log file being rotated)
  • logrotate 是 daily 运行的, 若需要更紧的运行, 则需要手动 cron 运行 logrotate -f 或写脚本

以下配置实现:

  • 每小时 logrotate
  • 将 rotate 后的内容移到 log 以外的文件系统
#### /etc/logrotate.d/foo
# 该配置会手动 cron 运行
rotate 1
missingok
notifempty
noolddir
copytruncate
nocompress
/var/log/foo/a.log {
	postrotate
		logdate=$(date +"%Y%m%d_%H%M")
		olddir=/media/data/foo_old_log
		mkdir -p $olddir
		gzip -c /var/log/foo/a.log.1 > "$olddir/a.log.$logdate.gz"
		rm /var/log/foo/a.log.1
	endscript
}
/var/log/foo/b.log {
	postrotate
		logdate=$(date +"%Y%m%d_%H%M")
		olddir=/media/data/foo_old_log
		mkdir -p $olddir
		gzip -c /var/log/foo/b.log.1 > "$olddir/b.log.$logdate.gz"
		rm /var/log/foo/b.log.1
	endscript
}


#### /etc/cron.d/foo
# 每小时 rotate gstation 日志
41 * * * * root logrotate -f /etc/logrotate.d/foo

日志统计

Apache

# 日志格式
# 192.168.1.152 - - [27/Apr/2012:13:59:15 +0800] "GET /index.php HTTP/1.1" 200 12209 "http://example.com/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7"
 
# 统计某天各小时的访问量
$ grep '26/Apr/2012' access_log | awk '{print $4}' |sort | awk 'BEGIN{FS=":"}{print $1, $2}' | uniq -c 
    875 [26/Apr/2012 00
    920 [26/Apr/2012 01
    874 [26/Apr/2012 02
    823 [26/Apr/2012 03
    840 [26/Apr/2012 04
    817 [26/Apr/2012 05
    819 [26/Apr/2012 06
    906 [26/Apr/2012 07
   2880 [26/Apr/2012 08
   5274 [26/Apr/2012 09
   3959 [26/Apr/2012 10
   3070 [26/Apr/2012 11
   2631 [26/Apr/2012 12
   4829 [26/Apr/2012 13
   7575 [26/Apr/2012 14
   5325 [26/Apr/2012 15
   4645 [26/Apr/2012 16
   2778 [26/Apr/2012 17
   2700 [26/Apr/2012 18
   1842 [26/Apr/2012 19
   1374 [26/Apr/2012 20
   1514 [26/Apr/2012 21
   1623 [26/Apr/2012 22
   1144 [26/Apr/2012 23
 
# 统计每分钟的访问量
$ grep '26/Apr/2012:18:0' access_log | awk '{print $4}' |sort | awk 'BEGIN{FS=":"}{print $1, $2, $3}' | uniq -c 
     58 [26/Apr/2012 18 00
     96 [26/Apr/2012 18 01
     23 [26/Apr/2012 18 02
     20 [26/Apr/2012 18 03
     16 [26/Apr/2012 18 04
     94 [26/Apr/2012 18 05
     44 [26/Apr/2012 18 06
     52 [26/Apr/2012 18 07
     54 [26/Apr/2012 18 08
      8 [26/Apr/2012 18 09

参考

1)
这个文件相当的重要,几乎系统发生的错误信息 (或者是重要的资讯) 都会记录在这个文件中; 如果系统发生莫名的错误时,这个文件是一定要查阅的登录文件之一。
it/linux/log.txt · Last modified: 2014/03/19 15:31 by admin