把你的Linux日志更充分地利用起來(lái)
譯文【51CTO.com快譯】Linux上的日志文件給出了大量實(shí)用的信息,可以表明系統(tǒng)上發(fā)生的情況。下列命令可幫助你厘清數(shù)據(jù)、揪出問(wèn)題。
Linux系統(tǒng)維護(hù)有大量的日志文件,其中許多日志文件你很可能懶得看一眼。不過(guò)有一些日志文件很寶貴,探究日志文件的方案五花八門。不妨看看一些系統(tǒng)日志,并了解更容易探究日志數(shù)據(jù)的一些方法。
日志文件輪換
首先存在日志輪換問(wèn)題。一些Linux日志文件是“輪換的”。換句話說(shuō),系統(tǒng)存儲(chǔ)不止“一代”的日志文件,主要是為了防止它們占用太多的磁盤空間。然后較舊的日志被壓縮,但保留一段時(shí)間。最終,一系列輪換日志文件中最舊的日志文件會(huì)在日志輪換過(guò)程中被自動(dòng)刪除,但你仍然可以訪問(wèn)許多較舊的日志,以便可以檢查過(guò)去幾天或幾周添加的日志條目。
如果你需要更細(xì)致一點(diǎn)地回顧在跟蹤的某個(gè)問(wèn)題,想了解哪些類型的系統(tǒng)信息保存起來(lái),只需用cd進(jìn)入到/var/log目錄,列出里面的內(nèi)容。
- /var/log# ls
- alternatives.log btmp.1 kern.log.2.gz syslog.3.gz
- alternatives.log.1 cups kern.log.3.gz syslog.4.gz
- alternatives.log.2.gz dist-upgrade kern.log.4.gz syslog.5.gz
- alternatives.log.3.gz dpkg.log lastlog syslog.6.gz
- alternatives.log.4.gz dpkg.log.1 mail.err syslog.7.gz
- alternatives.log.5.gz dpkg.log.2.gz mail.err.1 sysstat
- apport.log dpkg.log.3.gz mail.err.2.gz tallylog
- apport.log.1 dpkg.log.4.gz mail.err.3.gz ufw.log
- apt dpkg.log.5.gz mail.err.4.gz ufw.log.1
- atop faillog mail.log ufw.log.2.gz
- auth.log fontconfig.log mail.log.1 ufw.log.3.gz
- auth.log.1 gdm3 mail.log.2.gz ufw.log.4.gz
- auth.log.2.gz gpu-manager.log mail.log.3.gz unattended-upgrades
- auth.log.3.gz hp mail.log.4.gz wtmp
- auth.log.4.gz installer speech-dispatcher wtmp.1
- boot.log journal syslog
- bootstrap.log kern.log syslog.1
- btmp kern.log.1 syslog.2.gz
這是數(shù)量相當(dāng)龐大的日志和日志目錄,/var/log下面有69個(gè)文件和目錄,但如果算上那些目錄下面的文件,就有180個(gè)文件之多。
- $ cd /var/log
- $ ls | wc -l
- 69
- $ find . -type f -print | wc -l
- 180
如果你分析日志文件,會(huì)清楚地看到同一個(gè)基本的日志有哪幾代。比如說(shuō),其中一個(gè)主要的日志文件:syslog文件分成了9個(gè)不同的文件。這代表了一周以來(lái)的歷史數(shù)據(jù)以及當(dāng)前文件。大多數(shù)舊文件被壓縮以節(jié)省空間。
- $ ls -l syslog*
- -rw-r----- 1 syslog adm 588728 Oct 15 20:42 syslog
- -rw-r----- 1 syslog adm 511814 Oct 15 00:09 syslog.1
- -rw-r----- 1 syslog adm 31205 Oct 14 00:06 syslog.2.gz
- -rw-r----- 1 syslog adm 34797 Oct 13 00:06 syslog.3.gz
- -rw-r----- 1 syslog adm 61107 Oct 12 00:08 syslog.4.gz
- -rw-r----- 1 syslog adm 31682 Oct 11 00:06 syslog.5.gz
- -rw-r----- 1 syslog adm 32004 Oct 10 00:07 syslog.6.gz
- -rw-r----- 1 syslog adm 32309 Oct 9 00:05 syslog.7.gz
syslog文件包含來(lái)自許多不同系統(tǒng)服務(wù)的消息,cron、sendmail和內(nèi)核本身就是典型的幾項(xiàng)系統(tǒng)服務(wù)。你還會(huì)看到用戶會(huì)話和cron(計(jì)劃任務(wù))的影子。
大多數(shù)Linux系統(tǒng)不再使用舊的messages和dmesg文件,多年來(lái)它們?yōu)槲覀兊拇蠖鄶?shù)系統(tǒng)消息充當(dāng)?shù)顷懳恢?。相反,一大批文件和一些特殊命令可以用?lái)幫助顯示可能與你要查找的內(nèi)容密切相關(guān)的日志信息。
視具體的文件而定,你可能只需使用more或tail命令,或者可以使用針對(duì)特定文件的命令,比如使用who命令,從wtmp日志提取用戶登錄數(shù)據(jù)。
- $ who wtmp
- shs pts/1 2018-10-05 08:42 (192.168.0.10)
- shs pts/1 2018-10-08 09:41 (192.168.0.10)
- shs pts/1 2018-10-11 14:00 (192.168.0.10)
- shs :0 2018-10-14 19:11 (:0)
- shs pts/0 2018-10-14 19:16 (192.168.0.25)
- shs pts/0 2018-10-15 07:39 (192.168.0.25)
- shs :0 2018-10-15 19:58 (:0)
- dory pts/0 2018-10-15 20:01 (192.168.0.11)
- shs pts/0 2018-10-15 20:42 (192.168.0.6)
- shs pts/0 2018-10-16 07:18 (192.168.0.6)
- nemo pts/1 2018-10-16 07:46 (192.168.0.14)
同樣,你在運(yùn)行tail faillog命令后可能什么都看不到,但是像這樣的命令向你表明它全是0:
- # od -bc faillog
- 0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
- \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
- *
- 0076600
你嘗試使用tail lastlog命令時(shí),可能也只發(fā)現(xiàn)需要使用lastlog命令來(lái)查看該日志的數(shù)據(jù)。
因此,這里列出了/var/log中的日志文件,以及關(guān)于它們包含的內(nèi)容以及如何查看內(nèi)容的一些描述。
- alternatives.log-來(lái)自u(píng)pdate-alternatives的“運(yùn)行”建議
- apport.log-關(guān)于已截獲的崩潰的信息
- auth.log-使用的用戶登錄和身份驗(yàn)證機(jī)制
- boot.log-啟動(dòng)時(shí)間消息
- btmp-失敗的登錄嘗試
- dpkg.log-關(guān)于軟件包何時(shí)安裝或刪除的信息
- lastlog-最近的登錄(使用lastlog命令來(lái)查看)
- faillog-關(guān)于失敗的登錄嘗試的信息;如果失敗的登錄嘗試一次都沒(méi)有,全是0(使用faillog命令來(lái)查看)
- kern.log-內(nèi)核日志消息
- mail.err-關(guān)于郵件服務(wù)器檢測(cè)到的錯(cuò)誤的信息
- mail.log-來(lái)自郵件服務(wù)器的信息
- syslog-系統(tǒng)服務(wù)日志
- ufw-防火墻日志
- wtmp-登錄記錄
journalctl
除了/var/log中維護(hù)的日志文件外,還有systemd日志。雖然這個(gè)日志不是通常意義上的簡(jiǎn)單的“日志文件”,卻代表了關(guān)于用戶和內(nèi)核活動(dòng)的一堆重要信息??蓮南到y(tǒng)上的眾多來(lái)源獲取該信息。
要查看已收集的信息,請(qǐng)使用journalctl命令。
會(huì)看到多少信息取決于你是不是adm組的成員。非adm用戶看到的信息比較少,但adm組的成員可以訪問(wèn)大量數(shù)據(jù),如此例所示,這僅僅向我們顯示該adm組成員可以查看多少行信息:
- $ journalctl | wc -l
- 666501
有666000多行文本!為了縮減至更一目了然的版本,你恐怕要使用參數(shù)來(lái)定制顯示的內(nèi)容。Journalctl的幾個(gè)選項(xiàng)包括如下:
- --utc (change the time format to UTC)
- -b (only show records added since the last boot)
- -b -1 (only show records added since the previous to last boot)
- --since and --until (only show records added within the specify timeframe, e.g., --since "2018-10-15" --until "2018-10-11 06:00"
示例如下:
- $ journalctl --since "2018-10-16 13:28"
- -- Logs begin at Mon 2018-05-14 15:16:11 EDT, end at Tue 2018-10-16 13:28:57 EDT. --
- Oct 16 13:28:25 butterfly kernel: [UFW BLOCK] IN=enp0s25 OUT= MAC=01:00:5e:00:00:01:02:
- Oct 16 13:28:25 butterfly kernel: [UFW BLOCK] IN=enp0s25 OUT= MAC=01:00:5e:00:00:fb:00:
- Oct 16 13:28:57 butterfly su[7784]: pam_unix(su:session): session closed for user root
- Oct 16 13:28:57 butterfly sudo[7783]: pam_unix(sudo:session): session closed for user root
- lines 1-5/5 (END)
還可以查看僅僅某一項(xiàng)服務(wù)的日志條目。這可能是journalctl命令比較有用的功能之一:
- $ journalctl -u networking.service
- -- Logs begin at Mon 2018-05-14 15:16:11 EDT, end at Tue 2018-10-16 08:06:31 EDT
- May 14 15:16:12 shs-Inspiron-530s systemd[1]: Starting Raise network interfaces.
- May 14 15:16:12 shs-Inspiron-530s systemd[1]: Started Raise network interfaces.
- May 14 15:49:18 butterfly systemd[1]: Stopping Raise network interfaces...
- May 14 15:49:18 butterfly systemd[1]: Stopped Raise network interfaces.
- -- Reboot --
- May 14 15:49:50 butterfly systemd[1]: Starting Raise network interfaces...
- May 14 15:49:51 butterfly systemd[1]: Started Raise network interfaces.
- -- Reboot --
注意這個(gè)輸出結(jié)果中系統(tǒng)重啟信息是如何顯示的。
想列出服務(wù),試一下這樣的命令:
- $ service --status-all | column
- [ + ] acpid [ + ] network-manager
- [ - ] alsa-utils [ - ] networking
- [ - ] anacron [ - ] plymouth
- [ + ] apparmor [ - ] plymouth-log
- [ + ] apport [ - ] pppd-dns
- [ + ] atd [ + ] procps
- [ + ] atop [ - ] quota
- [ + ] atopacct [ - ] quotarpc
- [ + ] avahi-daemon [ - ] rsync
- [ - ] bluetooth [ + ] rsyslog
- [ - ] console-setup.sh [ - ] saned
- [ + ] cron [ + ] sendmail
- [ + ] cups [ + ] speech-dispatcher
- [ + ] cups-browsed [ - ] spice-vdagent
- [ + ] dbus [ + ] ssh
- [ - ] dns-clean [ + ] sysstat
- [ + ] gdm3 [ - ] thermald
- [ + ] grub-common [ + ] udev
- [ - ] hwclock.sh [ + ] ufw
- [ + ] irqbalance [ + ] unattended-upgrades
- [ + ] kerneloops [ - ] uuidd
- [ - ] keyboard-setup.sh [ + ] whoopsie
- [ + ] kmod [ - ] x11-common
在上述顯示的內(nèi)容中:
- + = active
- - = inactive
- ? = no status option available
這個(gè)實(shí)用命令給出了表明磁盤空間使用情況的簡(jiǎn)短報(bào)告:
- $ journalctl --disk-usage
- Archived and active journals take up 824.1M in the file system.
如果你想關(guān)注某一個(gè)進(jìn)程,只需提供PID(截短的),如下所示。
- $ journalctl _PID=787
- -- Logs begin at Mon 2018-05-14 15:16:11 EDT, end at Tue 2018-10-16 08:25:17 EDT
- Aug 03 18:02:46 butterfly apport[787]: * Starting automatic crash report genera
- Aug 03 18:02:46 butterfly apport[787]: ...done.
- -- Reboot --
- Sep 16 13:26:34 butterfly atopacctd[787]: Version: 2.3.0 - 2017/03/25 09:59:59
- Sep 16 13:26:34 butterfly atopacctd[787]: accounting to /run/pacct_source
- -- Reboot --
- Oct 03 18:08:41 butterfly apport[787]: * Starting automatic crash report genera
- Oct 03 18:08:41 butterfly apport[787]: ...done.
- -- Reboot --
- Oct 15 14:07:11 butterfly snapd[787]: AppArmor status: apparmor is enabled but s
- Oct 15 14:07:12 butterfly snapd[787]: AppArmor status: apparmor is enabled but s
- Oct 15 14:07:12 butterfly snapd[787]: daemon.go:344: started snapd/2.35.2 (serie
- Oct 15 14:07:12 butterfly snapd[787]: autorefresh.go:376: Cannot prepare auto-re
注意:systemd日志的配置文件是/etc/systemd/journald.conf。
原文標(biāo)題:Making better use of your Linux logs,作者:Sandra Henry-Stocker
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】