Linux 中使用 journalctl 分析日志

Systemd 是所有主要基于 Linux 的操作系统中的默认系统管理器。 它提供了一个 journald 守护进程,用于处理内核和系统服务产生的所有消息。 journald 守护程序从所有可用来源收集数据并以二进制格式存储它们,以便于动态操作。 Systemd 提供了一个名为 journalctl 的命令行工具,可用于读取和分析日志日志。 journalctl 允许我们实时分析和监控日志。

在本指南中,我们将向我们展示如何使用 journalctl 来分析 Linux 中的日志。

先决条件

  • 云平台上的全新 Ubuntu 20.04 服务器
  • 在我们的服务器上配置的 root 密码

创建 云服务器

首先,登录到我们的 云服务器。 创建一个新服务器,选择 Ubuntu 20.04 作为至少 2GB RAM 的操作系统。 通过 SSH 连接到我们的云服务器并使用页面顶部突出显示的凭据登录。

登录到 Ubuntu 20.04 服务器后,运行以下命令以使用最新的可用软件包更新基本系统。

apt-get update -y

配置日志

默认情况下,日志日志处于启用状态,并将日志数据存储在 /run/log/journal/ 中。 但是,由于系统重启后日志会自动删除,我们需要将日志配置为永久存储所有日志。

首先,创建一个目录来存储 Journal 日志:

mkdir /var/log/journal

接下来,使用以下命令设置正确的所有权:

chown -R root:systemd-journal /var/log/journal

接下来,编辑 journald 默认配置文件 /etc/systemd/journald.conf 并定义我们的新目录:

nano /etc/systemd/journald.conf

更改以下行:

Storage=persistent

保存并关闭文件,然后重新启动 systemd-journald 服务以应用更改:

systemctl restart systemd-journald

我们现在可以检查 /var/log/journal 目录:

ls -l /var/log/journal

我们应该看到以下输出:

drwxr-xr-x 2 root systemd-journal 4096 Apr 21 11:35 97bcb1f0d9aa4b339adefc87f1332d04

使用 journalctl 分析日志

要打印由 journald 守护程序收集的所有日志,请运行 journalctl 命令:

journalctl

输出:

-- Logs begin at Wed 2021-04-21 07:00:15 UTC, end at Wed 2021-04-21 11:40:12 UTC. --
Apr 21 07:00:15 ubuntu2004 kernel: Linux version 4.19.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07)
Apr 21 07:00:15 ubuntu2004 kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.19.0-9-amd64 root=UUID=d4f8c3a8-164f-4e15-a198-6124ce8719b5 ro
Apr 21 07:00:15 ubuntu2004 kernel: x86/fpu: x87 FPU will use FXSAVE
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-provided physical RAM map:
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-e820: [mem 0x0000000000100000-0x000000007ffdbfff] usable
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-e820: [mem 0x000000007ffdc000-0x000000007fffffff] reserved
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved
Apr 21 07:00:15 ubuntu2004 kernel: BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
Apr 21 07:00:15 ubuntu2004 kernel: NX (Execute Disable) protection: active

如果我们需要更详细的输出,请运行以下命令:

journalctl -o verbose

输出:

-- 日志从 UTC 2021 年 4 月 21 日星期三 07:00:15 开始,到 2021 年 4 月 21 日星期三 11:40:29 UTC 结束。  -- 2021 年 4 月 21 日星期三 07:00:15.461318 UTC [s=1baac74dce14445f9a6670f231104955;i=1;b=41c491f449fa44c288474cf9f14386c0;m=1ee776;t=5c0761d6627c6;x=4c88a9
    _SOURCE_MONOTONIC_TIMESTAMP=0
    _TRANSPORT=kernel
    PRIORITY=5
    SYSLOG_FACILITY=0
    SYSLOG_IDENTIFIER=kernel
    MESSAGE=Linux version 4.19.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.118-2+deb10u1
    _BOOT_ID=41c491f449fa44c288474cf9f14386c0
    _MACHINE_ID=97bcb1f0d9aa4b339adefc87f1332d04
    _HOSTNAME=ubuntu2004
Wed 2021-04-21 07:00:15.461357 UTC [s=1baac74dce14445f9a6670f231104955;i=2;b=41c491f449fa44c288474cf9f14386c0;m=1ee79e;t=5c0761d6627ed;x=eaf7df
    _SOURCE_MONOTONIC_TIMESTAMP=0
    _TRANSPORT=kernel
    SYSLOG_FACILITY=0
    SYSLOG_IDENTIFIER=kernel
    _BOOT_ID=41c491f449fa44c288474cf9f14386c0
    _MACHINE_ID=97bcb1f0d9aa4b339adefc87f1332d04
    _HOSTNAME=ubuntu2004
    PRIORITY=6
    MESSAGE=Command line: BOOT_IMAGE=/boot/vmlinuz-4.19.0-9-amd64 root=UUID=d4f8c3a8-164f-4e15-a198-6124ce8719b5 ro

To list all available boot logs, run the following command:

journalctl --list-boots

Output:

 0 41c491f449fa44c288474cf9f14386c0 Wed 2021-04-21 07:00:15 UTC—Wed 2021-04-21 11:41:44 UTC

To display all logs since the most recent reboot, run the following command:

journalctl -b

To display the most recent log entries, run the following command:

journalctl --lines 5

Output:

-- Logs begin at Wed 2021-04-21 07:00:15 UTC, end at Wed 2021-04-21 11:45:13 UTC. --
Apr 21 11:45:06 ubuntu2004 sshd[12088]: 来自 103.42.205.111 端口 64471 ssh2 Apr 21 11:45:08 ubuntu2004 sshd 的无效用户 teleadmin 的密码失败[12088]: 连接被无效用户telecomadmin 103.42.205.111 端口64471关闭 [preauth]
4 月 21 日 11:45:13 ubuntu2004 sshd[12092]:来自 81.70.161.162 端口 60614 Apr 21 11:45:13 ubuntu2004 sshd 的用户管理员无效[12092]: pam_unix(sshd:auth): 检查通过; 用户未知 Apr 21 11:45:13 ubuntu2004 sshd[12092]: pam_unix(sshd:auth): 认证失败;  logname=uid=0 euid=0 tty=ssh ruser=rhost=81.70.161.162

要连续打印日志,请运行以下命令:

journalctl --follow

输出:

-- Logs begin at Wed 2021-04-21 07:00:15 UTC. --
Apr 21 11:45:36 ubuntu2004 sshd[12106]: Disconnected from invalid user babi 104.131.102.169 port 54872 [preauth]
Apr 21 11:45:40 ubuntu2004 sshd[12108]: Invalid user telecomadmin from 103.108.241.111 port 60842
Apr 21 11:45:40 ubuntu2004 sshd[12108]: pam_unix(sshd:auth): check pass; user unknown
Apr 21 11:45:40 ubuntu2004 sshd[12108]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.108.241.111
Apr 21 11:45:41 ubuntu2004 sshd[12110]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=101.32.11.137  user=root
Apr 21 11:45:42 ubuntu2004 sshd[12108]: Failed password for invalid user telecomadmin from 103.108.241.111 port 60842 ssh2
Apr 21 11:45:43 ubuntu2004 sshd[12108]: Connection closed by invalid user telecomadmin 103.108.241.111 port 60842 [preauth]
Apr 21 11:45:43 ubuntu2004 sshd[12110]: Failed password for root from 101.32.11.137 port 43086 ssh2
Apr 21 11:45:45 ubuntu2004 sshd[12110]: Received disconnect from 101.32.11.137 port 43086:11: Bye Bye [preauth]
Apr 21 11:45:45 ubuntu2004 sshd[12110]: Disconnected from authenticating user root 101.32.11.137 port 43086 [preauth]

要显示特定服务相关的日志,如 SSH 和 Nginx,请运行以下命令:

journalctl -u ssh.service
journalctl -u nginx.service

要仅显示与内核相关的日志,请运行以下命令;

journalctl -k

要显示包含错误或严重的日志,请运行以下命令:

journalctl -p err -b

输出:

-- Logs begin at Wed 2021-04-21 07:00:15 UTC, end at Wed 2021-04-21 11:49:21 UTC. --
Apr 21 07:00:16 ubuntu2004 ntpd[337]: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): expired less than 115 days ago
Apr 21 07:00:16 ubuntu2004 ntpd[337]: bind(21) AF_INET6 fe80::200:2dff:fe3a:264e%2#123 flags 0x11 failed: Cannot assign requested address
Apr 21 07:00:16 ubuntu2004 ntpd[337]: unable to create socket on ens3 (5) for fe80::200:2dff:fe3a:264e%2#123

要显示昨天的所有日志,请运行以下命令:

journalctl --since yesterday

要显示从早上 6:00 开始并持续到一小时前的所有日志,请运行以下命令:

journalctl --since 06:00 --until "1 hour ago"

要显示日志使用的空间量,请运行以下命令:

journalctl --disk-usage

输出:

Archived and active journals take up 16.0M in the file system.

如果我们只想保留去年的所有日志数据,请运行以下命令:

journalctl --vacuum-time=1years

要仅显示最后几个日志,请运行以下命令:

journalctl -xe

在上面的指南中,我们学习了如何使用 journalctl 来读取和分析不同的系统日志。 我们现在可以从 识别或排除 VPS 上与系统或应用程序相关的问题。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论