Linux 日志基础

来源:互联网 发布:车比雪夫不等式知乎 编辑:程序博客网 时间:2024/05/20 01:35

来源: ChinaUnix博客  作者: ChinaUnix博客

 

Linux 日志都以明文形式存储,所以你不必特别的工具就能搜索和阅读他们。
Linux 日志存储在 /var/log 目录中。这里有几个由系统维护的日志文件,但其他服务和程式也可能会把他们的日志放在这里。
大多数日志只有 root 才能读,不过只需要修改文件的访问权限就能让其他人可读。
/var/log/messages
messages 日志是核心系统日志文件。他包含了系统启动时的引导消息,及系统运行时的其他状态消息。IO错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份转换为 root,也在这里列出。如果服务正在运行,比如 DHCP服务器,你能在 messages 文件中观察他的活动。
通常,/var/log/messages 是你在做故障诊断时首先要查看的文件。
/var/log/Xorg.0.log
这个日志记录的是 Xfree86 Xwindows 服务器最后一次执行的结果。如果你在启动到图像模式时遇见了问题,一般情况从这个文件中会找到失败的原因。
其他日志
根据你的 Linux 发行版本及你所运行的服务和应用程式的不同,/var/log 目录下还会有其他日志文件。例如,可能会有和邮件服务器、资源共享、自动任务等相关的日志。
轮循  logrotate
你将看到,/var/log 目录下有一些文件以一个数字结尾,这些是已轮循的归档文件。日志文件会变得特别大。Linux提供了一个命令来轮循这些日志,以使你的当前日志信息不会淹没在旧的无关信息之中。 logrotate通常是定时自动运行的,不过也能手工运行。当执行后,logrotate将取得当前版本的日志文件,然后在这个文件名最后附加一个“.1”。其他更早轮循的文件为“.2”、“.3”,依次类推。文件名后的数字越大,日志就越老。
你能通过编辑 /etc/logrotate.conf 文件来设置 logrotate 的自动行为。
日志工具
所有文本工具都能用来处理日志文件。下面是一些特别有用的工具。dmesg  | more  
使用 dmesg 命令能快速查看最后一次系统引导的引导日志。通常他的内容会非常多,所以你往往会希望将其通过管道传输到一个阅读器。以分页的方式显示引导信息。
tail Tail 命令设计用于显示文本文件的最后几行。使用 -f 开关,当日志增加新的内容时, tail 将继续显示新的输出。
tail -f /var/log/messages /dev/tty
上面的命令将显示 /var/log/messages 文件的最后 10 行,然后继续监视那个文件,并输出新的行为。要停止 tail -f 命令,使用 Ctrl + C 来中止进程。
more  More 的工作方式和 DOS 版本相同。你能将他指向一个文件,或通过他以管道输出信息,以分页的方式来查看信息。
more /var/log/Xorg.0.log ; 使用“q”或 [Ctrl]-C 来停止查看文件。
less  Less 是另一个文本阅读器,不过他还允许在文件中滚动浏览及检索信息。 less /var/log/messages ;
上面的命令将显示 /var/log/messages 文件的内容。使用“q”来停止查看文件。使用“h”来获得 less 的使用帮助。
logger  logger 命令使你能将自己的消息发送到日志工具。在脚本中使用他来提供关于执行和错误的消息。
制定的日志
有两个服务,或称之为后台程式,在控制日志,分别是 klogd 和 syslogd
klogd 只处理内核消息, syslogd 处理其他系统消息,比如应用程式。你能通过编辑 /et/syslog.conf 和 /etc/sysconfig/syslog 来设置他们的行为。
本质上,软件所产生的每一条消息都提供一些信息用于确定消息是从哪里来的及这个消息是什么。/etc/syslog.conf 文件允许你来指定怎么处理那种类型的消息。你能将他转储到消息文件,也能将他转储到一个制定的文件。你能将他发送到远程的主机,由远程主机来根据其自己的 syslogd 设置来处理他。远程日志是个非常好的安全功能。通过将你的日志放置到远程系统中,你能防止有人通过改动日志文件来掩饰其踪迹。
下面是取自 man /etc/syslog.conf 页面中的一个制定日志的例子:
              # Kernel messages are first, stored in the kernel
              # file, critical messages and higher ones also go
              # to another host and to the console
              #
              kern.*                       /var/adm/kernel
              kern.crit                    @finlandia
              kern.crit                    /dev/console
              kern.info;kern.!err          /var/adm/kernel-info

第一个规则将所有内核消息定向到 /var/adm/kernel 文件。
第二个语句将所有优先级为 crit 或更高的内核消息定向到一个名为 finlandia 的远程主机。这是有用的,因为如果主机崩溃及磁盘错误无法恢复,你将无法读取存储的消息。如果那些消息同时在远程主机上也存在,你就依然能找出崩溃的原因。
第三个规则将这些消息定向到实际的控制台,这样,在这台机器上工作的人也能看到他们。
第四行告诉 syslogd 将所有优先级为 info 到 warning 的内核消息保存到 /var/adm/kernel-info 文件。所有优先级为 err 及更高的消息不包括在内。
像这种制定日志的能力为 Linux 环境提供了极大的灵活性和可控制性。
dmesg是从kernel 的ring buffer(环缓冲区)中读取信息的
在LINUX中,所有的系统信息(包内核信息)都会传送到ringbuffer中.而内核产生的信息由printk()打印出来。系统启动时所看到的信息都是由该函数打印到屏幕中。printk()打出的信息往往以...这的数字表明消息的重要级别。高于一定的优先级别会打印到屏幕上, 否则只会保留在系统的缓冲区中(ringbuffer)。
/var/log/..是由syslogd这个守护进程产生的
一句话解释: 是syslogd这个守护进程根据/etc/syslog.conf,将不同的服务产生的Log记录到不同的文件中.
LINUX系统启动后,由/etc/init.d/sysklogd先后启动klogd,syslogd两个守护进程。
其中klogd会通过syslog()系统调用或读取proc文件系统来从系统缓冲区(ring buffer)中得到由内核printk()
发出的信息.而syslogd是通过klogd来读取系统内核信息.
1>  所有系统信息是输出到ring buffer中去的.dmesg所显示的内容也是从ring buffer中读取的.
2>  LINUX系统中/etc/init.d/sysklogd会启动2个守护进程:Klogd&&Syslogd
3>  klogd是负责读取内核信息的,有2种方式:
            syslog()系统调用(这个函数用法比较全,大家去MAN一下看看)
            直接的对/proc/kmsg进行读取(再这提一下,/proc/kmsg是专门输出内核信息的地方)
4>   Klogd的输出结果会传送给syslogd进行处理,syslogd会根据/etc/syslog.conf的设置把log信息输出到/var/log/下的不同文件中.
常用的系统日志
/var/log/dmesg      内核启动日志                dmesg
/var/log/messages 系统报错日志                tail        杂货铺
/var/log/maillog     邮件系统日志
/var/log/xferlog     FTP服务日志
/var/log/secure     登录、网络连接、安全信息 tcp_wrapper xinetd
/var/log/wtmp      登录记录 每次login都记录,二进制格式,只能用last来读取
小结:man 5 syslog.conf
# cat /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
...........
格式:
facility          level            action           
其中facility.level也叫seletor。使用TAB来分隔facility和action;即什么服务什么级别记录到哪里?

原创粉丝点击