把你的Linux日志更充分地利用起来

译文
系统 Linux
Linux上的日志文件给出了大量实用的信息,可以表明系统上发生的情况。下列命令可帮助你厘清数据、揪出问题。

【51CTO.com快译】Linux上的日志文件给出了大量实用的信息,可以表明系统上发生的情况。下列命令可帮助你厘清数据、揪出问题。

[[246685]]

Linux系统维护有大量的日志文件,其中许多日志文件你很可能懒得看一眼。不过有一些日志文件很宝贵,探究日志文件的方案五花八门。不妨看看一些系统日志,并了解更容易探究日志数据的一些方法。

日志文件轮换

首先存在日志轮换问题。一些Linux日志文件是“轮换的”。换句话说,系统存储不止“一代”的日志文件,主要是为了防止它们占用太多的磁盘空间。然后较旧的日志被压缩,但保留一段时间。最终,一系列轮换日志文件中最旧的日志文件会在日志轮换过程中被自动删除,但你仍然可以访问许多较旧的日志,以便可以检查过去几天或几周添加的日志条目。

如果你需要更细致一点地回顾在跟踪的某个问题,想了解哪些类型的系统信息保存起来,只需用cd进入到/var/log目录,列出里面的内容。 

  1. /var/log# ls  
  2. alternatives.log btmp.1 kern.log.2.gz syslog.3.gz  
  3. alternatives.log.1 cups kern.log.3.gz syslog.4.gz  
  4. alternatives.log.2.gz dist-upgrade kern.log.4.gz syslog.5.gz  
  5. alternatives.log.3.gz dpkg.log lastlog syslog.6.gz  
  6. alternatives.log.4.gz dpkg.log.1 mail.err syslog.7.gz  
  7. alternatives.log.5.gz dpkg.log.2.gz mail.err.1 sysstat  
  8. apport.log dpkg.log.3.gz mail.err.2.gz tallylog  
  9. apport.log.1 dpkg.log.4.gz mail.err.3.gz ufw.log  
  10. apt dpkg.log.5.gz mail.err.4.gz ufw.log.1  
  11. atop faillog mail.log ufw.log.2.gz  
  12. auth.log fontconfig.log mail.log.1 ufw.log.3.gz  
  13. auth.log.1 gdm3 mail.log.2.gz ufw.log.4.gz  
  14. auth.log.2.gz gpu-manager.log mail.log.3.gz unattended-upgrades  
  15. auth.log.3.gz hp mail.log.4.gz wtmp  
  16. auth.log.4.gz installer speech-dispatcher wtmp.1  
  17. boot.log journal syslog  
  18. bootstrap.log kern.log syslog.1  
  19. btmp kern.log.1 syslog.2.gz  

这是数量相当庞大的日志和日志目录,/var/log下面有69个文件和目录,但如果算上那些目录下面的文件,就有180个文件之多。 

  1. $ cd /var/log 
  2. $ ls | wc -l  
  3. 69  
  4. $ find . -type f -print | wc -l  
  5. 180  

如果你分析日志文件,会清楚地看到同一个基本的日志有哪几代。比如说,其中一个主要的日志文件:syslog文件分成了9个不同的文件。这代表了一周以来的历史数据以及当前文件。大多数旧文件被压缩以节省空间。 

  1. $ ls -l syslog*  
  2. -rw-r----- 1 syslog adm 588728 Oct 15 20:42 syslog  
  3. -rw-r----- 1 syslog adm 511814 Oct 15 00:09 syslog.1  
  4. -rw-r----- 1 syslog adm 31205 Oct 14 00:06 syslog.2.gz  
  5. -rw-r----- 1 syslog adm 34797 Oct 13 00:06 syslog.3.gz  
  6. -rw-r----- 1 syslog adm 61107 Oct 12 00:08 syslog.4.gz  
  7. -rw-r----- 1 syslog adm 31682 Oct 11 00:06 syslog.5.gz  
  8. -rw-r----- 1 syslog adm 32004 Oct 10 00:07 syslog.6.gz  
  9. -rw-r----- 1 syslog adm 32309 Oct 9 00:05 syslog.7.gz  

syslog文件包含来自许多不同系统服务的消息,cron、sendmail和内核本身就是典型的几项系统服务。你还会看到用户会话和cron(计划任务)的影子。

大多数Linux系统不再使用旧的messages和dmesg文件,多年来它们为我们的大多数系统消息充当登陆位置。相反,一大批文件和一些特殊命令可以用来帮助显示可能与你要查找的内容密切相关的日志信息。

视具体的文件而定,你可能只需使用more或tail命令,或者可以使用针对特定文件的命令,比如使用who命令,从wtmp日志提取用户登录数据。 

  1. $ who wtmp  
  2. shs pts/1 2018-10-05 08:42 (192.168.0.10)  
  3. shs pts/1 2018-10-08 09:41 (192.168.0.10)  
  4. shs pts/1 2018-10-11 14:00 (192.168.0.10)  
  5. shs :0 2018-10-14 19:11 (:0)  
  6. shs pts/0 2018-10-14 19:16 (192.168.0.25)  
  7. shs pts/0 2018-10-15 07:39 (192.168.0.25)  
  8. shs :0 2018-10-15 19:58 (:0)  
  9. dory pts/0 2018-10-15 20:01 (192.168.0.11)  
  10. shs pts/0 2018-10-15 20:42 (192.168.0.6)  
  11. shs pts/0 2018-10-16 07:18 (192.168.0.6)  
  12. nemo pts/1 2018-10-16 07:46 (192.168.0.14)  

同样,你在运行tail faillog命令后可能什么都看不到,但是像这样的命令向你表明它全是0: 

  1. # od -bc faillog  
  2. 0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000  
  3. \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0  
  4.  
  5. 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组成员可以查看多少行信息: 

  1. $ journalctl | wc -l 
  2. 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"

示例如下: 

  1. $ journalctl --since "2018-10-16 13:28"  
  2. -- Logs begin at Mon 2018-05-14 15:16:11 EDT, end at Tue 2018-10-16 13:28:57 EDT. --  
  3. Oct 16 13:28:25 butterfly kernel: [UFW BLOCK] IN=enp0s25 OUT= MAC=01:00:5e:00:00:01:02:  
  4. Oct 16 13:28:25 butterfly kernel: [UFW BLOCK] IN=enp0s25 OUT= MAC=01:00:5e:00:00:fb:00:  
  5. Oct 16 13:28:57 butterfly su[7784]: pam_unix(su:session): session closed for user root  
  6. Oct 16 13:28:57 butterfly sudo[7783]: pam_unix(sudo:session): session closed for user root  
  7. lines 1-5/5 (END 

还可以查看仅仅某一项服务的日志条目。这可能是journalctl命令比较有用的功能之一: 

  1. $ journalctl -u networking.service  
  2. -- Logs begin at Mon 2018-05-14 15:16:11 EDT, end at Tue 2018-10-16 08:06:31 EDT  
  3. May 14 15:16:12 shs-Inspiron-530s systemd[1]: Starting Raise network interfaces.  
  4. May 14 15:16:12 shs-Inspiron-530s systemd[1]: Started Raise network interfaces.  
  5. May 14 15:49:18 butterfly systemd[1]: Stopping Raise network interfaces...  
  6. May 14 15:49:18 butterfly systemd[1]: Stopped Raise network interfaces.  
  7. -- Reboot --  
  8. May 14 15:49:50 butterfly systemd[1]: Starting Raise network interfaces...  
  9. May 14 15:49:51 butterfly systemd[1]: Started Raise network interfaces.  
  10. -- Reboot --  

注意这个输出结果中系统重启信息是如何显示的。

想列出服务,试一下这样的命令: 

  1. $ service --status-all | column  
  2. [ + ] acpid [ + ] network-manager  
  3. [ - ] alsa-utils [ - ] networking  
  4. [ - ] anacron [ - ] plymouth  
  5. [ + ] apparmor [ - ] plymouth-log  
  6. [ + ] apport [ - ] pppd-dns  
  7. [ + ] atd [ + ] procps  
  8. [ + ] atop [ - ] quota  
  9. [ + ] atopacct [ - ] quotarpc  
  10. [ + ] avahi-daemon [ - ] rsync  
  11. [ - ] bluetooth [ + ] rsyslog  
  12. [ - ] console-setup.sh [ - ] saned  
  13. [ + ] cron [ + ] sendmail  
  14. [ + ] cups [ + ] speech-dispatcher  
  15. [ + ] cups-browsed [ - ] spice-vdagent  
  16. [ + ] dbus [ + ] ssh  
  17. [ - ] dns-clean [ + ] sysstat  
  18. [ + ] gdm3 [ - ] thermald  
  19. [ + ] grub-common [ + ] udev  
  20. [ - ] hwclock.sh [ + ] ufw  
  21. [ + ] irqbalance [ + ] unattended-upgrades  
  22. [ + ] kerneloops [ - ] uuidd  
  23. [ - ] keyboard-setup.sh [ + ] whoopsie  
  24. [ + ] kmod [ - ] x11-common  

在上述显示的内容中: 

  1. + = active  
  2. - = inactive  
  3. ? = no status option available  

这个实用命令给出了表明磁盘空间使用情况的简短报告: 

  1. $ journalctl --disk-usage  
  2. Archived and active journals take up 824.1M in the file system.  

如果你想关注某一个进程,只需提供PID(截短的),如下所示。 

  1. $ journalctl _PID=787  
  2. -- Logs begin at Mon 2018-05-14 15:16:11 EDT, end at Tue 2018-10-16 08:25:17 EDT  
  3. Aug 03 18:02:46 butterfly apport[787]: * Starting automatic crash report genera  
  4. Aug 03 18:02:46 butterfly apport[787]: ...done.  
  5. -- Reboot --  
  6. Sep 16 13:26:34 butterfly atopacctd[787]: Version: 2.3.0 - 2017/03/25 09:59:59  
  7. Sep 16 13:26:34 butterfly atopacctd[787]: accounting to /run/pacct_source  
  8. -- Reboot --  
  9. Oct 03 18:08:41 butterfly apport[787]: * Starting automatic crash report genera  
  10. Oct 03 18:08:41 butterfly apport[787]: ...done.  
  11. -- Reboot --  
  12. Oct 15 14:07:11 butterfly snapd[787]: AppArmor status: apparmor is enabled but s  
  13. Oct 15 14:07:12 butterfly snapd[787]: AppArmor status: apparmor is enabled but s  
  14. Oct 15 14:07:12 butterfly snapd[787]: daemon.go:344: started snapd/2.35.2 (serie  
  15. 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】

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2020-01-06 15:00:43

Linux电脑发行版

2014-05-06 10:20:02

2021-07-28 10:32:53

漏洞网络安全信息安全

2011-02-16 08:56:19

2016-08-22 15:15:14

数据实践

2022-03-16 09:24:59

WindowsPC 游戏开发人员

2012-08-16 11:08:20

2009-06-29 10:04:47

DB2 9.7

2021-09-29 07:13:12

编程 Python Merge

2021-08-17 13:44:05

区块链品牌技术

2016-03-17 09:45:17

react双向绑定插件

2018-07-11 06:52:47

云计算云迁移

2021-06-30 09:20:18

NuShell工具Linux

2021-04-24 23:31:18

Python日志编程

2012-10-22 20:34:05

统一通信托管协作静态桥

2017-04-06 14:40:29

JavaScript错误处理堆栈追踪

2015-12-14 15:30:45

锐捷网络

2016-11-18 13:15:02

广电电视推流网

2018-04-20 07:22:59

物联网互联网IoT
点赞
收藏

51CTO技术栈公众号