分类: LINUX
2015-08-08 14:03:13
日志文件可以帮助我们了解很多系统的重要事件,包括登录者的部分信息,因此登录文件的权限通常是设定为仅有root能够读取而已。
参考了鸟哥私房菜,参考了
/var/log/cron:你的例行性工作排程,也就是你的crontab排程有没有实际被进行?进行过程有没有发生错误,你的/etc/crontab是否撰写正确,可以在这个日志内查询看看。
/var/log/dmesg:记录系统在开机的时候核心侦测过程所产生的各项信息。由于系统默认将开机时核心的硬件侦测过程取消显示,因此额外将数据记录一份在这个档案中;
/var/log/lastlog:可以记录系统上面所有的账号最近一次登入系统时的相关信息。lastlog指令就是利用这个档案的记录信息来显示。
/var/log/maillog或/var/log/mail/*:记录邮件的网络信息,其实主要记录sendmail(SMTP协议提供者)与dovecot(POP3协议提供者)所产生的信息啦。SMTP是发信所使用的通信协议,POP3则是收信使用的通信协议。sendmail与dovecot则分别是两套达成通信协议的软件。
/var/log/messages:这个日志相当的重要,几乎系统发生的错误信息或者是重要的信息都会记录在这个档案中;如果系统发生莫名的错误,这个档案是一定要查阅的登陆档之一。
/var/log/secure:基本上只要涉及到需要输入账号密码的软件,那么当登入时,不管登入正确或错误,都会被记录在此档案中。包括系统的loggin程序、图形接口登入所使用的gdm程序、su、sudo等程序、还有网络联机的ssh、telnet等程序,登入信息都会被记载在这里;
/var/log/wtmp,/var/logfaillog:这两个日志文件记录正确登入系统者的账户信息(wtmp)与错误登入时所使用的账号信息(faillog)!last就是读取wtmp来显示的。这对于追踪一般账号者的使用行为很有帮助!
/var/log/httd/*,/var/log/news/*,/var/log/samba/*:不同的网络服务会使用它们自己的日志文件来记载它们自己产生的各项讯息!上述的某内则是个别服务所制订的日志文件。
日志文件是怎么产生的呢?基本上有两种方式,一种是由软件开发商自行定义写入的日志文件与相关格式,例如www软件apache就是这样处理的。另一种是由linux发布版本提供的日志管理服务来统一管理。你只要将日志丢给这个服务后,他就会自己分门别类的将各种讯息放置到相关的日志文件中区,redhat提供rsyslogd这个服务来统一管理日志文件。
总结一下,针对日志文件所需的功能,我们需要的服务于程序有:
rsyslogd:主要登录系统与网络等服务的信息;
klogd:主要登录内核产生的各项信息;
logrotate:主要进行日志文件的轮替功能;
rsyslogd:记录日志文件的服务
日志文件内容的一般格式
事件发生的日期与时间;
发生此事件的主机名;
启动此事件的服务名称或函数名称
该信息的时间数据内容。
基本上rsyslog针对各种服务于信息记录在某些文件的配置文件就是/etc/rsyslog.conf,这个文件规定了什么服务的什么等级信息以及需要被记录在哪里(设备或文件)这三个东西,所以设置的语法是这样:
服务名称[.=!]服务等级 信息记录的文件名或设备或主机
下面以mail这个服务产生的info等级为例:
mail.info /var/log/maillog_info
上面的语句表示,mail服务产生的大于等于info等级的信息,都记录到/var/log/maillog_info文件中。
我们将上面的数据简单的分为三部分来说明:
服务名称
syslog本身有设置一些服务,其他程序也可能设置一些,rsyslog设置的服务主要有下面这些,可以使用man 3 syslog查询到相关的信息。
服务类型 |
说明 |
auth |
pam产生的日志,认证日志 |
authpriv |
ssh,ftp等登录信息的验证信息 |
cron |
就是例行工作调度cron/at等生成信息日志的地方 |
daemon |
与各个daemon有关的信息 |
kern |
内核kernel产生信息的地方 |
lpr |
打印相关的信息 |
|
只要与邮件收发有关的信息记录都属于这个 |
mark(syslog) |
就是syslogd这个程序本身生成的信息 |
news |
与新闻组服务器有关的东西 |
user |
用户程序产生的相关信息 |
uucp |
unix to unix copy,unix主机之间相关的通讯 |
local 1~7 |
自定义的日志设备 |
上面谈到的都是syslog自行制定的服务名称,软件开发商可以通过调用上述的服务名称来记录他们的软件。
信息等级
等级 |
等级名称 |
说明 |
1 |
info |
一般信息的日志,最常用 |
2 |
notice |
除了info外还需要注意的一些信息内容 |
3 |
warning(warn) |
警示的信息,可能有问题,但是还不至于影响到某个daemon运行的信息;基本上info、notice、warn这三个信息都是在告知一些基本信息而已,应该还不至于造成一些系统运行困扰 |
4 |
err(error) |
一些重大的错误信息,例如配置文件的某些设置造成该服务无法启动的信息说明,通常通过error的错误告知,应该可以了解到该服务无法启动的问题 |
5 |
crit |
比error还要严重的错误信息,这个crit是临界点critcal的缩写,这个错误已经很严重了。 |
6 |
alert |
警告,已经很有问题的等级,比crit还要严重 |
7 |
emerg(panic) |
emergency/panic,急诊应急、疼痛、意指系统已经几乎要死机的状态!很严重的错误信息了。通常大概只有硬件出问题导致整个内核无法顺利运行,就会出现这样的等级的信息。 |
除了这些等级的信息外,还有两个特殊的等级,debug错误检测等级与none不需登录等级两个,当我们想要一些错误检测或者是忽略掉某些服务的信息时,就用这两个。
服务名称和信息登记之间的符号[.=!]说明
"."代表比后面还要高的等级含该等级,都被记录下来的意思,例如mail.info表示只要是mail的信息,而且该信息等级高于info含info本身时,就会被记录下来的意思
".="代表所需要的等级就是后面接的等级而已,其他不要
".!"代表不等于,即是除了该等级外的其他等级都记录。
一般说最常用的就是"."这个链接符号。
信息记录的文件名或设备或主机
通常我们使用的都是本地的记录文件,但也可以输出到设备如打印机之类,也可以记录到不同的主机上头去,下面就是一些常用的放置位置:
文件的绝对路径:通常就是放在/var/log里面的文件
打印机或其他设备:例如/dev/lp0这个打印机设备。
用户名称:显示给用户
远程主机:日志存储在指定的rsyslog服务器中,如@172.16.22.1
*:代表目前在线的所有人,类似wall这个命令的意义。
基本上整个syslog配置文件语法就是这些。
/etc/rsyslog.conf配置文件说明
[root@localhost ~]# more /etc/rsyslog.conf # rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)加载支持本地系统的日志模块 $ModLoad imklog # provides kernel logging support (previously done by rklogd)加载支持内核日志的模块 #$ModLoad immark # provides --MARK-- message capability支持日志标记
# Provides UDP syslog reception #$ModLoad imudp #支持udp协议 #$UDPServerRun 514 #允许514端口接收使用udp协议转发过来的日志
# Provides TCP syslog reception #$ModLoad imtcp #支持tcp协议 #$InputTCPServerRun 514 #允许514端口接收使用tcp协议转发过来的日志
#### GLOBAL DIRECTIVES ####
# Use default timestamp format 使用默认的时间戳格式 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,一般日志是以异步的方式存储日志 # not useful and an extreme performance hit #$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/ 载入rsyslog.d目录中所有以conf结尾的文件 $IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console. # Logging much else clutters up the screen. #只要是内核产生的信息,全部都送到console(终端机)去。console通常是由外部设备连接到系统而来,就是有的时候如果主机没有键盘,显示器,可以通过其他终端如笔记本连接服务器的RS232串口,并通过console配置服务,同时也需要通过这个终端机console接口了解内核产生的信息。 #kern.* /dev/console
# Log anything (except mail) of level info or higher. # Don't log private authentication messages! #由于mail,authpriv,cron等类型生成的信息较多,且已经写入下面的数个文件中,因此在/var/log/messages中就不记录这些选项,因此之外的其他信息都写入/var/log/messages中,这也是为什么我们说这个messages文件很重要的缘故!这个/etc/rsyslog.conf文件内容在我新安装apache或bind后并没有改变,一般只是会在/etc/logrotate.d目录中增加其轮替日志的配置文件。另外他们默认也是将日志写到messages中的,只是记录的内容非常少,主要就是启动、关闭的日志记录和一些严重错误的消息。如果需要详细记录服务器的运行状况,需要对各全局配置文件的logging块中进行配置 *.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access. #认证方面的信息均写入/var/log/secure文件 authpriv.* /var/log/secure
# Log all the mail messages in one place. #邮件方面的信息则均写入/var/log/maillog文件。"-"表示由于买了所产生的信息比较多,我们希望邮件产生信息存储在速度较快的内存中buffer,等到数据够大了才一次性将所有数据填入磁盘内,这样有助于日志文件的访问性能。只不过由于信息时暂存在内存内,因此若不正常关机导致日志信息未回填到日志文件中,可能会造成部分数据的丢失。 mail.* -/var/log/maillog
# Log cron stuff #例行性工作调度均写入/var/log/cron文件 cron.* /var/log/cron
# Everybody gets emergency messages #当产生最严重的错误等级时,将该等级的信息以wall的方式广播给所有在系统登录的账号,要这么做的原因是希望在线的用户能够赶紧通知系统管理员来处理这个错误问题 *.emerg *
# Save news errors of level crit and higher in a special file. #uucp是早期unix-like系统进行数据传递的协议,后来常用在新闻组的用途中,news则是新闻组,当新闻组方面的信息有严重错误时就吸入/var/log/spooler文件中 uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log #比较开机时应该显示到屏幕的信息写入到/var/log/boot.log文件中 local7.* /var/log/boot.log
# ### begin forwarding rule ### # The statement between the begin ... end define a SINGLE forwarding # rule. They belong together, do NOT split them. If you create multiple # forwarding rules, duplicate the whole block! # Remote Logging (we use TCP for reliable delivery) # # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #$WorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRule1 # unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #$ActionQueueType LinkedList # run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*.* @@remote-host:514 # ### end of the forwarding rule ###
# A template to for higher precision timestamps + severity logging $template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
:programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl [root@localhost ~]# |
关于修改/etc/rsyslog.conf文件的例题
例题1:将我的mail相关数据写入/var/log/maillog当中,那么在/etc/syslog.conf的语法如何设计
mail.info /var/log/maillog
例题2:将新闻组资料(news)及例行性工作调度(cron)的信息都写入到一个成为/var/log/cronnews的文件中,但这两个程序的告警信息则额外地记录在/var/log/cronnews.warn中,那该如何设置我的syslog。
news.*;cron.* /var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
上面的".="就是指定等级的意思。由于指定了等级,因此,只有这个等级的信息才会被记录在这个文件里面,此外你也必须要注意,news与cron的告警信息也会写入/var/log/cronnews内。
例题3:我的messages这个文件需要记录所有的信息,但是就是不想要记录cron,mail及news的信息,有两种写法如下:
*.*;news,cron,mail.none /var/log/messages
*.*;news.none;cron.none;mail.none /var/log/messages
使用","分割时,那么等级只要接在最后一个即可,如果是以";"来分的话,那么就需要将服务于等级都写上去。
例题4:日志存储在指定的rsyslog服务器中,如果本地不再记录日志可将其他行注释掉,只保存此行。
*.* @172.16.22.1
例题5:rsyslog主机作为其他主机的日志服务器,修改/etc/rsyslog.conf文件内容,将#注释符去掉;
#$ModLoad imudp #支持udp协议
#$UDPServerRun 514 #允许514端口接收使用udp协议转发过来的日志
#$ModLoad imtcp #支持tcp协议
#$InputTCPServerRun 514 #允许514端口接收使用tcp协议转发过来的日志
例题6:承接例题4和5,在rsyslog客户端(例题4),中使用logger命令生成日志信息到日志服务器中
logger –p info "Hello Server! I am Client"
logger命令可以生成一条记录写到日志中,-p指定日志级别,双引号中为内容信息。此信息可以在日志服务器中查看,日志是否发送成功。
对于以上实例的验证都需要重启日志rsyslog守护进程,service rsyslog restart,另外使用vi对日志文件进行查看时切勿使用:wq退出vi环境,原因是rsyslog的日志文件只要"被编辑过"就无法继续记录,会导致日志无法继续记录的问题,此时的解决办法也是需要重启rsyslog守护进程。
rsyslog利用的是daemon的方式来启动的,当有需求的时候立刻就会被执行,但是logrotate却是在规定时间到了之后才来进行日志文件的轮替,所以这个logrotate程序当然就是挂在cron下面进行的了。看一下/etc/cron.daily/logrotate就是记录了每天要进行的日志文件轮替的行为。
既然logrotate主要是针对日志文件来进行轮替的操作,所以必须要记载在什么状态下才将日志文件进行轮替的设置。logrotate这个程序的参数配置文件就是:
/etc/logrotate.conf
/etc/logrotate.d
那个logrotate.conf才是主要的参数文件,至于logrotate.d是一个目录,该目录里面的所有文件都会被主动读入/etc/logrotate.conf当中来进行,另外,在/etc/logrotate.d/里面的文件中,如果没有指定一些,详细设置,则以/etc/logrotate.conf这个文件的规定来指定默认值。
多久进行一次logrotate工作,这些都记录在logrotate.conf里面,或/etc/logrotate.d/目录下的文件中。
[root@awake logrotate.d]# more syslog #下面的设置是logrotate的默认设置值,如果个别的文件(/etc/logrotate.d目录下的文件)设置了其他参数,则将个别的文件设置为主,若该文件没有设置到的参数则以这个文件的内容为默认值! [root@awake etc]# more logrotate.conf # see "man logrotate" for details # rotate log files weekly默认每个礼拜对日志文件进行一次rotate的工作 weekly
# keep 4 weeks worth of backlogs 默认保留4周的日志,也就是4次rotate rotate 4
# create new (empty) log files after rotating old ones创建新的(空的)日志文件后,旋转旧的 create
# use date as a suffix of the rotated file使用日期为旋转文件的后缀 dateext
# uncomment this if you want your log files compressed注释掉这如果你想让你的日志文件压缩 #compress
# RPM packages drop log rotation information into this directory将这个目录的所有文件都读进来进行rotate工作 include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { #仅怎对/var/log/wtmp所设置的参数 monthly #每个月一次,替代每周 create 0664 root utmp #指定新建文件的权限与所属账号/用户名 minsize 1M #文件容量一定要超过1MB后才进行rotate(略过时间参数) rotate 1 #仅保留一个,即仅有wtmp.1保留而已 } #这个wtmp可记录登录者与系统重新启动时的时间与来源主机及登录期间的时间; #由于具有minsize的参数,因此不见得每个月一定会进行一次,要看文件容量 #由于仅保留一个日志文件而已,不满意的话可以将它改成rotate 5 /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
# system-specific logs may be also be configured here. [root@awake etc]# |
/etc/logrotate.conf文件的设置语法(/etc/logrotate.d/目录下的文件语法也相似)
日志文件的绝对路径文件名…{ 个别参数设置值,如monthly,compress等 } |
下面我们再以/etc/logrotate.d/syslog这个轮替syslog服务的文件,看看该如何设置它的rotate。
[root@awake logrotate.d]# more syslog #该设置只对/var/log内的 cron,maillog,messages,secure,spooler有效 #日志文件轮替每周一次,保留4个且轮替下来的日志文件,不进行压缩(/etc/logrotate.conf的默认配置,也就是/etc/logrotate.conf是全局的配置,而/etc/logrotate.d/syslog是个体配置) /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true #轮替完成后postrotate取得syslog的PID后(cat /var/run/syslogd.pid),以kill –HUP重新启动syslogd。 endscript } |