-
系统日志档的种类
-
FreeBSD 的日志档
FreeBSD 的日志档(log files),放在 /var/log/ 之下,以下是一台 FreeBSD
的主机刚装好时的 /var/log/ 下的档案。
cron
dmesg.today
httpd-access.log
httpd-error.log
lastlog
lpd-errs
maillog
maillog.0.gz
messages
mount.today
ppp.log
security
sendmail.st
sendmail.st.0
sendmail.st.1
setuid.today
slip.log
userlog
wtmp
ftpd
ps: 可能你的档案会不一样,视你所装的软体而定
-
储存的格式
这些档案储存的格式不太一样,一般有三种方式..
-
一般的文字档: 如 cron、dmesh.today、dmesg.yesterday、httpd-access.log.. 这种档
案可用一般的文字编辑软体,如 vi、ee 等直接开启,这也是大部份的 log file 采取的格式。
-
gzip 或 bzip2 压缩档:一般是用来做备份 log 档的,如 maillog.0.gz
-
二位元档或特殊的格式:有些档案采取二位元档的方式如 wtmp lastlog..这种类类型,必需
要用指令去开启,如 ac 或 last 来看。
例如:
# ac -d --> 显示某个 user 的使用时间合计
# last 颢示某个 user 的使用情况
-
档案内容简单说明
cron --> cron 的 log file
dmesg.today --> 最近的 dmesg 讯息
dmesg.yesterday --> 上一次的 dmesg
httpd-access.log --> apache 的存取
httpd-error.log --> apache 存取的 error message
lastlog --> 所有使用者的使用资料,为一二进位档
lpd-errs --> 列表机的 error message
maillog --> 信件的 log file,如 sendmail 或是 postix 都会在此记录
maillog.0.gz --> maillog 的备份档,一般有 0-7 个
messages --> 一些重要的讯息,如 mail 、系统..
mount.today --> mount 的讯息
ppp.log --> 使用拨接的 log file
security --> 如 root 登入、ssh.. 等的记录
sendmail.st --> sendmail 的记录档
sendmail.st.0 --> sendmail 备份,一般有多个,如 *.1 *.2
setuid.today --> 一些使用 setuid 的记录,由於某些程式执行时需有 root 的
身份,因此必需在程式执行转换成 root 身份以便执行。这个
记录档便是记录这些资料,如以前旧版的 sendmail 或 openwebmail
都是典型的例子。
slip.log --> 使用 slip 的记录,和 ppp 类似,目前已很少人在使用
userlog --> 通常记录一些 daemon 的登入记录
wtmp --> 使用者登入记录
ftpd --> ftp上下传的所有log纪录(需自己新增,方法写在最下面)
-
日志档(log files)是如何产生的
日志档的产生,一般可分为几种
-
由 syslogd 产生,其相关设定在 /etc/syslog.conf 中
-
由程式自行产生,典型的如 apache、一般自行安装的软体..
-
由 newsyslog,这个软体会叁照 /etc/newsyslog.conf 的设定,其实标准说法该是说,
newsyslog 决定了相关 log file的储存方式及备份时间。
-
有关 syslogd 的介绍
syslogd 是以一个 daemon 的方式在执行(也就是长驻在记忆体内),如 httpd inetd
都是如此..本来 syslogd 是 sendmail 设计的,不过后来大部份的 unix-like 都使
用类似的方法来记录某部份的 log files(不是全部)
这我们先来讨论一下有关 syslogd 的部份,syslogd 执行时会叁考 /etc/syslog.conf
的设定,以下是一个典型的例子每一行分成二个项目)
ps:其中是用 tab 来分割二个项目,不是用空白!
#*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/log/cron
#*.err root
#*.notice;news.err root
#*.alert root
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.* /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
!startslip
*.* /var/log/slip.log
!ppp
*.* /var/log/ppp.log
看起来好像很乱,我们分析一下
-
每一行分为二个部份,一个是讯息定义部份,另一个是讯息处理部份,如
*.err;kern.debug;auth.notice;mail.crit /dev/console
前面 *.err;kern.debug;auth.notice;mail.crit 是定义部份,而 /dev/console
代表要如何处理,在此为将讯息传到 console,也就是萤幕。
-
讯息的定义
讯息定义又分为二个部份,讯息产生者及类别,其格式为 [讯息产生者].[类别],
像 1 中就有四个讯息的定义,每一个讯息定义用 ; 分开。
-
*.err
-
kern.debug
-
auth.notice
-
mail.crit
在第一个部份一般有
* -> 代表所有的产生者
kern -> 代表 kernel 产生的讯息
auth -> 认证的讯息
mail -> 由 mail 所产生的讯息
lpr -> 列表机产生的讯息
讯息类别有以下几种
.* -> 所有的类别
.emerg -> 非常重要的紧急讯息类别
.err -> 错误
.alert -> 系统警告
.warning -> 一般性警告
.crit -> 关键状态类别
.notice -> 提示类别
.info -> 一般资讯
.debug -> 一些除错的资讯
实例
mail.* -> 代表 mail 产生的所有讯息类别
mail.info -> 代表由 mail 产生的一般性讯息
-
处理部份
处理部份可分为二个部份来说明:
-
转到 log 档
如以下:
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/log/cron
-
转给某个人,如 console root (在 monitor 显示)
#*.err;kern.debug;auth.notice;mail.crit /dev/console
*.err root
*.notice;news.err root
*.alert root
以上这些会在萤幕上显示
-
后续动作
记得修改完后,重新启动 syslogd 这个 daemon
# killall -1 syslogd
-
叁考资料
http://www.cmlab.idv.tw/modules/sections/index.php?op=viewarticle&artid=58
补充 ftpd
每个成功或是失败的 ftp 登入,都会以 LOG_FTP机制纪录起来。所有的下载、上载、新增
、删除、建立目录,以及更名的动作和档案名字都会被纪录下来。 LOG_FTP 讯息预设是不
会被 syslog 纪录下来的。还需要在syslogd的设定档面启动这个功能才行。开启
syslogd 纪录 ftpd log 的功能步骤如下:
需修改的档案是在
#/etc/syslog.conf
把下面这一行加到这个设定档:
ftp.* /var/log/ftpd
最后别忘了执行 touch 这个指令,因为syslogd不能写入到一个没有被开启过的档案。
#touch /var/log/ftpdlog