Linux下syslog日志系统详解

1. 什么是syslog

日志的主要用途是系统审计,监测追踪和分析统计. 为了保证Linux系统正常运行,准确解决遇到的各类各样的系统问题,认真地读取日志文件是管理员的一项很是重要的任务. Linux 内核由不少子系统组成,包括网络,文件访问,内存管理等.子系 统须要给用户传送一些消息,这些消息内容包括消息的来源及其重要性等 .全部的子系统都要把消息送到一个能够维护的公用消息区,因而,就有了syslog. syslog是一个综合的日志记录系统.它的主要功能是:方便日志管理和分类存放日志. syslog使程序设计者从繁重的,机械的编写日志文件代码 的工做中解脱出来,使管理员更好地控制日志的记录过程.在syslog出现以前,每一个程序都使用本身的日志记录策略.管理员对保存什么信息或是信息存放在 哪里没有控制权.

2. syslogd的配置文件

syslogd的配置文件/etc/syslog.conf规定了系统中须要监视的事件和相应的日志的保存位置
cat /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages #除了mail/news/authpriv/cron之外,将info或更高级别的消息送到/var/log/messages,其中*是通配符,表明 任何设备;none表示不对任何级别的信息进行记录
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure  #将authpirv设备的任何级别的信息记录到/var/log/secure文件中,这主要是一些和认证,权限使用相关的信息.
# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog  #将mail设备中的任何级别的信息记录到/var/log/maillog文件中, 这主要是和电子邮件相关的信息.
# Log cron stuff
cron.*                                                  /var/log/cron  #将cron设备中的任何级别的信息记录到/var/log/cron文件中, 这主要是和系统中按期执行的任务相关的信息.
# Everybody gets emergency messages
*.emerg                                                 *   #将任何设备的emerg级别或更高级别的消息发送给全部正在系统上的用户.
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler  #将uucp和news设备的crit级别或更高级别的消息记录到/var/log/spooler文件中.
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log   #将和本地系统启动相关的信息记录到/var/log/boot.log文件中.

3. syslogd语法

该配置文件的每一行的格式以下:
facility.priority action 设备.级别 动做

4. Syslogd设备字段

设备字段用来指定须要监视的事件.它可取的值以下:
authpriv cron daemon kern lpr syslog user uucp mail news
报告认证活动一般,口令等私有信息不会被记录 报告与cron和at有关的信息 报告与xinetd有关的信息 报告与内核有关的信息 报告与打印服务有关的信息 由syslog生成的信息 报告由用户程序生成的任何信息由UUCP生成的信息 报告与邮件服务有关的信息 报告与网络新闻服务有关的信息

5. syslogd级别字段

级别字段用于指明与每一种功能有关的级别和优先级:
alert crit err warning notice info debug none * emerg
须要当即引发注意的状况 危险状况的警告 除了emerg,alert,crit的其余错误 警告信息须要引发注意的状况 值得报告的消息 由运行于debug模式的程序所产生的消息 用于禁止任何消息 全部级别,除了none 出现紧急状况使得该系统不可用

6. syslogd动做字段

动做字段用于描述对应功能的动做
file username device @hostname
指定一个绝对路径的日志文件名记录日志信息 发送信息到指定用户,*表示全部用户 将信息发送到指定的设备中,如/dev/console将信息发送到可解析的远程主机hostname,且该主机必须正在运行syslogd并能够识别syslog的配置文件

7. 查看日志文件

常见的日志文件日志文件一般存放在/var/log目录下.在该目录下除了包括syslogd 记录的日志以外,同时还包含全部应用程序的日志. 为了查看日志文件的内容必需要有root权限.日志文件中的信息很重要,只能让超级用户有访问这些文件的权限.

8. log

cups/ httpd/ mail/ news/ boot.log dmesg maillog messages secure wtmp
存储CUPS打印系统的日志目录 记录apache的访问日志和错误日志目录 存储mail日志目录 存储INN新闻系统的日志目录 记录系统启动日志记录系统启动时的消息日志 记录邮件系统的日志 由syslogd记录的info或更高级别的消息日志 由syslogd记录的认证日志 一个用户每次登陆进入和退出时间的永久记录

9. 查看文本日志文件

绝大多很多天志文件是纯文本文件,每一行就是一个消息.只要是在Linux下可以处理纯文本的工具都能用来查看日志文件.可使用 cat,tac, more,less,tail和grep进行查看文件中每一行表示一个消息,并且都由四个域的固定格式组成: 时间标签(Timestamp):表示消息发出的日期和时间. 主机名(Hostname):表示生成消息的计算机的名字. 生成消息的子系统的名字:能够是"Kernel",表示消息来自内核或者 是进程的名字,表示发出消息的程序的名字. 在方括号里的是进程的PID. 消息(Message),即消息的内容.
syslog发出的消息,说明了守护进程已经在 Dec 16,03:32:41 从新启动了. Dec 16 03:32:41 cnetos5 syslogd 1.4.1: restart. # 在 Dec 19,00:20:56 启动了内核日志 klogd Dec 19 00:20:56 cnetos5 kernel: klogd 1.4.1, log source = /proc/kmsg started. # 在 Dec 19,00:21:01 启动了xinetd Dec 19 00:21:01 cnetos5 xinetd[2418]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.

10. 查看非文本日志文件Lastlog

也有一些日志文件是二进制文件,须要使用相应的命令进行读取.
使用lastlog命令来检查某特定用户上次登陆的时间,并格式化输出上次登陆日志 /var/log/lastlog 的内容
rpc **从未登陆过** rpcuser **从未登陆过** sshd **从未登陆过** pcap **从未登陆过** haldaemon **从未登陆过** xfs **从未登陆过** gdm **从未登陆过** boobooke **从未登陆过** baobao pts/1 192.168.1.2 三 11月 26 12:44:32 +0800 2008 abc **从未登陆过** test pts/1 192.168.1.5 四 11月 27 17:30:53 +0800 2008 test01 **从未登陆过**
last命令往回搜索/var/log/wtmp来显示自从文件第一次建立以来登陆过用户
root     pts/1        116.226.69.195   Fri Aug 31 15:48 - 18:37  (02:49)

11. 查看非文本日志文件lastb

lastb命令搜索/var/log/btmp来显示登陆未成功的信息.
root     ssh:notty    222.143.27.97    Thu Sep  6 19:43 - 19:43  (00:00)

12. 查看非文本日志文件who

who命令查询wtmp文件并报告当前登陆的每一个用户.who命令的缺省输出包括用户名,终端类型,登陆日期及远程主机.
[root @server ~]# who
root     pts/0        2012-09-08 10:18 (116.226.69.195)
[root @server ~]# w
 10:41:31 up 212 days, 20:19,  1 user,  load average: 0.21, 0.16, 0.14
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    116.226.69.195   10:18    0.00s  0.09s  0.00s w

13.日志滚动

为何使用日志滚动全部的日志文件都会随着时间的推移和访问次数的增长而迅速增加,所以必须对日志文件进行按期清理以避免形成磁盘空间的没必要要的浪费.同时也 加快了管理员查看日志所用的时间,由于打开小文件的速度比打开大文件的速度要快.
Logrotate 其命令格式为: logrotate [选项] <configfile>
-d:详细显示指令执行过程,便于排错或了解程序执行的状况.
-f:强行启动记录文件维护操做,即便logrotate指令认为无须要亦然 -m command:指定发送邮件的程序,默认为 /usr/bin/mail. -s statefile:使用指定的状态文件. -v:在执行日志滚动时显示详细信息.

14. 日志滚动

logrotate 默认的主配置文件是 /etc/logrotate.conf /etc/logrotate.d 的目录下的文件,这些文件被 include 到主配置文件 /etc/logrotate.conf 中
# see "man logrotate" for details # 每周清理一第二天志文件
weekly    #保存过去四周的日志文件
rotate 4  #清除旧日志文件的同时,建立新的空日志文件
create    #若使用压缩的日志文件,请删除下面行的注释符
#compress #包含/etc/logrotate.d目录下的全部配置文件
include /etc/logrotate.d #设置/var/log/wtmp的日志滚动
/var/log/wtmp {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}

可使用ls命令显示/etc/logrotate.d目录:
[root @server ~]# ls /etc/logrotate.d
mgetty  psacct  rpm  setroubleshoot  snmpd  syslog  yum

每一个文件的基本格式均相同
[root @server ~]# cat /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {  #对日志文件
    sharedscripts  #调用日志滚动通用函数sharedscripts
    postrotate     #在日志滚动以后执行语句括号postrotate和endscript之间的命令postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true  #从新启动syslogd
    endscript
}

logrotate是由crond运行的,在默认配置中,能够发如今/etc/cron.daily目录中有一个名为logrotate的文件
[root @server ~]# cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
转载请注明: http://www.linuxeye.com/linuxrumen/781.html
相关文章
相关标签/搜索