分类:
2012-09-08 14:18:47
原文地址:剖析Linux日志系统 作者:qingshanli1988
本章内容
理解syslog系统 熟悉syslogd的配置文件及其语法学会查看系统日志 理解日志滚动的必要性及实现方法
syslog
什么是 syslog
日志的主要用途是系统审计,监测追踪和分析统计. 为了保证 Linux 系统正常运行,准确解决遇到的各种各样的系统问题,认 真地读取日志文件是管理员的一项非常重要的任务. Linux 内核由很多子系统组成,包括网络,文件访问,内存管理等.子系 统需要给用户传送一些消息,这些消息内容包括消息的来源及其重要性等 .所有的子系统都要把消息送到一个可以维护的公用消息区,于是,就有 了 syslog. syslog 是一个综合的日志记录系统.它的主要功能是:方便日志管理和分 类存放日志. syslog 使程序设计者从繁重的,机械的编写日志文件代码 的工作中解脱出来,使管理员更好地控制日志的记录过程.在 syslog 出 现之前,每个程序都使用自己的日志记录策略.管理员对保存什么信息或是信息存放在哪里没有控制权.
3
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 # 将 info 或更高级别的消息送到 /var/log/messages, # 除了 mail/news/authpriv/cron 以外. # 其中*是通配符,代表任何设备;none 表示不对任何级别的信息进行记录. *.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages # 将 authpirv 设备的任何级别的信息记录到 /var/log/secure 文件中, # 这主要是一些和认证,权限使用相关的信息. authpriv.* /var/log/secure
4
syslogd 的配置文件
# 将 mail 设备中的任何级别的信息记录到 /var/log/maillog 文件中, # 这主要是和电子邮件相关的信息. mail.* -/var/log/maillog # 将 cron 设备中的任何级别的信息记录到 /var/log/cron 文件中, # 这主要是和系统中定期执行的任务相关的信息. cron.* /var/log/cron # 将任何设备的 emerg 级别或更高级别的消息发送给所有正在系统上的用户. *.emerg * # 将 uucp 和 news 设备的 crit 级别或更高级别的消息记录到 /var/log/spooler 文件中. uucp,news.crit /var/log/spooler # 将和本地系统启动相关的信息记录到 /var/log/boot.log 文件中. local7.* /var/log/boot.log # 将 news 设备的 crit 级别的消息记录到 /var/log/news/news.crit 文件中. news.=crit /var/log/news/news.crit # 将 news 设备的 err 级别的消息记录到 /var/log/news/news.err 文件中. news.=err /var/log/news/news.err # 将 news 设备的 notice 或更高级别的消息记录到 /var/log/news/news.notice 文件中. news.notice /var/log/news/news.notice
5
syslogd语法
该配置文件的每一行的格式如下:
facility.priority action 设备.级别 动作
6
Syslogd设备字段
设备字段用来指定需要监视的事件.它可取的值如下:
authpriv cron daemon kern lpr syslog user uucp mail news
报告认证活动通常,口令等私有信息不会被记录 报告与cron和at有关的信息 报告与xinetd有关的信息 报告与内核有关的信息. 报告与打印服务有关的信息 由syslog生成的信息 报告由用户程序生成的任何信息由UUCP生成的信息 报告与邮件服务有关的信息 报告与网络新闻服务有关的信息
7
syslogd 级别字段
级别字段用于指明与每一种功能有关的级别和优先级:
alert crit err warning notice info debug none * emerg
需要立即引起注意的情况 危险情况的警告 除了emerg,alert,crit的其他错误 警告信息需要引起注意的情况 值得报告的消息 由运行于debug模式的程序所产生的消息 用于禁止任何消息 所有级别,除了none 出现紧急情况使得该系统不可用
8
syslogd 动作字段
动作字段用于描述对应功能的动作
file username device @hostname
指定一个绝对路径的日志文件名记录日志信息 发送信息到指定用户,*表示所有用户 将信息发送到指定的设备中,如/dev/console 将信息发送到可解析的远程主机hostname,且该主 机必须正在运行syslogd并可以识别syslog的配置文 件
9
查看日志文件
常见的日志文件 日志文件通常存放在 /var/log 目录下.在该目录下除了包括 syslogd 记录的日志之外,同时还包含所有应用程序的 日志. 为了查看日志文件的内容必须要有 root 权限.日志文件中 的信息很重要,只能让超级用户有访问这些文件的权限.
10
log
cups/ httpd/ mail/ news/ boot.log dmesg maillog messages secure wtmp
存储 CUPS 打印系统的日志目录 记录 apache 的访问日志和错误日志目录存储 mail 日志的目录 存储 INN 新闻系统的日志目录 记录系统启动日志记录系统启动时的消息日志 记录邮件系统的日志 由 syslogd 记录的 info 或更高级别的消息日志 由 syslogd 记录的认证日志 一个用户每次登录进入和退出时间的永久记录
11
查看文本日志文件
绝大多数日志文件是纯文本文件,每一行就是一个消息.只要是在Linux 下能够处理纯文本的工具都能用来查看日志文件.可以使用 cat,tac, more,less,tail 和 grep 进行查看 文件中每一行表示一个消息,而且都由四个域的固定格式组成: 时间标签(Timestamp):表示消息发出的日期和时间. 主机名(Hostname):表示生成消息的计算机的名字. 生成消息的子系统的名字:可以是"Kernel",表示消息来自内核或者 是进程的名字,表示发出消息的程序的名字. 在方括号里的是进程的PID. 消息(Message),即消息的内容.
12
查看文本日志文件
# 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.
13
查看非文本日志文件
也有一些日志文件是二进制文件,需要使用相应的命令进行读取.
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 **从未登录过**
14
查看非文本日志文件
last
last 命令往回搜索 /var/log/wtmp 来显示自从文件第一次创建以来登录过 的用户
root root root root root root reboot root reboot pts/0 192.168.1.5 Sun Nov 23 21:35 - 21:38 (00:03) pts/0 192.168.1.5 Sun Nov 23 21:31 - 21:35 (00:03) pts/0 192.168.1.5 Sun Nov 23 21:27 - 21:28 (00:01) pts/0 192.168.1.5 Sun Nov 23 21:22 - 21:26 (00:04) tty1 Sun Nov 23 21:17 - down (01:08) tty1 Sun Nov 23 21:13 - 21:13 (00:00) system boot 2.6.18-53.el5 Sun Nov 23 21:05 (01:20) tty1 Sat Nov 22 21:34 - crash (23:31) system boot 2.6.18-53.el5 Sat Nov 22 21:32 (1+00:53)
15
查看非文本日志文件
lastb
lastb 命令搜索 /var/log/btmp 来显示登录未成功的信息.
baobao ssh:notty baobao ssh:notty baobao ssh:notty baobao ssh:notty baobao ssh:notty baobao ssh:notty root tty1 192.168.1.2 Wed Nov 26 12:44 192.168.1.2 Wed Nov 26 12:44 192.168.1.2 Wed Nov 26 12:43 192.168.1.2 Wed Nov 26 12:42 192.168.1.2 Wed Nov 26 12:39 192.168.1.2 Wed Nov 26 12:39 Sun Nov 23 21:17 - 21:17 - 12:44 - 12:44 - 12:43 - 12:42 - 12:39 - 12:39 (00:00) (00:00) (00:00) (00:00) (00:00) (00:00) (00:00)
16
查看非文本日志文件
Who
who 命令查询 wtmp 文件并报告当前登录的每个用户.who 命令的缺省输 出包括用户名,终端类型,登录日期及远程主机.
[root@CentOS5 ~]# who root tty1 2008-12-02 14:14 root pts/0 2008-12-02 14:29 (192.168.1.7)
[root@CentOS5 ~]# w 14:33:29 up 20 min, 2 users, load average: 0.00, 0.03, 0.09 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 14:14 4:59 0.51s 0.51s -bash root pts/0 192.168.1.7 14:29 0.00s 0.33s 0.05s w
17
日志滚动
为什么使用日志滚动 所有的日志文件都会随着时间的推移和访问次数的增加而迅速增长,因此 必须对日志文件进行定期清理以免造成磁盘空间的不必要的浪费.同时也 加快了管理员查看日志所用的时间,因为打开小文件的速度比打开大文件的速度要快.
Logrotate 其命令格式为: logrotate [选项]
-d:详细显示指令执行过程,便于排错或了解程序执行的情况.
-f:强行启动记录文件维护操作,即使 logrotate 指令认为无需要亦然 -m command:指定发送邮件的程序,默认为 /usr/bin/mail. -s statefile:使用指定的状态文件. -v:在执行日志滚动时显示详细信息.
18
日志滚动
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 create 0664 root utmp rotate 1 } # system-specific logs may be also be configured here.
19
日志滚动
可以使用 ls 命令显示 /etc/logrotate.d 目录:
[root@CentOS5 log]# ls /etc/logrotate.d acpid conman cups httpd mgetty ppp psacct rpm syslog yum
20
日志滚动
每个文件的基本格式均相同 $ cat /etc/logrotate.d/syslog
# 对日志文件 /var/log/messages,/var/log/secure,/var/log/maillog, # /var/log/spooler,/var/log/boot.log 和 /var/log/cron 进行日志滚动 /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { # 调用日志滚动通用函数 sharedscripts # 在日志滚动之后执行语句括号 postrotate 和 endscript 之间的命令 postrotate # 重新启动 syslogd /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript
21
日志滚动
logrotate 是由 crond 运行的,在默认配置中,可以发现在 /etc/cron.daily 目录中有一个名为logrotate的文件
[root@CentOS5 log]# 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
22
本视频完 谢谢观看 ~_~
23
内容来自:
更多"13-剖析日志系统"相关资料请点击