1、linux系统日志分析RedHat系统日志分析 其实,可以说成是监控系统的记录,系统一举一动基本会记录下来。这样由于信息非常全面很重要,通常只有 root 可以进行视察!通过登录文件(日志文件)可以根据屏幕上面的错误讯息与再配合登录文件的错误信息,几乎就可以解决大部分的 Linux 问题! 所以日志文件异常重要,作为一个合格的linux系统工程师,日志文件是必要熟练掌握的部分。常见的几个登录文件有:/var/log/secure:记录登入系统存取数据的文件,例如 pop3, ssh, telnet, ftp 等都会被记录;/var/log/wtmp:记录登入者的讯息数据,由于本文件已经被编码过
2、,所以必须使用 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/l
3、og/procmail.log:分别是几个不同的网络服务的记录文件!登录文件的纪录程序之一: syslogd通常经过 syslog 而记录下来的数据主要有:事件发生的日期与时间;发生此事件的主机名称;启动此事件的服务名称 (如 samba, xinetd 等) 或函式名称 (如 libpam .);该讯息数据内容syslogd的daemon配置文件:/etc/syslog.conf内容语法是这样的:服务名称.=!讯息等级 讯息记录的文件名或装置或主机# 例如底下:mail.info /var/log/maillog_info服务名称:该服务产生的讯息会被纪录的意思。syslog 认识的服务主要
4、有底下这些:auth, authpriv:主要与认证有关的机制,例如telnet, login, ssh 等需要认证的服务都是使用此一机制;cron:例行性命令 cron/at 等产生讯息记录的地方;daemon:与各个 daemon 有关的讯息;kern:核心 (kernel) 产生讯息的地方;lpr:打印相关的讯息!mail:只要与邮件收发有关的讯息纪录都属于这个;news:与新闻群组服务器有关的东西;syslog:syslogd 这支程序本身产生的信息啊!user, uucp, local0 local7:与 Unix like 机器本身有关的一些讯息。讯息等级系统将讯息分为七个主要的等
5、级,依序是由不重要排列到重要讯息等级:info:仅是一些基本的讯息说明而已;notice:比 info 还需要被注意到的一些信息内容;warning 或 warn:警示讯息,可能有问题,但是还不至于影响到某个 daemon 运作。err 或 error :一些重大的错误讯息,这就要去找原因了。crit:比 error 还要严重的错误信息,crit 是临界点 (critical) 的缩写,已经很严重了!alert:警告警告,已经很有问题的等级,比 crit 还要严重!emerg 或 panic:疼痛等级,意指系统已经几乎要当机的状态! 很严重的错误信息了。 除了这些有等级的讯息外,还有两个特殊的
6、等级,那就是 debug(错误侦测等级) 与 none (不需登录等级) 两个,当要作一些错误侦测,或者是忽略掉某些服务的信息时,就用这俩!在讯息等级之前还有 .=! 的连结符号!他代表的意思是:. :代表比后面还要高的等级(含该等级)都被记录下来的意思, 例如:mail.info 代表只要是 mail 的信息,而且该信息等级高于 info (含info )时,就会被记录下来。.=:代表所需要的等级就是后面接的等级而已!.!:代表不等于。日志文件记录的文件名或装置或主机常见的放置处:文件的绝对路径:通常就是放在 /var/log 里头的文件!打印机或其它:例如 /dev/lp0 这个打印机装置
7、 (即使被黑客可以删除掉日志文件,但是最终删除不了打印出来的日志信息)使用者名称:显示给使用者!远程主机:例如 test.adsldns.org,要对方主机也能支持才行!*:代表目前在线的所有人,类似 wall 这个指令的意义!看看在尚未开启网络服务的情况下来自 Fedora Core Release 4 的相关资料rootlinux # vi /etc/syslog.conf#kern.* /dev/console# 只要是 kernel 产生的讯息,全部都送到 console 去!默认是关闭的。*.info;mail.none;authpriv.none;cron.none /var/lo
8、g/messages# 在已知各服务的讯息中,不要记录到这个文件中,把已知的服务记录到单独的日志文件中去,方便日后查询,否则messages这个文件就太混乱了。这个文件非常重要,所有未知的信息都会被记录在这个文件中,所以有问题,找这个文件就八九不离十了。authpriv.* /var/log/secure# 这个就是经过一些身份确认的行为之后,需要记录身份的文件。mail.* -/var/log/maillog# 只要跟 mail 有关的(不论是 pop3 还是 sendmail )都会被纪录到这个文件!cron.* /var/log/cron#例行性命令相关的。*.emerg *# 任何时候
9、发生的警告讯息都会显示给在线的所有人!那个 就是目前在线的所有人。uucp,news.crit /var/log/spooler# 记录新闻错误高于 crit 的等级的信息,写入 spooler 当中!local7.* /var/log/boot.log# 将开机的当中的讯息写入 /var/log/boot.log 中! 每个版本的 syslog.conf 差异是很大的,所以,每个登录文件记录的数据其实不很固定。 例:让所有的信息都额外写入到 /var/log/admin.log!rootlinux # vi /etc/syslog.conf*.info /var/log/admin.log
10、如果服务器硬盘容量够大,这么做也不失为一个良策。rootlinux # /etc/init.d/syslog restartrootlinux # ll /var/log/admin.log-rw- 1 root root 122 Oct 23 22:21 /var/log/admin.log 注意权限一台主机管理多台主机登录文件 # 1. 先取得 port number 的信息!rootlinux # grep 514 /etc/servicessyslog 514/udp syslog的固定端口# 注意,/etc/services 里面必须要存在这一行才行,否则自行手写!# 2. 修改 s
11、yslogd 的启动配置文件rootlinux # vi /etc/sysconfig/syslog#SYSLOGD_OPTIONS=-m 0 改成底下这样子SYSLOGD_OPTIONS=-m 0 -r# 3. 重新启动与观察 syslogd !rootlinux # /etc/init.d/syslog restartrootlinux # netstat -tlunpProto Recv-Q Send-Q Local Address Foreign Address State PID/Program nameudp 0 0 0.0.0.0:514 0.0.0.0:* 24314/sysl
12、ogd Linux 主机已经可以接收来自其它主机的登录信息了!client 端的设定就简单了!只要指定某个信息传送到这部主机即可!比如,登录文件主机 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机,可以在 /etc/syslog.conf 里面新增这样的一行:rootlinux # vi /etc/syslog.conf*.* 192.168.1.100 未来主机上面的登录文件当中,每一行的主机名称就会显示来自不同主机的信息了。登录文件服务程序之二,轮滚(logrotate):对于Linux 的系统安全来说,日志文件是极其重要的工具。系统管理员可以使用lo
13、grotate 程序用来管理系统中的最新的事件。对于Linux 的系统安全来说,日志文件是极其重要的工具。系统管理员可以使用logrotate 程序用来管理系统中的最新的事件。logrotate 还可以用来备份日志文件,本篇将通过以下几部分来介绍日志文件的管理:1、logrotate 配置2、缺省配置 logrotate3、使用include 选项读取其他配置文件4、使用include 选项覆盖缺省配置5、为指定的文件配置转储参数一、logrotate 配置logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大
14、小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:参数功能compress通过gzip 压缩转储以后的日志nocompress不需要压缩时,用这个参数copytruncate用于还在打开中的日志文件,把当前日志备份并截断nocopytruncate备份日志文件但是不截断create mode owner group 转储文件,使用指定的文件模式创建新的日志文件nocreate不建立新的日志文件delayc
15、ompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。errors address专储时的错误信息发送到指定的Email 地址ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。notifempty如果是空文件的话,不转储mail address把转储的日志文件发送到指定的E-mail 地址nomail转储时不发送日志文件olddir directory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统noolddir转储后的日志文件和当前
16、日志文件放在同一个目录下prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行daily指定转储周期为每天weekly指定转储周期为每周monthly指定转储周期为每月rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份tabootext + list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 size size 当日志文件到达指
17、定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).二、缺省配置 logrotatelogrotate 缺省的配置/etc/logrotate.conf。Red Hat Linux 缺省安装的文件内容是: # see “man logrotate” for details# rotate log files weeklyweekly# keep 4 weeks worth of backlogsrotate 4# send errors to rooterrors root# create new (empty) log files af
18、ter rotating old onescreate# uncomment this if you want your log files compressed#compress1# RPM packages drop log rotation information into this directoryinclude /etc/logrotate.d# no packages own lastlog or wtmp ?we&aposll rotate them here/var/log/wtmp monthlycreate 0664 root utmprotate 1/var/log/l
19、astlog monthlyrotate 1# system-specific logs may be configured here缺省的配置一般放在logrotate.conf 文件的最开始处,影响整个系统。在本例中就是前面12行。第三行weekly 指定所有的日志文件每周转储一次。第五行 rotate 4 指定转储文件的保留 4份。第七行 errors root 指定错误信息发送给root。第九行create 指定 logrotate 自动建立新的日志文件,新的日志文件具有和原来的文件一样的权限。第11行 #compress 指定不压缩转储文件,如果需要压缩,去掉注释就可以了。三、使用i
20、nclude 选项读取其他配置文件include 选项允许系统管理员把分散到几个文件的转储信息,集中到一个主要的配置文件。当 logrotate 从logrotate.conf 读到include 选项时,会从指定文件读入配置信息,就好像他们已经在/etc/logrotate.conf 中一样。第13行 include /etc/logrotate.d 告诉 logrotate 读入存放在/etc/logrotate.d目录中的日志转储参数,当系统中安装了RPM 软件包时,使用include 选项十分有用。RPM软件包的日志转储参数一般存放在/etc/logrotate.d 目录。includ
21、e 选项十分重要,一些应用把日志转储参数存放在 /etc/logrotate.d 。典型的应用有:apache, linuxconf, samba, cron 以及syslog。这样,系统管理员只要管理一个 /etc/logrotate.conf 文件就可以了。四、使用include 选项覆盖缺省配置当 /etc/logrotate.conf 读入文件时,include 指定的文件中的转储参数将覆盖缺省的参数,如下例: # linuxconf 的参数/var/log/htmlaccess.log errors jimnotifemptynocompressweeklyprerotate/usr
22、/bin/chattr -a /var/log/htmlaccess.logendscriptpostrotate/usr/bin/chattr +a /var/log/htmlaccess.logendscript/var/log/netconf.log nocompressmonthly在这个例子中,当 /etc/logrotate.d/linuxconf 文件被读入时,下面的参数将覆盖/etc/logrotate.conf中缺省的参数。Notifemptyerrors jim五、为指定的文件配置转储参数经常需要为指定文件配置参数,一个常见的例子就是每月转储/var/log/wtmp。为特
23、定文件而使用的参数格式是:# 注释/full/path/to/fileoption(s)下面的例子就是每月转储 /var/log/wtmp 一次:#Use logrotate to rotate wtmp/var/log/wtmpmonthlyrotate 1六、其他需要注意的问题1、尽管花括号的开头可以和其他文本放在同一行上,但是结尾的花括号必须单独成行。2、使用 prerotate 和 postrotate 选项下面的例子是典型的脚本 /etc/logrotate.d/syslog,这个脚本只是对/var/log/messages 有效。 /var/log/messagesprerotat
24、e/usr/bin/chattr -a /var/log/messagesendscriptpostrotate/usr/bin/kill -HUP syslogd/usr/bin/chattr +a /var/log/messagesendscript第一行指定脚本对 /var/log messages 有效花哦阅诓康慕疟驹诵杏? /var/log/messagesprerotate 命令指定转储以前的动作/usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”属性 endscript 结束 prerotate 部分的脚本postrotate 指定转储后的
25、动作/usr/bin/killall -HUP syslogd用来重新初始化系统日志守护程序 syslogd/usr/bin/chattr +a /var/log/messages重新为 /var/log/messages 文件指定“只追加”属性,这样防治程序员或用户覆盖此文件。最后的 endscript 用于结束 postrotate 部分的脚本3、logrotate 的运行分为三步:判断系统的日志文件,建立转储计划以及参数,通过cron daemon 运行下面的代码是 Red Hat Linux 缺省的crontab 来每天运行logrotate。 #/etc/cron.daily/log
26、rotate#! /bin/sh/usr/sbin/logrotate /etc/logrotate.conf4、/var/log/messages 不能产生的原因:这种情况很少见,但是如果你把/etc/services 中的 514/UDP 端口关掉的话,这个文件就不能产生了。小结:本文通过对Red Hat 系统上典型的logrotate 配置例子的介绍,详细说明了logrotate程序的应用方法。希望对所有Linux系统管理员有所帮助。Logrotate补充: 所谓的 logrotate ,就是将旧的 log 文件更名,然后建立一个空的 log 文件,如此一来,新的 log 文件将从零开始
27、记录,然后只要将旧的 log 文件留下一段时间! 旧的纪录 保存了一段时间没有问题,那么就可以让系统自动的将他删掉,否则占用硬盘空间。如图比如规定了message日志文件轮滚3次:最初的日志文件 message轮滚一次后 message message1 轮滚二次后 message message1 message2轮滚三次后 message message1 message2 message3 删除(如果再次轮滚,message3就会被删除,而message2就会变成message3,且系统会新建立一个message)注意,相同颜色的mssage表示的是一个内容的文件,只不过每次轮滚他的名字
28、后面会改一次数字。logrotate 的配置文件/etc/logrotate.conf/etc/logrotate.d/注意! logrotate.conf 才是主要的参数文件,logrotate.d 是一个目录, 该目录里面的所有文件都会被主动的读入/etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的文件中,如果没有规定到的一些细部设定,则以/etc/logrotate.conf 的规定来指定为默认值!rootlinux # vi /etc/logrotate.conf# 底下是 logrotate 的预设值,如果个别的文件设定了其它的参数
29、,那么将以个别的文件设定为主,若该文件没有设定到的参数,则以这个档案的内容为默认值!Weekly 预设每个礼拜对登录文件进行一次 rotate 的工作rotate 4 保留四个登录文件!create 是否建立新的登录文件来记录!#compress rotate 之后的登录文件,是否压缩,通常是不要压缩啦,压缩登录文件扩展名会变成 messages.1.gz !系统负载不大,且日志比较大,可以考虑压缩。include /etc/logrotate.d 将底下这个目录中的所有文件都读进来执行 rotate 的工作!/var/log/wtmp monthly create 0664 root utm
30、p rotate 1。省略。# 在 logrotate.conf 文件当中,只有这个数据是在记载如何对登录文件进行轮替的!这个登录文件记载的就是使用 login 登入系统时的使用者状态,last就是读自 /var/log/wtmp 当中记录的数据!整个段落的意义是:# 1. 每个月进行一次 log rotate 的工作; # 2. 将文件的权限设定为 664 ,且拥有者为 root ,群组为 utmp; # 3. 仅保存前一个月的 rotate 备份!可以修改大一点rootlinux # 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.pid 2 /dev/null 2 /dev/null | true endscript 设定的项目与前面提到的相同,并且可加入轮替前 (pre) 与后 (post) 的一
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1