【51CTO.com快译】Linux上的日志文件给出了大量实用的信息,可以表明系统上发生的情况。下列命令可帮助你厘清数据、揪出问题。
Linux系统维护有大量的日志文件,其中许多日志文件你很可能懒得看一眼。不过有一些日志文件很宝贵,探究日志文件的方案五花八门。不妨看看一些系统日志,并了解更容易探究日志数据的一些方法。
日志文件轮换
首先存在日志轮换问题。一些Linux日志文件是“轮换的”。换句话说,系统存储不止“一代”的日志文件,主要是为了防止它们占用太多的磁盘空间。然后较旧的日志被压缩,但保留一段时间。最终,一系列轮换日志文件中最旧的日志文件会在日志轮换过程中被自动删除,但你仍然可以访问许多较旧的日志,以便可以检查过去几天或几周添加的日志条目。
如果你需要更细致一点地回顾在跟踪的某个问题,想了解哪些类型的系统信息保存起来,只需用cd进入到/var/log目录,列出里面的内容。
- /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
这是数量相当庞大的日志和日志目录,/var/log下面有69个文件和目录,但如果算上那些目录下面的文件,就有180个文件之多。
- $ cd /var/log
- $ ls | wc -l
- 69
- $ find . -type f -print | wc -l
- 180
如果你分析日志文件,会清楚地看到同一个基本的日志有哪几代。比如说,其中一个主要的日志文件:syslog文件分成了9个不同的文件。这代表了一周以来的历史数据以及当前文件。大多数旧文件被压缩以节省空间。
- $ 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文件包含来自许多不同系统服务的消息,cron、sendmail和内核本身就是典型的几项系统服务。你还会看到用户会话和cron(计划任务)的影子。
大多数Linux系统不再使用旧的messages和dmesg文件,多年来它们为我们的大多数系统消息充当登陆位置。相反,一大批文件和一些特殊命令可以用来帮助显示可能与你要查找的内容密切相关的日志信息。
视具体的文件而定,你可能只需使用more或tail命令,或者可以使用针对特定文件的命令,比如使用who命令,从wtmp日志提取用户登录数据。
- $ 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)
同样,你在运行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命令时,可能也只发现需要使用lastlog命令来查看该日志的数据。
因此,这里列出了/var/log中的日志文件,以及关于它们包含的内容以及如何查看内容的一些描述。
- alternatives.log-来自update-alternatives的“运行”建议
- apport.log-关于已截获的崩溃的信息
- auth.log-使用的用户登录和身份验证机制
- boot.log-启动时间消息
- btmp-失败的登录尝试
- dpkg.log-关于软件包何时安装或删除的信息
- lastlog-最近的登录(使用lastlog命令来查看)
- faillog-关于失败的登录尝试的信息;如果失败的登录尝试一次都没有,全是0(使用faillog命令来查看)
- kern.log-内核日志消息
- mail.err-关于邮件服务器检测到的错误的信息
- mail.log-来自邮件服务器的信息
- syslog-系统服务日志
- ufw-防火墙日志
- wtmp-登录记录
journalctl
除了/var/log中维护的日志文件外,还有systemd日志。虽然这个日志不是通常意义上的简单的“日志文件”,却代表了关于用户和内核活动的一堆重要信息。可从系统上的众多来源获取该信息。
要查看已收集的信息,请使用journalctl命令。
会看到多少信息取决于你是不是adm组的成员。非adm用户看到的信息比较少,但adm组的成员可以访问大量数据,如此例所示,这仅仅向我们显示该adm组成员可以查看多少行信息:
- $ journalctl | wc -l
- 666501
有666000多行文本!为了缩减至更一目了然的版本,你恐怕要使用参数来定制显示的内容。Journalctl的几个选项包括如下:
- --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)
还可以查看仅仅某一项服务的日志条目。这可能是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 --
注意这个输出结果中系统重启信息是如何显示的。
想列出服务,试一下这样的命令:
- $ 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
在上述显示的内容中:
- + = active
- - = inactive
- ? = no status option available
这个实用命令给出了表明磁盘空间使用情况的简短报告:
- $ journalctl --disk-usage
- Archived and active journals take up 824.1M in the file system.
如果你想关注某一个进程,只需提供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。
原文标题:Making better use of your Linux logs,作者:Sandra Henry-Stocker
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】