1. 日志文件一般都位于/var/log, 日志所需要的服务和进程:
syslogd:主要登录系统与网路等服务的讯息;
klogd:主要登录核心产生的各项资讯;
logrotate:主要在进行登录档的轮替功能。
2.syslogd :记录日志的服务
syslog 的设定档:/etc/syslog.conf,这个档案规定了‘(1)什么服务 (2)的什么等级讯息 (3)需要被记录在哪里(设备或文件)’ 这三个咚咚,所以设定的语法会是这样:
其中,syslog 认识的服务主要有底下这些:
auth (authpriv) 主要与认证有关的机制,例如 login, ssh, su 等需要帐号/密码的咚咚;
cron就是例行性工作排程 cron/at 等产生讯息记录的地方;
daemon与各个 daemon 有关的讯息;
kern就是核心 (kernel) 产生讯息的地方;
lpr亦即是列印相关的讯息啊!
mail只要与邮件收发有关的讯息纪录都属于这个;
news与新闻群组伺服器有关的东西;
syslog就是 syslogd 这支程式本身产生的资讯啊!
user, uucp, local0 ~ local7 与 unix like 机器本身有关的一些讯息。
上面谈到的都是 syslog 自行制订的服务名称,软件开发商可以透过呼叫上述的服务名称来记录他们的软件。如下图所示:
讯息等级:
syslog 将讯息分为七个主要的等级,依次为:
info notice warning(warn) err(error) crit alert emerg(panic)
还有两个特殊的等级,那就是 debug(错误侦测等级) 与 none (不需登录等级,可以忽略掉某些服务)
在讯息等级之前还有 [.=!] 的连结符号喔!他代表的意思是这样的:
. :代表‘比后面还要高的等级 (含该等级) 都被记录下来’的意思,例如: mail.info 代表只要是 mail 的资讯,而且该资讯等级高于 info (含 info 本身)时,就会被记录下来的意思。
.=:代表所需要的等级就是后面接的等级而已, 其他的不要!
.!:代表不等于, 亦即是除了该等级外的其他等级都记录。
讯息记录的档名或装置或主机:
档案的绝对路径:通常就是放在 /var/log 里头的档案啦!
印表机或其他:例如 /dev/lp0 这个印表机装置
使用者名称:显示给使用者啰!
远端主机:例如 @www.vbird.tsai 当然啦,要对方主机也能支援才行!
*:代表‘目前在线上的所有人’,类似 wall 这个指令的意义!
自行增加日志文件功能
2.
日志文件的安全性设置:
为防止日志文件随意修改,可以添加日志文件的chattr的a属性。(即只能增加文件内容,不过前提是root的密码没被窃取,否则一切都没有)
不过,也因为这个 +a 的属性让该档案无法被删除与修改,所以啰,当我们进行日志文件轮替时 (logrotate) ,将会无法移动该日志文件的文件名呢!所以会造成很大的困扰。这个困扰虽然可以使用 logrotate 的设定档来解决。
要注意的是,当‘ 你不小心 "手动" 更动过日志文件后,例如那个 /var/log/messages , 你不小心用 vi 开启他,离开却下达 :wq 的参数,呵呵!那么该档案未来将不会再继续进行登录动作! ’这个问题真的很常发生!由于你以 vi 储存了登录档,则 syslogd 会误判为该档案已被更动过,将导致 syslogd 不再写入该档案新的内容。要让该登录档可以继续写入,你只要重新启动 syslog (/etc/init.d/syslog restart) 即可
日志文件服务器的设定:
如果有多台服务器,每一台负责一个服务,那么可以将日志文件都集中到一台专用的服务器上,以便查看和管理。
日志服务器端的设置:
日志客户端的设置:
3.日志文件的轮替(logrotate)
logrotate 是在规定的时间到了之后才来进行登录档的轮替, 所以这个 logrotate 程序是挂在 cron 底下进行的,/etc/cron.daily/logrotate 就是记录了每天要进行的登录档轮替的行为。
logrotate 这个程序的配置文件:
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf 才是主要的参数档案,至于 logrotate.d 是一个目录, 该目录里面的所有档案都会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的档案中,如果没有规定到的一些细部设定,则以 /etc/logrotate.conf 这个档案的规定来指定为预设值!
它的备份方式如下:
logrotate.conf的内容:
/etc/logrotate.d/中的设定档:
档名:被处理的登录档绝对路径档名写在前面,可以使用空白字元分隔多个登录档;
参数:上述档名进行轮替的参数使用 { } 包括起来;
执行脚本:可呼叫外部指令来进行额外的命令下达,这个设定需与 sharedscripts .... endscript 设定合用才行。至于可用的环境为:
prerotate:在启动 logrotate 之前进行的指令,例如修改登录档的属性等动作;
postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -hup) 某个服务!
prerotate 与 postrotate 对于已加上特殊属性的档案处理上面,是相当重要的执行程序!
logrotate的执行方法:
自定日志文件的轮替功能:
假设你已经建立了 /var/log/admin.log 这个档案, 现在,你想要将该档案加上 +a 这个隐藏标签,而且设定底下的相关资讯:
日志文件轮替一个月进行一次;
该登录档若大于 10mb 时,则主动进行轮替,不需要考虑一个月的期限;
保存五个备份档案;
备份档案需要压缩
4.分析日志文件
logwatch这个命令可以分析日志文件,也可以自己写脚本来做分析,可以鸟哥写的分析脚本