首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
Google
首页 入门 Linux编程 系统管理 网络管理 Linux认证 Unix/BSD Linux数据库 Linux集群 Linux手册 Linux下载 Ubuntu 论坛 专题 RSS
您现在的位置: 中国IT实验室 >> Linux >> 系统管理 >> 系统管理 >> 正文

系统管理员工具包: 日志文件基础知识

    日志类型和数据

    日志类型共分为两种:文本日志文件(包含简单的文本格式的消息和信息)和用二进制格式编码的文件。前者用于典型系统中的大多数日志,因为它们易于编写,而且(也许是更重要的)它们易于阅读。文本文件的不足之处是有时难以通过结构化方式提取信息,因为文件的文本格式允许使用任何方式或结构编写信息。

    后者的格式对于非常结构化的信息或需要以特定方式或格式编写的信息更为实用。例如,以二进制数据的固定块的形式将 utmp 和 wtmp 数据写入文件,这样可以用快速有效的格式读取和写入信息。遗憾的是,这意味着如果不使用特定的工具将难以读取信息。

    系统日志 (syslog)

    syslog 服务是在后台运行的守护进程,可接受日志输入并将其写入到一个或多个单独文件。报告给 syslog 的所有消息都标有日期、时间和主机名,并且可以让单个主机从许多主机接受所有日志消息,并将信息写入单个文件。

    提出问题的服务(例如,邮件、dhcp 和内核)和指示消息严重性的类也可以标识消息。可以将严重性标记为信息(纯信息)、警告、错误、重要(需要解决的严重问题)甚至紧急(系统需要紧急帮助)。

    服务非常容易配置(通常通过 /etc/syslog.conf 或等效项进行配置),并允许您选择要记录的信息类和记录信息的位置。例如,您可以将所有的标准信息写入文件。但是,对于重要消息,如果管理员立刻需要相关信息,则可以立即将这些消息发送到控制台。清单 4 显示了 Solaris 10 安装中的缺省 syslog.conf 文件的主配置内容。

    清单 4. 示例 syslog.conf 文件

   

 *.err;kern.notice;auth.notice                   /dev/sysmsg
*.err;kern.debug;daemon.notice;mail.crit        /var/adm/messages

*.alert;kern.err;daemon.err                     operator
*.alert                                         root

*.emerg                                         *

...

mail.debug                      ifdef('LOGHOST', /var/log/syslog, @loghost)

...

ifdef('LOGHOST', ,
user.err                                        /dev/sysmsg
user.err                                        /var/adm/messages
user.alert                                      'root, operator'
user.emerg                                      *
)

    因为 syslog 是 UNIX/Linux 中的标准日志记录机制,所以它用于记录大量的不同信息。其中包括启动消息、登录和授权信息,以及服务的启动/关闭。另外,syslog 通常还用于记录电子邮件消息传递、文件系统问题,甚至 DHCP 租期、DNS 问题和 NFS 问题。因为 syslog 可以将数据写入不同的区域,所以 syslog 在写入信息时并不总是十分明显。

    在磁盘上复制 syslog 的主要目的地与在 UNIX 变体之间不同。许多 Linux 版本将信息写入 /var/log/messages。在 AIX、Solaris 和 HP-UX 上,syslog 被写入 /var/adm/messages。

    在清单 5 中可以看到 Solaris 计算机的 /var/adm/messages 示例。

    清单 5. 示例系统日志输出

   

 Feb  3 16:06:58 solaris2 ata: [ID 496167 kern.info] cmdk2 at ata1 target 0 lun 0
Feb  3 16:06:58 solaris2 genunix: [ID 936769 kern.info] cmdk2 is
                                            /pci@0,0/pci-ide@1f,1/ide@1/cmdk@0,0
Feb  3 16:06:59 solaris2 asy: [ID 267298 kern.notice] asy0: UART @
                                          3f8 scratch register: expected 0x5a, g
ot 0xff
Feb  3 16:06:59 solaris2 asy: [ID 702181 kern.notice] Cannot identify UART chip at 3f8
Feb  3 16:06:59 solaris2 asy: [ID 267298 kern.notice] asy1: UART @ 2f8 scratch register:
                                                                expected 0x5a, got 0xff
Feb  3 16:06:59 solaris2 asy: [ID 702181 kern.notice] Cannot identify UART chip at 2f8
Feb  3 16:07:01 solaris2 genunix: [ID 314293 kern.info] device
          pciclass,030000@2(display#0) keeps up device sd@1,0(sd#1), but the latter is
          not power managed
Feb  3 16:07:01 solaris2 /usr/lib/power/powerd: [ID 387247 daemon.error]
                                                                  Able to open /dev/srn
Feb  3 16:07:08 solaris2 /sbin/dhcpagent[164]: [ID 778557 daemon.warning]
                configure_v4_lease: no IP broadcast specified for ni0, making best guess
Feb  3 16:07:31 solaris2 sendmail[503]: [ID 702911 mail.crit] My unqualified host name
                                                  (solaris2) unknown; sleeping for retry
Feb  3 16:07:32 solaris2 sendmail[507]: [ID 702911 mail.crit] My unqualified host name
                                                  (solaris2) unknown; sleeping for retry
Feb  3 16:07:48 solaris2 svc.startd[7]: [ID 652011 daemon.warning]
           svc:/system/webconsole:console: Method "/lib/svc/method/svc-webconsole start"
   failed with exit status 95.
Feb  3 16:07:48 solaris2 svc.startd[7]: [ID 748625 daemon.error]
             system/webconsole:console failed fatally: transitioned to maintenance
(see 'svcs -xv' for details)
Feb  3 16:07:55 solaris2 pseudo: [ID 129642 kern.info] pseudo-device: devinfo0
Feb  3 16:07:55 solaris2 genunix: [ID 936769 kern.info] devinfo0 is /pseudo/devinfo@0
Feb  3 16:08:31 solaris2 sendmail[503]: [ID 702911 mail.alert] unable to qualify
                                    my own domain name (solaris2) -- using short name
Feb  3 16:08:32 solaris2 sendmail[507]: [ID 702911 mail.alert] unable to qualify my
                                       own domain name (solaris2) -- using short name

    在示例输出中可以看到大量的信息,范围从硬件设备中的问题一直到邮件服务的当前配置中的问题。

    文件的格式非常简单:它包含日期、主机名、服务名称、唯一 ID(使系统记录多行消息并标识它们)和条目的标识符和类。每行上的其余文本只是系统记录错误消息的自由格式文本。

    文件的该格式使提取所需信息变得更加方便。文件中的所有行都是使用唯一 ID 标记的,并且所有的行都标有错误消息的标识符和类。

    例如,您可以使用邮件系统提取关键问题的信息,方法是使用 grep 挑选使用 mail.crit 标记的项: $ grep mail.crit /var/adm/messages.

    处理日志中个别行的详细信息比较复杂。尽管文件的前几列是标准化的(它们由 syslog 守护进程写入),但是,行的其余格式完全依赖于报告错误消息的组件。

    它使阅读和分析文件的内容变得非常复杂,因为您需要根据标识符和报告工具来处理每行。更有甚者,有些行不符合某个格式。

    内核日志(dmesg 和 alog)

    所有 UNIX 和 Linux 系统的日志实际上是内核的一部分。日志实际上是内核中内存的一部分,用于记录无法写入磁盘的有关内核的信息,这是因为该信息是加载文件系统之前生成的。

    例如,在启动过程中,不能以写入方式访问文件系统(大多数内核以读取模式启动文件系统,直到认为系统足够安全,能够切换到读/写模式为止)。此日志中的数据包含关于连接到系统的设备的信息,以及在启动和操作过程中系统记录的任何错误和问题的信息。

    在一些系统上,信息会定期写入文件 (/var/log/dmesg);而在另一些系统上,只有使用 alog 命令 (AIX) 或 dmesg(所有其他 UNIX/Linux 变体)才可获得信息。

    内核生成的信息并不总是写入另一个文件,如 syslog。这意味着某些信息(如关于设备和硬件的内部数据)只能通过 dmesg 日志提供。

    例如,清单 6 显示了 Gentoo Linux 系统上 dmesg 的一些示例输出。为简单起见,此处仅显示了主要启动信息。

    清单 6. dmesg 日志内容

   

 $ dmesg
Linux version 2.6.22-gentoo-r8 (root@gentoo2.vm) (gcc version 4.1.2
                (Gentoo 4.1.2 p1.0.1)) #1 SMP Fri Sep 28 14:22:07 GMT 2007
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 0000000000100000 - 0000000020000000 (usable)
0MB HIGHMEM available.
512MB LOWMEM available.
Entering add_active_range(0, 0, 131072) 0 entries of 256 used
Zone PFN ranges:
  DMA             0 ->     4096
  Normal       4096 ->   131072
  HighMem    131072 ->   131072
early_node_map[1] active PFN ranges
    0:        0 ->   131072
On node 0 totalpages: 131072
  DMA zone: 32 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 4064 pages, LIFO batch:0
  Normal zone: 992 pages used for memmap
  Normal zone: 125984 pages, LIFO batch:31
  HighMem zone: 0 pages used for memmap
DMI not present or invalid.
Allocating PCI resources starting at 30000000 (gap: 20000000:e0000000)
Built 1 zonelists.  Total pages: 130048
Kernel command line: root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev
Local APIC disabled by BIOS -- you can enable it with "lapic"
mapped APIC to ffffd000 (0140c000)
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
CPU 0 irqstacks, hard=c054e000 soft=c052e000
PID hash table entries: 2048 (order: 11, 8192 bytes)
Detected 2295.874 MHz processor.
Console: colour VGA+ 80x25
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 511616k/524288k available (3150k kernel code, 12100k reserved,
                                                       818k data, 264k init, 0k highmem)
virtual kernel memory layout:
    fixmap  : 0xffe17000 - 0xfffff000   (1952 kB)
    pkmap   : 0xff800000 - 0xffc00000   (4096 kB)
    vmalloc : 0xe0800000 - 0xff7fe000   ( 495 MB)
    lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
      .init : 0xc04e7000 - 0xc0529000   ( 264 kB)
      .data : 0xc0413884 - 0xc04e0364   ( 818 kB)
      .text : 0xc0100000 - 0xc0413884   (3150 kB)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay using timer specific routine.. 4674.89 BogoMIPS (lpj=23374475)
Mount-cache hash table entries: 512
CPU: After generic identify, caps: 0f80b9b9 00000000 00000000 00000000 00000001
                                                                      00000000 00000000
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L3 cache: 4096K
CPU: After all inits, caps: 0f80b9b9 00000000 00000000 00000140 00000001
                                                                      00000000 00000000
...

    清单 7 显示了来自运行 Gentoo Linux 的另一台计算机的输出,在本例中,您可以看到运行的文件系统报告的一些错误。

    清单 7. dmesg 的磁盘错误

 

 EXT3-fs: mounted filesystem with ordered data mode.
sd 7:0:1:0: [sdf] Result: hostbyte=0x00 driverbyte=0x08
sd 7:0:1:0: [sdf] Sense Key : 0x3 [current]
sd 7:0:1:0: [sdf] ASC=0x4b ASCQ=0x0
end_request: I/O error, dev sdf, sector 894959703
EXT3-fs error (device sdf1): ext3_get_inode_loc: unable to read
                         inode block - inode=55935010, block=111869955
sd 7:0:1:0: [sdf] Result: hostbyte=0x00 driverbyte=0x08
sd 7:0:1:0: [sdf] Sense Key : 0x3 [current]
sd 7:0:1:0: [sdf] ASC=0x4b ASCQ=0x0
end_request: I/O error, dev sdf, sector 894959703

    从清单 7 可以看到,您可能需要检查文件系统,因为其中显示文件系统或磁盘上存在错误。

    在本例中,syslog 中也报告了该信息(清单 8)。

    清单 8. syslog 中的磁盘错误

 

 messages:Feb  3 12:17:53 bear sd 7:0:1:0: [sdf] Result: hostbyte=0x00 driverbyte=0x08
messages:Feb  3 12:17:53 bear sd 7:0:1:0: [sdf] Sense Key : 0x3 [current]
messages:Feb  3 12:17:53 bear sd 7:0:1:0: [sdf] ASC=0x4b ASCQ=0x0
messages:Feb  3 12:17:53 bear end_request: I/O error, dev sdf, sector 894959703
messages:Feb  3 12:17:53 bear EXT3-fs error (device sdf1): ext3_get_inode_loc: unable
                                 to read inode block - inode=55935014, block=111869955

    但是,在出现严重错误或故障的情况下,dmesg 有时可能是系统上所发生情况的唯一良好的信息源。

上一页  [1] [2] [3] [4] 下一页

【责编:Zenghui】
中国IT教育
相关产品和培训
文章评论
 友情推荐链接
 专题推荐

 ·lvm-linux逻辑磁盘卷管理专题
 ·从无到有--理解系统引导过程
 ·Fedora中文频道
 ·新手入门:虚拟机上的Linux应用攻略
 ·Linux操作系统下U盘的应用技巧
 ·Linux操作系统密码攻略
 ·使用 Nginx 提升网站访问速度
 ·建立可全面监控Squid代理服务器
 ·防范Linux病毒 打造没有病毒的乐土
 ·Linux Shell编程实用指南
 今日更新
 认证培训
 频道精选
 Windows频道导航