- Linux 管理教程
- 家
- CentOS概述
- CentOS Linux 基本命令
- 文件/文件夹管理
- 用户管理
- 配额管理
- Systemd 服务启动和停止
- 使用 systemctl 进行资源管理
- 使用 crgroups 进行资源管理
- 流程管理
- 防火墙设置
- 在 CentOS Linux 中配置 PHP
- 在 CentOS Linux 上设置 Python
- 在 CentOS Linux 上配置 Ruby
- 为 CentOS Linux 设置 Perl
- 安装和配置开放 LDAP
- 创建 SSL 证书
- 安装 Apache Web 服务器 CentOS 7
- CentOS 7 上的 MySQL 设置
- 设置 Postfix MTA 和 IMAP/POP3
- 安装匿名 FTP
- 远程管理
- CentOS中的流量监控
- 日志管理
- 备份与恢复
- 系统升级
- 外壳脚本
- 包管理
- 卷管理
- Linux 管理有用资源
- Linux 管理员 - 快速指南
- Linux 管理员 - 有用的资源
- Linux 管理员 - 讨论
Linux 管理员 - 日志管理
Systemd 改变了 CentOS Linux 的系统日志管理方式。系统上的每个守护进程都将日志放置到单独的位置,而不是使用tail或grep等工具作为排序和过滤日志条目的主要方式,journald引入了单点管理来分析系统日志。
systemd日志记录背后的主要组件是:journal、jounralctl 和journald.conf
journald是主要的日志守护进程,通过编辑journald.conf进行配置,而journalctl用于分析journald记录的事件。
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 使用的标签通常是带有下划线而不是空格的国家/地区(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时常见的命令行开关-
转变 | 行动 |
---|---|
-k | 仅列出内核消息 |
-u | 按特定单位列出(httpd、sshd 等...) |
-b | 启动标签偏移量 |
-o | 记录输出格式 |
-p | 按日志类型(名称或编号)过滤 |
-F | 字段名或字段名值 |
- 世界标准时间 | UTC 时间偏移量 |
- 自从 | 按时间范围过滤 |
检查启动日志
首先,我们将检查和配置 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 = permanent,如上所示。保存并重新启动 CentOS 系统,并注意运行journalctl list-boots时应该有多个条目。
注意-来自 VPS 提供商的不断变化的机器 ID可能会导致日志无法存储持久启动日志。对于这种情况有很多解决方法。最好仔细阅读 CentOS 管理论坛上发布的最新修复程序,而不是遵循那些找到了可行的 VPS 解决方法的人的可信建议。
要检查特定的引导日志,我们只需使用journald --list-boots和-b开关的偏移量来获取每个偏移量。因此,要检查第二个启动日志,我们将使用 -
journalctl -b -2
未指定引导日志偏移量的-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提供了极大的灵活性和效率。