linux系统日志分析.docx
《linux系统日志分析.docx》由会员分享,可在线阅读,更多相关《linux系统日志分析.docx(19页珍藏版)》请在冰豆网上搜索。
linux系统日志分析
RedHat系统日志分析
其实,可以说成是监控系统的记录,系统一举一动基本会记录下来。
这样由于信息非常全面很重要,通常只有root可以进行视察!
通过登录文件(日志文件)可以根据屏幕上面的错误讯息与再配合登录文件的错误信息,几乎就可以解决大部分的Linux问题!
所以日志文件异常重要,作为一个合格的linux系统工程师,日志文件是必要熟练掌握的部分。
常见的几个登录文件有:
/var/log/secure:
记录登入系统存取数据的文件,例如pop3,ssh,telnet,ftp等都会被记录;
/var/log/wtmp:
记录登入者的讯息数据,由于本文件已经被编码过,所以必须使用last指令来取出文件的内容;
/var/log/messages:
尤为重要,几乎发生的错误讯息(或是重要信息)都会被记录在此;
/var/log/boot.log:
记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息;
/var/log/maillog或/var/log/mail/*:
纪录邮件存取或往来(sendmail与pop3)的使用者记录;
/var/log/cron:
记录crontab这个例行性服务的内容的。
/var/log/httpd,/var/log/news,/var/log/mysqld.log,/var/log/samba,/var/log/procmail.log:
分别是几个不同的网络服务的记录文件!
登录文件的纪录程序之一:
syslogd
通常经过syslog而记录下来的数据主要有:
事件发生的日期与时间;
发生此事件的主机名称;
启动此事件的服务名称(如samba,xinetd等)或函式名称(如libpam..);
该讯息数据内容
syslogd的daemon配置文件:
/etc/syslog.conf
内容语法是这样的:
服务名称[.=!
]讯息等级讯息记录的文件名或装置或主机
#例如底下:
mail.info/var/log/maillog_info
服务名称:
该服务产生的讯息会被纪录的意思。
syslog认识的服务主要有底下这些:
auth,authpriv:
主要与认证有关的机制,例如telnet,login,ssh等需要认证的服务都是使用此一机制;
cron:
例行性命令cron/at等产生讯息记录的地方;
daemon:
与各个daemon有关的讯息;
kern:
核心(kernel)产生讯息的地方;
lpr:
打印相关的讯息!
mail:
只要与邮件收发有关的讯息纪录都属于这个;
news:
与新闻群组服务器有关的东西;
syslog:
syslogd这支程序本身产生的信息啊!
user,uucp,local0~local7:
与Unixlike机器本身有关的一些讯息。
讯息等级
系统将讯息分为七个主要的等级,依序是由不重要排列到重要讯息等级:
info:
仅是一些基本的讯息说明而已;
notice:
比info还需要被注意到的一些信息内容;
warning或warn:
警示讯息,可能有问题,但是还不至于影响到某个daemon运作。
err或error:
一些重大的错误讯息,这就要去找原因了。
crit:
比error还要严重的错误信息,crit是临界点(critical)的缩写,已经很严重了!
alert:
警告警告,已经很有问题的等级,比crit还要严重!
emerg或panic:
疼痛等级,意指系统已经几乎要当机的状态!
很严重的错误信息了。
除了这些有等级的讯息外,还有两个特殊的等级,那就是debug(错误侦测等级)与none(不需登录等级)两个,当要作一些错误侦测,或者是忽略掉某些服务的信息时,就用这俩!
在讯息等级之前还有[.=!
]的连结符号!
他代表的意思是:
.:
代表比后面还要高的等级(含该等级)都被记录下来的意思,例如:
mail.info代表只要是mail的信息,而且该信息等级高于info(含info)时,就会被记录下来。
.=:
代表所需要的等级就是后面接的等级而已!
.!
:
代表不等于。
日志文件记录的文件名或装置或主机常见的放置处:
文件的绝对路径:
通常就是放在/var/log里头的文件!
打印机或其它:
例如/dev/lp0这个打印机装置(即使被黑客可以删除掉日志文件,但是最终删除不了打印出来的日志信息)
使用者名称:
显示给使用者!
远程主机:
例如@test.adsldns.org,要对方主机也能支持才行!
*:
代表目前在线的所有人,类似wall这个指令的意义!
看看在尚未开启网络服务的情况下来自FedoraCoreRelease4的相关资料
[root@linux~]#vi/etc/syslog.conf
#kern.*/dev/console
#只要是kernel产生的讯息,全部都送到console去!
默认是关闭的。
*.info;mail.none;authpriv.none;cron.none/var/log/messages
#在已知各服务的讯息中,不要记录到这个文件中,把已知的服务记录到单独的日志文件中去,方便日后查询,否则messages这个文件就太混乱了。
这个文件非常重要,所有未知的信息都会被记录在这个文件中,所以有问题,找这个文件就八九不离十了。
authpriv.*/var/log/secure
#这个就是经过一些身份确认的行为之后,需要记录身份的文件。
mail.*-/var/log/maillog
#只要跟mail有关的(不论是pop3还是sendmail)都会被纪录到这个文件!
cron.*/var/log/cron
#例行性命令相关的。
*.emerg*
#任何时候发生的警告讯息都会显示给在线的所有人!
那个*就是目前在线的所有人。
uucp,news.crit/var/log/spooler
#记录新闻错误高于crit的等级的信息,写入spooler当中!
local7.*/var/log/boot.log
#将开机的当中的讯息写入/var/log/boot.log中!
每个版本的syslog.conf差异是很大的,所以,每个登录文件记录的数据其实不很固定。
例:
让所有的信息都额外写入到/var/log/admin.log!
[root@linux~]#vi/etc/syslog.conf
*.info/var/log/admin.log》》如果服务器硬盘容量够大,这么做也不失为一个良策。
[root@linux~]#/etc/init.d/syslogrestart
[root@linux~]#ll/var/log/admin.log
-rw-------1rootroot122Oct2322:
21/var/log/admin.log》》注意权限
一台主机管理多台主机登录文件
#1.先取得portnumber的信息!
[root@linux~]#grep514/etc/services
syslog514/udp》》syslog的固定端口
#注意,/etc/services里面必须要存在这一行才行,否则自行手写!
#2.修改syslogd的启动配置文件
[root@linux~]#vi/etc/sysconfig/syslog
#SYSLOGD_OPTIONS="-m0"改成底下这样子
SYSLOGD_OPTIONS="-m0-r"
#3.重新启动与观察syslogd!
[root@linux~]#/etc/init.d/syslogrestart
[root@linux~]#netstat-tlunp
ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname
udp000.0.0.0:
5140.0.0.0:
*24314/syslogd
Linux主机已经可以接收来自其它主机的登录信息了!
client端的设定就简单了!
只要指定某个信息传送到这部主机即可!
比如,登录文件主机IP为192.168.1.100,而client端希望所有的数据都送给主机,可以在/etc/syslog.conf里面新增这样的一行:
[root@linux~]#vi/etc/syslog.conf
*.*@192.168.1.100
未来主机上面的登录文件当中,每一行的主机名称就会显示来自不同主机的信息了。
登录文件服务程序之二,轮滚(logrotate):
对于Linux的系统安全来说,日志文件是极其重要的工具。
系统管理员可以使用logrotate程序用来管理系统中的最新的事件。
对于Linux的系统安全来说,日志文件是极其重要的工具。
系统管理员可以使用logrotate程序用来管理系统中的最新的事件。
logrotate还可以用来备份日志文件,本篇将通过以下几部分来介绍日志文件的管理:
1、logrotate配置
2、缺省配置logrotate
3、使用include选项读取其他配置文件
4、使用include选项覆盖缺省配置
5、为指定的文件配置转储参数
一、logrotate配置
logrotate程序是一个日志文件管理工具。
用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。
我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过cron程序来执行。
logrotate程序还可以用于压缩日志文件,以及发送日志到指定的E-mail。
logrotate的配置文件是/etc/logrotate.conf。
主要参数如下表:
参数 功能
compress 通过gzip压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
createmodeownergroup转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和compress一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖delaycompress选项,转储同时压缩。
errorsaddress 专储时的错误信息发送到指定的Email地址
ifempty 即使是空文件也转储,这个是logrotate的缺省选项。
notifempty 如果是空文件的话,不转储
mailaddress 把转储的日志文件发送到指定的E-mail地址
nomail 转储时不发送日志文件
olddirdirectory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotatecount 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
tabootext[+]list 让logrotate不转储指定扩展名的文件,缺省的扩展名是:
.rpm-orig,.rpmsave,v,和~
sizesize 当日志文件到达指定的大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem).
二、缺省配置logrotate
logrotate缺省的配置/etc/logrotate.conf。
RedHatLinux缺省安装的文件内容是:
#see“manlogrotate”fordetails
#rotatelogfilesweekly
weekly
#keep4weeksworthofbacklogs
rotate4
#senderrorstoroot
errorsroot
#createnew(empty)logfilesafterrotatingoldones
create
#uncommentthisifyouwantyourlogfilescompressed
#compress
1
#RPMpackagesdroplogrotationinformationintothisdirectory
include/etc/logrotate.d
#nopackagesownlastlogorwtmp?
we&aposllrotatethemhere
/var/log/wtmp{
monthly
create0664rootutmp
rotate1
}
/var/log/lastlog{
monthly
rotate1
}
#system-specificlogsmaybeconfiguredhere
缺省的配置一般放在logrotate.conf文件的最开始处,影响整个系统。
在本例中就是前面12行。
第三行weekly指定所有的日志文件每周转储一次。
第五行rotate4指定转储文件的保留4份。
第七行errorsroot指定错误信息发送给root。
第九行create指定logrotate自动建立新的日志文件,新的日志文件具有和
原来的文件一样的权限。
第11行#compress指定不压缩转储文件,如果需要压缩,去掉注释就可以了。
三、使用include选项读取其他配置文件
include选项允许系统管理员把分散到几个文件的转储信息,集中到一个
主要的配置文件。
当logrotate从logrotate.conf读到include选项时,会从指定文件读入配置信息,就好像他们已经在/etc/logrotate.conf中一样。
第13行include/etc/logrotate.d告诉logrotate读入存放在/etc/logrotate.d目录中的日志转储参数,当系统中安装了RPM软件包时,使用include选项十分有用。
RPM软件包的日志转储参数一般存放在/etc/logrotate.d目录。
include选项十分重要,一些应用把日志转储参数存放在/etc/logrotate.d。
典型的应用有:
apache,linuxconf,samba,cron以及syslog。
这样,系统管理员只要管理一个/etc/logrotate.conf文件就可以了。
四、使用include选项覆盖缺省配置
当/etc/logrotate.conf读入文件时,include指定的文件中的转储参数将覆盖缺省的参数,如下例:
#linuxconf的参数
/var/log/htmlaccess.log
{errorsjim
notifempty
nocompress
weekly
prerotate
/usr/bin/chattr-a/var/log/htmlaccess.log
endscript
postrotate
/usr/bin/chattr+a/var/log/htmlaccess.log
endscript
}
/var/log/netconf.log
{nocompress
monthly
}
在这个例子中,当/etc/logrotate.d/linuxconf文件被读入时,下面的参数将覆盖/etc/logrotate.conf中缺省的参数。
Notifempty
errorsjim
五、为指定的文件配置转储参数
经常需要为指定文件配置参数,一个常见的例子就是每月转储/var/log/wtmp。
为特定文件而使用的参数格式是:
#注释
/full/path/to/file
{
option(s)
}
下面的例子就是每月转储/var/log/wtmp一次:
#Uselogrotatetorotatewtmp
/var/log/wtmp
{
monthly
rotate1
}
六、其他需要注意的问题
1、尽管花括号的开头可以和其他文本放在同一行上,但是结尾的花括号必须单独成行。
2、使用prerotate和postrotate选项
下面的例子是典型的脚本/etc/logrotate.d/syslog,这个脚本只是对
/var/log/messages有效。
/var/log/messages
{
prerotate
/usr/bin/chattr-a/var/log/messages
endscript
postrotate
/usr/bin/kill-HUPsyslogd
/usr/bin/chattr+a/var/log/messages
endscript
}
第一行指定脚本对/var/logmessages有效
花ê哦阅诓康慕疟驹诵杏?
/var/log/messages
prerotate命令指定转储以前的动作/usr/bin/chattr-a去掉/var/log/messages文件的“只追加”属性endscript结束prerotate部分的脚本postrotate指定转储后的动作
/usr/bin/killall-HUPsyslogd
用来重新初始化系统日志守护程序syslogd
/usr/bin/chattr+a/var/log/messages
重新为/var/log/messages文件指定“只追加”属性,这样防治程序员或用户覆盖此文件。
最后的endscript用于结束postrotate部分的脚本
3、logrotate的运行分为三步:
判断系统的日志文件,建立转储计划以及参数,通过crondaemon运行下面的代码是RedHatLinux缺省的crontab来每天运行logrotate。
#/etc/cron.daily/logrotate
#!
/bin/sh
/usr/sbin/logrotate/etc/logrotate.conf
4、/var/log/messages不能产生的原因:
这种情况很少见,但是如果你把/etc/services中的514/UDP端口关掉的话,这个文件就不能产生了。
小结:
本文通过对RedHat系统上典型的logrotate配置例子的介绍,详细说明了logrotate程序的应用方法。
希望对所有Linux系统管理员有所帮助。
Logrotate补充:
所谓的logrotate,就是将旧的log文件更名,然后建立一个空的log文件,如此一来,新的log文件将从零开始记录,然后只要将旧的log文件留下一段时间!
旧的纪录保存了一段时间没有问题,那么就可以让系统自动的将他删掉,否则占用硬盘空间。
如图比如规定了message日志文件轮滚3次:
最初的日志文件message
轮滚一次后messagemessage1
轮滚二次后messagemessage1message2
轮滚三次后messagemessage1message2message3
删除(如果再次轮滚,message3就会被删除,而message2就会变成message3,且系统会新建立一个message)
注意,相同颜色的mssage表示的是一个内容的文件,只不过每次轮滚他的名字后面会改一次数字。
logrotate的配置文件
/etc/logrotate.conf
/etc/logrotate.d/
注意!
logrotate.conf才是主要的参数文件,logrotate.d是一个目录,该目录里面的所有文件都会被主动的读入/etc/logrotate.conf当中来进行!
另外,在/etc/logrotate.d/里面的文件中,如果没有规定到的一些细部设定,则以/etc/logrotate.conf的规定来指定为默认值!
[root@linux~]#vi/etc/logrotate.conf
#底下是"logrotate的预设值,如果个别的文件设定了其它的参数,那么将以个别的文件设定为主,若该文件没有设定到的参数,则以这个档案的内容为默认值!
Weekly预设每个礼拜对登录文件进行一次rotate的工作
rotate4保留四个登录文件!
create是否建立新的登录文件来记录!
#compressrotate之后的登录文件,是否压缩,通常是不要压缩啦,压缩登录文件扩展名会变成messages.1.gz!
系统负载不大,且日志比较大,可以考虑压缩。
include/etc/logrotate.d》》将底下这个目录中的所有文件都读进来执行rotate的工作!
/var/log/wtmp{
monthly
create0664rootutmp
rotate1
}
。
。
。
省略。
。
。
#在logrotate.conf文件当中,只有这个数据是在记载如何对登录文件进行轮替的!
这个登录文件记载的就是使用login登入系统时的使用者状态,last就是读自/var/log/wtmp当中记录的数据!
整个段落的意义是:
#1.每个月进行一次logrotate的工作;
#2.将文件的权限设定为664,且拥有者为root,群组为utmp;
#3.仅保存前一个月的rotate备份!
可以修改大一点
[root@linux~]#vi/etc/logrotate.d/syslog
/var/log/messages/var/log/secure/var/log/maillog/var/log/spooler
/var/log/boot.log/var/log/cron{
sharedscripts
postrotate
/bin/kill-HUP`cat/var/run/syslogd.pid2>/dev/null`2>/dev/null||true
endscript
}
设定的项目与前面提到的相同,并且可加入轮替前(pre)与后(post)的一