且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

认识和分析日志文件

更新时间:2022-08-12 11:09:25

什么是日志文件

记录系统活动信息的几个文件,比如:何时 何地 来源IP 何人 什么服务名 做了什么操作,换句话说,就是记录系统什么时候由什么进程做了什么样的行为,发生了什么事件。


linux常见的日志文件名

/var/log/cron  

记录crontab的日志

/var/log/dmesg 

记录系统在开机的时候内核检测过程产生的各种信息。

/var/log/lastlog

记录系统上所有帐号最后一次登录系统的相关信息

/var/log/maillog或者/var/log/mail/*

记录邮件来往信息,其实主要记录sendmail  smtp协议提供 与 dovecot pop3提供 所产生的信息,stmp是发信使用 pop3是收件使用

/var/log/messages

这个文件记录几乎系统发生的错误信息或者重要信息都会记录在这个日志文件中,如果系统发生错误,这个系统日志史一定要查阅的文件之一。

/var/log/secure

只要涉及到需要输入帐号和密码的软件,不管登录是否正确错误,都会被记录在这个日志文件中。包括系统的login程序,图形界面所登录使用的gdm程序,su,sudo等,还有联网的ssh,telnet等。

/var/log/wtmo,/var/log/faillog

这两个文件记录正确登录系统的账户信息和错误登录时所使用的帐号信息。

/var/log/httpd/*,/var/log/news/*,/var/log/samba/*

不同的网络服务会使用他们自己的日志文件来记载他们产生的各项信息。


日志文件所需的相关服务daemon与进程

syslogd:主要登录系统与网络等服务的信息;

klogd:主要登录核心产生的各项资讯;

logrotate:主要在进行登录文件的轮替功能。


syslogd:记录日志文件的服务

首先我们要看下我们的linux服务器中syslogd有没有启动是否有没有开机启动

ps -aux | grep syslog

root      4929  0.0  0.0   1728   612 ?        Ss   19:47   0:00 syslogd -m 0

 chkconfig --list syslog

syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off


syslog的配置文件:/etc/syslog.conf

基本上, syslog 针对各种服务与信息记录在某些文件的配置档就是 /etc/syslog.conf, 这个文件规定了『(1)什么服务 (2)的什么等级信息 (3)需要被记录在哪里(装置或文件)』

我们以mail服务为例子:

服务名称[.=!]信息等级		信息记录的档名或装置或主机
# 底下以 mail 这个服务产生的 info 等级为例:
mail.info  /var/log/maillog_info# 这一行说明:mail 服务产生的大於等於 info 等级的信息,都记录到 
# /var/log/maillog_info 文件中的意思。


服务名称

syslog 本身有规范一些服务,你可以透过这些服务来储存系统的信息。syslog 认识的服务主要有底下这些: (可使用 man 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 机器本身有关的一些信息。



信息等级

同一个服务所产生的信息也是有差别的,有启动时仅通知系统而已的一般信息 (information), 有出现还不至於影响到正常运行的警告信息 (warn) ,还有系统硬件发生严重错误时,所产生的重大问题信息 (error 等等); 信息到底有多少种严重的等级呢?基本上,syslog 将信息分为七个主要的等级,依序是这样的(由不重要排列到重要信息等级):

等级 等级名称 说明
1 info 仅是一些基本的信息说明而已;
2 notice 比 info 还需要被注意到的一些资讯内容;
3 warning
(warn)
警示的信息,可能有问题,但是还不至於影响到某个 daemon 运行的资讯;基本上, info, notice, warn 这三个信息都是在告知一些基本资讯而已,应该还不至於造成一些系统运行困扰;
4 err 
(error)
一些重大的错误信息,例如配置档的某些配置值造成该服务服法启动的资讯说明, 通常藉由 err 的错误告知,应该可以了解到该服务无法启动的问题呢!
5 crit 比 error 还要严重的错误资讯,这个 crit 是临界点 (critical) 的缩写,这个错误已经很严重了喔!
6 alert 警告警告,已经很有问题的等级,比 crit 还要严重!
7 emerg 
(panic)
疼痛等级,意指系统已经几乎要死机的状态! 很严重的错误资讯了。通常大概只有硬件出问题,导致整个核心无法顺利运行,就会出现这样的等级的信息吧!


特别留意一下在信息等级之前还有 [.=!] 的连结符号喔!他代表的意思是这样的:

  • :代表『比后面还要高的等级 (含该等级) 都被记录下来』的意思,例如: mail.info 代表只要是 mail 的资讯,而且该资讯等级高於 info (含 info 本身)时,就会被记录下来的意思。

  • .=:代表所需要的等级就是后面接的等级而已, 其他的不要!

  • .!:代表不等於, 亦即是除了该等级外的其他等级都记录。

一般来说,我们比较常使用的是『.』这个连结符号


信息记录的档名或装置或主机

再来则是这个信息要放置在哪里的纪录了。通常我们使用的都是记录的文件啦!但是也可以输出到装置呦! 例如打印机之类的!也可以记录到不同的主机上头去呢!底下就是一些常见的放置处:

  • 文件的绝对路径:通常就是放在 /var/log 里头的文件啦!

  • 打印机或其他:例如 /dev/lp0 这个打印机装置

  • 使用者名称:显示给使用者罗!

  • 远程主机:例如 @www.vbird.tsai 当然啦,要对方主机也能支持才行!

  • *:代表『目前在线上的所有人』,类似 wall 这个命令的意义!


  • syslog.conf 语法例子

  • 例题:

    如果我要将我的 mail 相关的数据给他写入 /var/log/maillog 当中,那么在 /etc/syslog.conf 的语法如何设计?

    答:

    基本的写法是这样的:

    mail.info   /var/log/maillog

    注意到上面喔,当我们的等级使用 info 时,那么『任何大於 info 等级(含 info 这个等级)之上的信息,都会被写入到后面接的文件之中!』这样可以了解吗?也就是说,我们可以将所有 mail 的登录资讯都纪录在 /var/log/maillog 里面的意思啦!

  • 例题:

    我要将新闻群组数据 (news) 及例行性工作排程 (cron) 的信息都写入到一个称为 /var/log/cronnews 的文件中,但是这两个程序的警告信息则额外的记录在 /var/log/cronnews.warn 中,那该如何配置我的 syslog.conf 呢?

    答:

    很简单啦!既然是两个程序,那么只好以分号来隔开了,此外,由於第二个指定文件中,我只要记录警告信息,因此配置上需要指定『.=』这个符号,所以语法成为了:

    news.*;cron.*     /var/log/cronnews
    news.=warn;cron.=warn /var/log/cronnews.warn

    上面那个『.=』就是在指定等级的意思啦!由於指定了等级,因此,只有这个等级的信息才会被纪录在这个文件里面呢!此外你也必须要注意,news 与 cron 的警告信息也会写入 /var/log/cronnews 内喔!

  • 例题:

    我的 messages 这个文件需要记录所有的资讯,但是就是不想要记录 cron, mail 及 news 的资讯,那么应该怎么写才好?

    答:

    可以有两种写法,分别是:

    *.*;news,cron,mail.none      /var/log/messages
    *.*;news.none;cron.none;mail.none /var/log/messages

    使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话,那么就需要将服务与等级都写上去罗!这样会配置了吧!  


自行添加登录文件文件功能

. 先配置好所要创建的文件配置
![root@www ~]# vim /etc/syslog.conf
# Add by VBird 2009/04/08       <==再次强调,自己修改的时候加入一些说明
*.info      /var/log/admin.log  <==有用的是这行啦!

重新启动 syslog 呢!
[root@www ~]# /etc/init.d/syslog restart
[root@www ~]# ll /var/log/admin.log-rw------- 1 root root 118 Apr  8 13:50 /var/log/admin.log# 瞧吧!创建了这个登录文件出现罗!


日志的安全性设置

chattr +a /var/log/messages增加
lsattr /var/log/messages
-----a------- /var/log/messages
chattr -a /var/log/messages 来取消掉
尽量对于新入门来说 不要去修改这些默认的值

登录文件服务器的配置

你可以透过 man syslogd 去查询一下相关的选项就能够知道啦! 既然是登录文件服务器,那么我们的 Linux 主机当然会启动一个端口来监听了,那个默认的端口就是 UDP 的 514 喔!

# 1. Server 端:
修改 syslogd 的启动配置档,通常在 /etc/sysconfig 内!
[root@www ~]# vim /etc/sysconfig/syslog
# 找到底下这一行:SYSLOGD_OPTIONS="-m 0"
# 改成底下这样子!SYSLOGD_OPTIONS="-m 0 -r"
# 2. 重新启动与观察 syslogd 喔!
[root@www ~]# /etc/init.d/syslog restart
[root@www ~]# netstat -lunp | grep syslog
Proto Recv-Q Send-Q Local Address  Foreign Address State   PID/Program name
udp        0      0 0.0.0.0:514    0.0.0.0:*               13981/syslogd

client 端的配置就简单多了!只要指定某个资讯传送到这部主机即可! 举例来说,我们的登录文件服务器 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以,可以在 /etc/syslog.conf 里面新增这样的一行:
[root@www ~]# vim /etc/syslog.conf
*.*       @192.168.1.100
    
再重新启动 syslog 后,立刻就搞定了!而未来主机上面的登录文件当中,每一行的『主机名称』就会显示来自不同主机的资讯了。 很简单吧! 


日志文件的轮替 logrotate

logrotate的配置文件
『syslog 利用的是 daemon 的方式来启动的, 当有需求的时候立刻就会被运行的,但是logrotate 却是在规定的时间到了之后才来进行登录文件的轮替, 所以这个 logrotate 程序当然就是挂在 cron 底下进行的呦!』 仔细看一下 /etc/cron.daily/ 里面的文件, /etc/cron.daily/logrotate 就是记录了每天要进行的登录文件轮替的行为啦!
本文转自岁月丶倾城博客51CTO博客,原文链接http://blog.51cto.com/alca0126/1538878如需转载请自行联系原作者

laihuadongcto