当您的服务器性能出现任何问题时,首先应该检查 Linux 日志。在系统日志中,您可以找到来自操作系统不同组件(例如内核或各种服务)的一些有用的诊断信息,因此您很可能在那里找到故障原因。
日志中的每条消息都是操作系统中某些事件的结果:来自用户、授权、服务关闭或应用程序故障。这些事件根据其严重程度具有不同的优先级。Linux 中有以下类型的事件:
emerg- 失败,最高优先级;alert- 紧急警告;crit- 关键事件;err- 一般错误;warn- 普通警告;notice- 通知;info- 信息消息;debug- 调试信息;
目前,Linux 系统中主要的日志采集服务是rsyslog和systemd-journald。它们与大多数现代发行版软件包集成,并且可以独立运行。
系统日志
该服务的日志以普通文本文件的形式存储在“ /var/log/ ”文件夹中。日志消息会根据事件类型被放入不同的文件中。例如,“ /var/log/ auth.log ”包含有关用户在系统中的授权信息,“ /var/log/kern.log ”包含内核消息。由于不同发行版软件包的文件名可能有所不同,因此让我们查看一下配置文件“ /etc/rsyslog.d/50-default.conf ”来了解各个文件的位置。
这些规则显示了每种类型的日志消息对应的文件。左侧以“ [来源].[优先级] ”的格式显示消息类型,右侧显示日志文件名。在填写消息类型时,可以添加“ * ”字符。它表示空值或“无”,会将其从列表中删除。让我们仔细看看前两条规则。
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
第一条规则表示,所有从授权机制收到的消息都将被记录到“ /var/log/auth.log ”文件中。所有授权尝试(无论成功与否)都将被记录到此文件中。第二条规则表示,除与授权相关的消息外,所有消息都将被记录到“ /var/log/syslog ”文件中。这两个文件通常是最常用的。以下规则定义了内核日志“ kern.* ”和邮件服务日志“ mail.* ”的存储路径。
可以使用任何文本编辑器打开日志文件,例如less、cat或tail。我们来打开“ /var/log/auth.log ”文件。
less /var/log/auth.log
该文件的每一行都是从应用程序或服务收到的一条单独消息。所有消息(无论其来源如何)都具有相同的格式,并由 5 个部分组成。让我们以屏幕截图中突出显示的消息为例。
- 消息时间戳 - “12 月 06 日 18:33:XNUMX”
- 发送消息的计算机的名称 - “vds”
- 发送消息的应用程序或服务的名称 - “sshd”
- 进程 ID — [653]
- 消息文本 - “已接受来自 188.19.42.165 端口 2849 ssh2 的 mihail 密码”
这是成功连接 SSH 的示例。
失败的登录尝试如下所示:
此文件还记录具有高级权限的命令
让我们打开/var/log/syslog文件
屏幕截图上突出显示的消息是关于网络接口关闭的消息。
要从长文本文件中查找信息,请使用grep工具。您可以在“ /var/log/syslog ”文件中找到从pptpd服务接收的所有消息。
grep 'pptpd' /var/log/syslog
在诊断过程中,您可以使用tail工具来显示文件的最后几行。命令“ tail -f /var/log/syslog ”可以让您实时查看日志记录。
rsyslog服务非常灵活且功能强大。它既可用于本地系统日志采集,也可用于企业级日志采集。您可以在官方网站https://www.rsyslog.com/上找到完整的文档。
Linux 中的日志轮换
日志记录持续进行,因此文件大小不断增长。轮换机制确保旧日志自动归档,并创建新文件。根据设定的规则,轮换可以按日、周、月或大小限制进行。创建新日志后,旧日志可以直接删除或通过电子邮件发送。日志轮换由logrotate工具执行。您可以在“ /etc/logrotate.conf ”文件中找到主要配置。文件内容也会在“ /etc/logrotate.d/ ”文件夹中进行处理。
新规则可以记录到主配置文件中。不过,最好在“ /etc/logrotate.d/ ”目录下创建一个单独的文件。默认情况下,该目录下有一些文件。
让我们来看一下“ /etc/logrotate.d/rsyslog ”文件,其中包含rsyslog服务日志的轮换规则。
首先,规则应该包含日志文件的路径,然后包含所有在括号中的指导方针。
- 旋转7 - 要保留的文件数量 - 7
- 每天 - 每天创建一个新文件
- 压缩 - 压缩并存档旧文件
从截图中可以看到,“ /var/log/ ”文件夹中有主日志“ syslog ”和7个归档文件,这与配置文件中的规则相符。
您可以通过执行“ man logrotate ”命令,在手册中找到关于 logrotate 的更详细描述。
收集 Linux 日志 - journald
日志采集服务systemd-journald是初始化系统systemd的一部分。Linux 日志文件以特殊格式存储在“ /var/log/journal/ ”目录下,可以使用journalctl工具打开。记录格式与rsyslog完全相同。
不带任何参数的journalctl命令会显示所有记录,但对于较大的日志文件来说并不适用。我们来看看这个工具的一些选项。
journalctl -b- 显示自上次启动以来的所有记录journalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- 显示特定时间段内的记录journalctl -u pptpd- 显示特定服务的记录journalctl -k- 显示内核消息journalctl -p err- 显示特定优先级的消息,在这种情况下显示更高优先级的消息(crit、alert、emerg)journalctl -f- 实时显示消息
为了获得更大的灵活性,您可以组合使用这些选项。让我们显示pptpd服务的所有错误。
journalctl -u pptpd -p err
如果将可执行文件的路径指定为属性,该实用程序将显示该文件发送的所有消息。例如,让我们显示自 2020 年 2 月 18 日 04:15 以来文件“ /usr/bin/sudo ”发送的所有消息。实际上,它将显示所有以更高权限执行的命令。
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
要了解日志文件占用了多少磁盘空间,请执行以下命令
journalctl --disk-usage
为了将日志文件限制为 1Gb,请执行以下命令
journalctl --vacuum-size=1G
打开二进制文件
现在我们来看看“ /var/log/ ”文件夹中的一些特殊文件,所有登录尝试都存储在这些文件中。这些文件是二进制文件,只能用特定的程序打开。
/var/log/wtmp文件包含成功登录尝试的信息。请使用 last 工具打开它。
/var/log/btmp文件包含所有登录失败的尝试。可以使用 lastb 命令以高级权限打开它。参数-n定义了从文件末尾开始显示的行数。
/var/log/lastlog文件包含每个帐户记录的最后登录操作时间。可以使用lastlog 命令打开它。