Linux Admin日志管理
Systemd 改变了 CentOS Linux 系统日志的管理方式。与其使用
tail 或
grep 等工具,不如将系统上的每个守护进程都放置到单独的位置作为分类和过滤日志条目的主要方式,
journald 为分析系统日志带来了单点管理。
systemd 日志背后的主要组件是:journal、jounralctl 和 journald.conf
journald 是主要的日志守护进程,通过编辑
journald.conf 进行配置,而
journalctl 用于分析
记录的事件日记本。
journald 记录的事件包括-内核事件、用户进程和守护程序服务。
设置正确的系统时区
在使用
journalctl 之前,我们需要确保我们的系统时间设置为正确的时间。为此,我们要使用
timedatectl。
让我们检查当前系统时间。
[root@centos rdc]# timedatectl status
Local time: Mon 2017-03-20 00:14:49 MDT
Universal time: Mon 2017-03-20 06:14:49 UTC
RTC time: Mon 2017-03-20 06:14:49
Time zone: America/Denver (MDT,-0600)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2017-03-12 01:59:59 MST
Sun 2017-03-12 03:00:00 MDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2017-11-05 01:59:59 MDT
Sun 2017-11-05 01:00:00 MST
[root@centos rdc]#
目前,系统对本地时区是正确的。如果您的系统不是,让我们设置正确的时区。更改设置后,CentOS 会自动计算与当前时区的时区偏移量,立即调整系统时钟。
让我们用
timedatectl 列出所有时区-
[root@centos rdc]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
这是来自
timedatectl list-timezones 的竞争输出。要查找特定的本地时区,可以使用 grep 命令-
[root@centos rdc]# timedatectl list-timezones | grep-i "america/New_York"
America/New_York
[root@centos rdc]#
CentOS 使用的标签通常是 Country/Region,带有下划线而不是空格(New_York 与"New York")。
现在让我们设置我们的时区-
[root@centos rdc]# timedatectl set-timezone "America/New_York"
[root@centos rdc]# date
Mon Mar 20 02:28:44 EDT 2017
[root@centos rdc]#
您的系统时钟应该会自动调整时间。
使用 journalctl 分析日志
使用
journalctl 时的常用命令行Switch-
Switch |
Action |
-k |
仅列出内核消息 |
-u |
按特定单位(httpd、sshd 等...)列出 |
-b |
启动标签偏移 |
-o |
记录输出格式 |
-p |
按日志类型(名称或编号)过滤 |
-F |
字段名或字段名值 |
--utc |
UTC 偏移量时间 |
--since |
按时间范围过滤 |
检查启动日志
首先,我们将检查和配置 CentOS Linux 中的启动日志。您会注意到的第一件事是,默认情况下,CentOS 不会存储在重新启动后持续存在的引导日志记录。
要检查每个重启实例的启动日志,我们可以发出以下命令-
[root@centos rdc]# journalctl--list-boots
-4 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-3 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-2 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-1 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
0 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:07:36 MDT
[root@centos rdc]#
重新启动系统后,我们可以看到另一个条目。
[root@centos rdc]# journalctl--list-boots
-5 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-4 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-3 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-2 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
-1 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:09:57 MDT
0 aa6aaf0f0f0d4fcf924e17849593d972 Mon 2017-03-20 01:10:07 MDT—Mon 2017-03-20 01:12:44 MDT
[root@centos rdc]#
现在,让我们检查上次启动日志记录实例-
root@centos rdc]# journalctl-b-5
--Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Mon 2017-03-20 01:20:27 MDT.--
Mar 19 22:01:57 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M
(max allowed 108.4M
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuset
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpu
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
Mar 19 22:01:57 localhost.localdomain kernel: Linux version 3.10.0514.6.2.el7.x86_64
(builder@kbuilder.dev.
Mar 19 22:01:57 localhost.localdomain kernel: Command line:
BOOT_IMAGE=/vmlinuz-3.10.0-514.6.2.el7.x86_64 ro
Mar 19 22:01:57 localhost.localdomain kernel: Disabled fast string operations
Mar 19 22:01:57 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
以上是我们上次启动的压缩输出。我们还可以参考几小时、几天、几周、几个月甚至几年的引导日志。但是,默认情况下,CentOS 不会存储持久启动日志。要启用持久存储启动日志,我们需要进行一些配置更改-
为启动日志制作中央存储点
为新的日志文件夹授予适当的权限
为持久日志配置 journald.conf
为持久启动日志配置启动位置
journald 想要存储持久启动日志的初始位置是
/var/log/journal。由于默认情况下不存在,让我们创建它-
[root@centos rdc]# mkdir /var/log/journal
现在,让我们给目录适当的权限
journald 守护进程访问-
systemd-tmpfiles--create--prefix /var/log/journal
最后,让我们告诉
journald 它应该存储持久的启动日志。在
vim 或您喜欢的文本编辑器中,打开
/etc/systemd/jounrald.conf"。
# See journald.conf(5) for details.
[Journal]=Storage=peristent
我们关心的是,
Storage=。首先删除注释
#,然后更改为
Storage = persistent,如上所示。保存并重启你的 CentOS 系统,注意在运行
journalctl list-boots 时应该有多个条目。
注意-像 VPS 提供商那样不断变化的
machine-id 会导致
journald 无法存储持久启动日志。对于这种情况,有许多解决方法。最好仔细阅读发布到 CentOS 管理员论坛的当前修复程序,而不是遵循那些找到合理 VPS 解决方法的人的可信建议。
要检查特定的启动日志,我们只需使用
journald--list-boots 和
-b Switch的偏移量来获取每个偏移量。所以要检查我们将使用的第二个引导日志-
没有指定启动日志偏移的
-b 的默认值将始终是上次重启后的当前启动日志。
按日志类型分析日志
来自
journald 的事件被编号并分为 7 种不同的类型-
0-emerg :: System is unusable
1-alert :: Action must be taken immediatly
2-crit :: Action is advised to be taken immediatly
3-err :: Error effecting functionality of application
4-warning :: Usually means a common issue that can affect security or usilbity
5-info :: logged informtation for common operations
6-debug :: usually disabled by default to troubleshoot functionality
因此,如果我们想查看所有警告,可以通过
journalctl 发出以下命令-
[root@centos rdc]# journalctl-p 4
--Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Wed 2017-03-22 22:33:42 MDT.--
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: RSDP 00000000000f6a10 00024
(v02 PTLTD )
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: XSDT 0000000095eea65b 0005C
(v01 INTEL 440BX 06040000 VMW 01
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACP 0000000095efee73 000F4
(v04 INTEL 440BX 06040000 PTL 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: DSDT 0000000095eec749 1272A
(v01 PTLTD Custom 06040000 MSFT 03
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACS 0000000095efffc0 00040
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: BOOT 0000000095eec721 00028
(v01 PTLTD $SBFTBL$ 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: APIC 0000000095eeb8bd 00742
(v01 PTLTD ? APIC 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: MCFG 0000000095eeb881 0003C
(v01 PTLTD $PCITBL$ 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: SRAT 0000000095eea757 008A8
(v02 VMWARE MEMPLUG 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: HPET 0000000095eea71f 00038
(v01 VMWARE VMW HPET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: WAET 0000000095eea6f7 00028
(v01 VMWARE VMW WAET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: Zone ranges:
Mar 19 22:01:57 localhost.localdomain kernel: DMA [mem 0x000010000x00ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: DMA32 [mem 0x010000000xffffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Normal empty
Mar 19 22:01:57 localhost.localdomain kernel: Movable zone start for each node
Mar 19 22:01:57 localhost.localdomain kernel: Early memory node ranges
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x000010000x0009dfff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x001000000x95edffff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x95f000000x95ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Built 1 zonelists in Node order,
mobility grouping on. Total pages: 60
Mar 19 22:01:57 localhost.localdomain kernel: Policy zone: DMA32
Mar 19 22:01:57 localhost.localdomain kernel: ENERGY_PERF_BIAS: Set to
'normal', was 'performance'
上面显示了系统过去 4 天的所有警告。
使用 systemd 查看和细读日志的新方法确实需要很少的练习和研究才能熟悉。但是,由于输出格式不同,并且特别注意使所有打包的守护程序日志通用,因此值得拥抱。
journald 与传统的日志分析方法相比,提供了极大的灵活性和效率。