在典型的 UNIX? 或 Linux? 計算機操作過程中會創建許多日志文件。其中一些日志文件包含有用的信息;還有一些可幫助您進行容量和資源規劃。本文重點介紹不同日志文件中記錄的基本信息、它們的位置以及如何使用該信息確定系統的運行情況。
關於本系列
典型的 UNIX 管理員擁有一套經常用於輔助管理過程的關鍵實用工具、訣竅和系統。有一些重要的實用程序、命令行以及腳本可用來簡化各種處理過程。其中一些工具來自於操作系統,而大部分的訣竅則來源於長期的經驗積累和減輕系統管理員工作壓力的要求。本系列文章主要專注於最大限度地利用各種 UNIX 環境中可用的工具,包括簡化異構環境中的管理任務的方法。
日志文件
所有系統都會生成不同數量的日志文件,這些文件用於跟蹤和記錄關於計算機的不同信息。這些文件的內容和效用因系統而異,但是文件提供的核心信息通常是一致的。
例如,所有的 UNIX 和 Linux 計算機都使用 syslog(操作系統、應用程序和服務用來記錄信息的通用日志記錄系統)來記錄信息。syslog 一般會記錄大量的數據,其中包括由不同硬件和系統報告的登錄、性能信息和故障。除 syslog 外,系統還有用來記錄關於計算機及其操作信息的各種服務、環境和應用程序日志。
盡管分析和提取日志文件內容的信息可能非常耗時和復雜,但是不能忽略這些日志中信息的價值。日志文件可以提供關於潛在問題、錯誤和安全漏洞等方面的提示,如果使用正確,甚至可以提供關於服務器負載和容量方面的警告。
日志位置
各種日志文件的位置因系統而異。在大多數的 UNIX 和 Linux 系統上,大部分日志文件都位於 /var/log 中。例如,清單 1 顯示了 Gentoo Linux 系統上的日志文件列表。
清單 1. Linux /var/log 目錄內容
$ ll /var/logtotal 3312-rw-r----- 1 root root 8218 2007-11-03 06:21 dmesg-rw-rw---- 1 portage portage 650111 2008-02-02 13:01 emerge.log-rw------- 1 root root 24024 2007-11-05 07:26 faillog-rw-r--r-- 1 root root 386032 2007-09-28 14:39 genkernel.logdrwxr-xr-x 2 root root 4096 2007-11-03 06:47 iptraf/-rw-r--r-- 1 root root 292292 2008-02-03 08:07 lastlog-rw------- 1 root root 1346931 2008-02-03 08:50 messagesdrwxr-xr-x 2 root root 4096 2006-08-30 17:04 news/drwxr-xr-x 3 root root 4096 2007-09-28 13:22 portage/drwxrwx--- 2 root portage 4096 2007-11-03 06:40 sandbox/drwxrwx--- 2 snort snort 4096 2007-10-13 11:34 snort/-rw-rw-r-- 1 root utmp 496896 2008-02-03 08:07 wtmp-rw-rw-rw- 1 root mc 61189 2007-06-10 11:37 Xorg.0.log-rw-rw-rw- 1 root root 61189 2007-06-10 10:40 Xorg.0.log.old
在 Solaris?、IBM? AIX? 和 HP-UX? 上,主要 syslog 和其它大多數日志文件都寫入 /var/adm 目錄中的文件(清單 2)。
清單 2. 傳統 UNIX /var/adm 內容
$ ls -al /var/admtotal 230drwxrwxr-x 9 root sys 512 Feb 3 15:30 .drwxr-xr-x 48 root sys 1024 Feb 3 15:32 ..drwxrwxr-x 5 adm adm 512 Feb 2 16:13 acct-rw------- 1 uucp bin 0 Jan 12 18:49 aculogdrwxr-xr-x 2 adm adm 512 Feb 2 16:03 exacct-r--r--r-- 1 root root 2856 Feb 3 16:10 lastlogdrwxr-xr-x 2 adm adm 512 Feb 2 16:03 log-rw-r--r-- 1 root root 69065 Feb 3 16:08 messagesdrwxr-xr-x 2 root sys 512 Feb 2 16:09 pooldrwxrwxr-x 2 adm sys 512 Feb 2 16:13 sadrwxr-xr-x 2 root sys 512 Feb 2 17:03 sm.bin-rw-rw-rw- 1 root bin 0 Jan 12 18:47 spellhistdrwxr-xr-x 2 root sys 512 Feb 2 16:03 streams-rw------- 1 root root 93 Feb 3 16:08 sulog-rw-r--r-- 1 root bin 3720 Feb 3 16:14 utmpx-rw-r--r-- 1 adm adm 29760 Feb 3 16:10 wtmpx
另外,某些非系統級別的消息和信息都寫入位於 /var/log 中的日志中(清單 3)。例如,在 Solaris 上,郵件調試項在缺省情況下寫入 /var/log/syslog。
清單 3. Solaris 上 /var/log 中的其他日志
$ ls -al /var/log/total 48158drwxr-xr-x 7 root sys 512 Feb 3 16:07 .drwxr-xr-x 48 root sys 1024 Feb 3 15:32 ..-rw------- 1 root sys 0 Jan 12 18:48 authlog-rw-r--r-- 1 root other 27 Feb 2 16:17 brlogdrwxr-xr-x 2 root root 512 Feb 2 16:39 gdmdrwxr-xr-x 2 root sys 512 Feb 2 16:09 pool-rw-r--r-- 1 root sys 24480410 Feb 3 12:51 postrun.logdrwxr-xr-x 2 root sys 512 Feb 2 16:41 swupas-rw-r--r-- 1 root other 635 Feb 2 17:25 sysidconfig.log-rw-r--r-- 1 root sys 3967 Feb 3 16:08 syslogdrwxr-xr-x 3 root sys 512 Feb 2 17:25 webconsoledrwxr-xr-x 2 root sys 512 Feb 2 16:37 xen-rw-r--r-- 1 root root 66171 Feb 3 16:07 Xorg.0.log-rw-r--r-- 1 root root 66256 Feb 3 16:06 Xorg.0.log.old
當然,找到文件是最起碼的問題。您需要知道文件包含哪些有用的信息。
根據 UNIX 的變體,一些日志在其他地方可能比較雜亂,但是,已對標准化文件位置進行了一些有意義的嘗試,使日志文件都歸入前文已經提及的目錄之一。
日志類型和數據
日志類型共分為兩種:文本日志文件(包含簡單的文本格式的消息和信息)和用二進制格式編碼的文件。前者用於典型系統中的大多數日志,因為它們易於編寫,而且(也許是更重要的)它們易於閱讀。文本文件的不足之處是有時難以通過結構化方式提取信息,因為文件的文本格式允許使用任何方式或結構編寫信息。
從清單 7 可以看到,您可能需要檢查文件系統,因為其中顯示文件系統或磁盤上存在錯誤。
在本例中,syslog 中也報告了該信息(清單 8)。
清單 8. syslog 中的磁盤錯誤
messages:Feb 3 12:17:53 bear sd 7:0:1:0: [sdf] Result: hostbyte=0x00 driverbyte=0x08messages: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=0x0messages:Feb 3 12:17:53 bear end_request: I/O error, dev sdf, sector 894959703messages: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 有時可能是系統上所發生情況的唯一良好的信息源。
用戶記錄(utmp/x、wtmp/x 和 lastlog)
這些文件包含用戶登錄和系統數據日志。這些文件中的信息是以特殊的 utmp 格式編寫的,所以您需要特殊的工具才能提取該信息。
這些日志中的數據記錄登錄次數和系統啟動/關閉次數,即登錄的歷史記錄和對登錄過程中使用的上一次啟動或登錄時間的快速訪問。
有關系統管理工具包中包含的介紹如何分析這些文件的其他文章,請參閱參考資料。
cron 日志
cron 時間守護進程負責定期在後台運行許多服務,並生成自已的信息日志。
在某些系統上,cron 日志是使用 syslog 記錄的,而在 Solaris 和一些傳統 UNIX 變體上,信息則寫入文件 /var/cron/log。日志中包含的信息包括所執行命令的詳細信息和作業開始和終止的時間。
有關日志內容的示例,請參見清單 9。
清單 9. cron 活動的日志
! *** cron started *** pid = 283 Sun Feb 3 16:07:10 2008 CMD: /usr/local/bin/logmanage /dev/null 2&1 root 946 c Sun Feb 3 17:10:00 2008< root 946 c Sun Feb 3 17:10:00 2008 CMD: /usr/local/bin/backup /dev/null 2&1 root 949 c Sun Feb 3 17:11:00 2008< root 949 c Sun Feb 3 17:11:01 2008
分析日志的內容是確定可能未正確執行的作業中存在某些問題的有效方法。它也是檢查作業的執行時間的好方法。長時間運行的作業或似乎從未完成的作業可能指示應該調查某個問題。
日志文件管理
應確保能夠管理系統上的日志。日志文件可能變得很大,在許多情況下,您需要保存計算機上事件的歷史記錄,以便解決問題。
例如,應該調查系統的非正常重啟或關閉,而系統日志通常是唯一的信息源。盡管它無法告訴您在發生故障時發生的一切,但是可以從中得到一些有幫助的信息,如故障發生的准確時間或關於導致問題的事件的信息。潛在的安全問題和登錄嘗試可能指示計算機遭到了攻擊,該攻擊可能導致了此問題甚至就是導致此問題的原因。
長年累月地保存日志可能沒有必要(但在某些情況下,這是法律要求的)。在一個繁忙的系統中,您每天都可能很容易地將 25MB 或更多信息記錄到系統日志中,日志量太大經常是導致磁盤空間不足錯誤的原因。
一些 UNIX/Linux 變體包括自動化日志管理進程(Solaris 包括 /usr/sbin/logadm 命令),但是創建自已的日志管理經常並不困難。典型的功能就是短期(例如四周)內保留個別日志,並按順序對它們編號。例如,如果您具有文件消息,上一周的文件位於 messages.1,則兩周前的文件位於 messages.2 等等。這使文件的遷移變得非常容易。
不過,您必須確保能夠成功復制和重新創建文件,這樣在遷移和存檔過程中才不會丟失任何重要信息。對於舊文件,為節省空間,您還可以存檔內容。清單 10 顯示了一個簡單的腳本,它將個別文件復制並存檔到原始位置中指定的目錄。
清單 10. 簡單日志歸檔工具
#!/bin/bash# Manage logs and archive them if necessary# Keeps 4 copies of logscd /var/logfor type in cyrus dmesg emerge.log faillog genkernel.log messagesdo mkdir -p $type.d cp $type.d/$type.3.bz2 $type.d/$type.4.bz2 cp $type.d/$type.2.bz2 $type.d/$type.3.bz2 cp $type.d/$type.1.bz2 $type.d/$type.2.bz2 cp $type $type.d/$type.1 && cat </dev/null $type bzip2 -vf9 $type.d/$type.1done
運行腳本副本可重新創建和存檔日志文件。請注意如何遷移文件;對於每種情況,我們僅將當前文件移動到一周前。最後,我們將存檔並重新創建原始文件。
總結
從 AIX 創建新的 AD 用戶和組
日志文件可能包含大量的信息,但是深入了解文件的信息和格式對診斷和解決問題非常有幫助。本文介紹了日志文件的基礎知識、並介紹了日志文件位置和這些文件內容的詳細信息,以及它們如何幫助您診斷問題並在成為問題之前識別問題。本文還介紹了不同文件的格式,以及不同文件和它們的內容之間的關系。