18.1 什么是登录文件
什么是登录文件?简单地说,就是记录系统活动信息的几个文件,例如:何时何地何人,做了什么工作。换句话说就是:记录系统在什么时候由哪个程序做了什么样的行为时,发生了什么事。
18.1.1 CentOS 7 登录文件简易说明
登录文件的重要性
为什么说登录文件很重要,重要到系统管理员需要随时注意他呢?我们可以这么说:
解决系统方面的错误:
系统有时候可能会出现一些错误,包括硬件捉不到或者是某些系统服务无法顺利运行的情况。这时系统会将硬件侦测过程记录在登录文件内,只要通过查询登录文件就能够了解系统发生什么事。
解决网络服务的问题:
在做完了某些网络服务的设置后,却一直无法顺利启动该服务,此时该怎办?由于网络服务的各种问题通常都会被写入特别的登录文件, 其实你只要查询登录文件就会知道出了什么差错。举例来说,如果你无法启动邮件服务器 (postfix), 那么查询一下/var/log/maillog就可以。
过往事件记录簿:
如果你发现某个时刻的网络服务流量很大,你想要知道原因,可以通过登录文件去找出该时段是哪些 IP 在连线与查询的网页数据为何,就能够知道原因。
Linux 常见的登录文件文件名
登录文件可以帮助我们了解很多系统重要的事件,包括登陆者的部分信息,因此登录文件的权限通常是设置为仅有 root 能够读取而已。 而由于登录文件可以记载系统这么多的详细信息,所以,一个有经验的主机管理员会随时随地查阅一下自己的登录文件, 以随时掌握系统的最新脉动!那么常见的几个登录文件有哪些呢?一般而言,有下面几个:
/var/log/boot.log: 开机的时候系统核心会去侦测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在 /var/log/boot.log 里面。 不过这个文件只会存在这次开机启动的信息,前次开机的信息并不会被保留下来!
/var/log/cron:crontab调度有没有实际被进行,过程中有没有错误,/etc/crontab是否撰写正确,都在这里面看。
/var/log/dmesg: 记录系统在开机的时候核心侦测过程所产生的各项信息。由于 CentOS默认将开机时核心的硬件侦测过程取消显示, 因此额外将数据记录一份在这个文件中;
/var/log/lastlog: 可以记录系统上面所有的帐号最近一次登陆系统时的相关信息。
/var/log/maillog 或 /var/log/mail/*: 记录邮件的往来信息,其实主要是记录 postfix(SMTP 协定提供者) 与 dovecot (POP3 协定提供者) 所产生的讯息。SMTP 是发信所使用的通讯协定, POP3 则是收信使用的通讯协定。 postfix 与 dovecot 则分别是两套达成通讯协定的软件。
/var/log/messages: 这个文件相当的重要,几乎系统发生的错误讯息 (或者是重要的信息) 都会记录在这个文件中; 如果系统发生莫名的错误时,这个文件是一定要查阅的登录文件之一。
/var/log/secure: 基本上,只要牵涉到“需要输入帐号密码”的软件,那么当登陆时 (不管登陆正确或错误) 都会被记录在此文件中。 包括系统的 login 程序、图形接口登陆所使用的 gdm 程序、 su, sudo 等程序、还有网络连线的 ssh, telnet 等程序, 登陆信息都会被记载在这里;
/var/log/wtmp, /var/log/faillog: 这两个文件可以记录正确登陆系统者的帐号信息(wtmp) 与错误登陆时所使用的帐号信息 (faillog)。
/var/log/httpd/, /var/log/samba/: 不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项讯息!上述的目录内则是个别服务所制订的登录文件。
常见的登录文件就是这几个,但是不同的 Linux distributions ,通常登录文件的文件名不会相同 (除了 /var/log/messages 之外 )。
登录文件所需相关服务 (daemon) 与程序
那么这些登录文件是怎么产生的呢?基本上有两种方式,一种是由软件开发商自行定义写入的登录文件与相关格式, 例如 WWW 软件 apache 就是这样处理的。另一种则是由 Linuxdistribution 提供的登录文件管理服务来统一管理。 你只要将讯息丢给这个服务后,他就会自己分门别类的将各种讯息放置到相关的登录文件去!CentOS 提供 rsyslog.service 这个服务来统一管理登录文件。
不过要注意的是,如果你任凭登录文件持续记录的话,由于系统产生的信息天天都有,那么你的登录文件的容量将会无限多。如果你的登录文件容量太大时,可能会导致大文件读写效率不佳的问题 (因为要从磁盘读入内存,越大的文件消耗内存量越多)。我们可以通过 logrotate(登录文件轮替) 来自动化处理登录文件容量与更新的问题。
所谓的 logrotate 基本上,就是将旧的登录文件更改名称,然后创建一个空的登录文件,如此一来, 新的登录文件将重新开始记录,然后只要将旧的登录文件留下一阵子,就可以将登录文件“轮转”。 此外,如果旧的记录 (大概要保存几个月吧!) 保存了一段时间没有问题,那么就可以让系统自动的将他砍掉。
总结一下,针对登录文件所需的功能,我们需要的服务与程序有:
systemd-journald.service:最主要的讯息收受者,由 systemd 提供的;
rsyslog.service:主要登录系统与网络等服务的讯息;
logrotate:主要在进行登录文件的轮替功能。
CentOS 7.x 使用 systemd 提供的 journalctl 日志管理
CentOS 7 除了保有既有的 rsyslog.service 之外,其实最上游还使用了 systemd 自己的登录文件日志管理功能。他使用的是 systemd-journald.service 这个服务来支持的。基本上,系统由 systemd 所管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的讯息, 就会将该讯息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个讯息发送给 rsyslog.service 作进一步的记载。
systemd-journald.service 的记录主要都放置于内存中,因此在存取方面性能比较好。我们也能够通过 journalctl 以及 systemctl status unit.service 来查看各个不同服务的登录文件! 这有个好处,就是登录文件可以随着个别服务让你查阅,在单一服务的处理上面,要比跑到/var/log/messages 去大海捞针来的简易很多。
18.1.2 登录文件内容的一般格式
一般来说,系统产生的讯息经过记录下来的数据中,每条讯息均会记录下面的几个重要数据:
事件发生的日期与时间;
发生此事件的主机名称;
启动此事件的服务名称 (如 systemd, CROND 等) 或指令与函数名称 (如 su,login..);
该讯息的实际数据内容。
当然,这些信息的“详细度”是可以修改的,而且,这些信息可以作为系统除错之用。我们拿登录时一定会记载帐号信息的 /var/log/secure 为例:
我们拿第一笔数据 (共两行) 来说明好了,该数据是说:“在 08/17 的 18:38 左右,在名为study 的这部主机系统上,由 login 这个程序产生的讯息,内容显示 root 在 tty1 登陆了,而相关的权限给予是通过 pam_unix 模块处理的 (共两行数据)。
如果有以下情况:
当你觉得系统似乎不太正常时;
某个 daemon 老是无法正常启动时;
某个使用者老是无法登陆时;
某个 daemon 执行过程老是不顺畅时;
就需要常常去“巡视”登陆文件的内容。