Linux 日志管理与系统调优
本文将详细介绍日志管理的几个重要方面,包括如何进行日志轮替和集中存储,以及使用 journalctl
工具查看和分析日志。此外,我们还将讨论如何通过系统调优来提升Linux服务器的性能。
一、日志轮替与存储
日志轮替是日志管理中的一项重要任务,目的是防止日志文件过大占满磁盘空间。本文将详细介绍如何使用 logrotate
工具进行日志轮替,以及如何配置日志服务器集中管理日志。
1.1 日志轮替 (logrotate
)
logrotate
是一个日志管理工具,可以根据配置定期轮替、压缩、删除和发送日志文件。其主要配置文件为 /etc/logrotate.conf
,此外,还可以在 /etc/logrotate.d/
目录下创建单独的配置文件来管理不同的日志文件。
1.1.1 logrotate
配置示例
以下是 /etc/logrotate.conf
配置示例:
plaintext
weekly # 每周轮替一次
rotate 4 # 保留4个备份
create # 创建新的日志文件
dateext # 使用日期作为备份文件的后缀
minsize 1M # 日志文件最小达到1M时才进行轮替
size 10M # 日志文件最大达到10M时进行轮替
include /etc/logrotate.d # 包含目录下的其他配置文件
1.1.2 自定义日志轮替
可以为特定的日志文件创建单独的配置文件,例如 /etc/logrotate.d/myapp
:
plaintext
/var/log/myapp.log {
weekly
rotate 5
compress
missingok
notifempty
create 0640 root utmp
sharedscripts
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
1.1.3 强制执行日志轮替
在修改 logrotate
配置文件后,可以使用以下命令强制执行日志轮替:
bash
logrotate -fv /etc/logrotate.conf
1.2 集中管理日志
将日志文件集中存储在日志服务器上有助于统一管理和分析。以下是设置日志服务器和客户端的步骤。
1.2.1 服务端配置
编辑 /etc/rsyslog.conf
文件,取消第19、20行的注释,允许服务器使用 TCP 514 端口接收日志:
plaintext
19 $ModLoad imtcp
20 $InputTCPServerRun 514
然后重启 rsyslog
服务:
bash
systemctl restart rsyslog
1.2.2 客户端配置
编辑客户端的 /etc/rsyslog.conf
文件,添加如下内容,将日志发送到日志服务器:
plaintext
*.* @@192.168.10.19:514
然后重启 rsyslog
服务:
bash
systemctl restart rsyslog
1.2.3 测试日志传输
在客户端上创建新用户或写入日志,然后在服务器端查看相应日志文件:
bash
useradd testuser
logger "This is a test log message from client"
在服务器端检查 /var/log/secure
和 /var/log/messages
文件,确认是否接收到日志。
二、日志查看与分析
使用 journalctl
可以查看和分析系统日志。以下是详细介绍 journalctl
的使用方法。
2.1 journalctl
命令概述
journalctl
是 Systemd 提供的一个强大的日志查看工具,可以通过多种选项过滤和显示日志。
2.1.1 常用选项
-l, --full
:显示完整的字段内容。-a, --all
:完整显示所有字段内容,即使其中包含不可打印字符或者字段内容超长。-f, --follow
:只显示最新的日志项,并且不断显示新生成的日志项。-e, --pager-end
:在分页工具内立即跳转到日志的尾部。-n, --lines=
:限制显示最新的日志行数,默认值为10行。-r, --reverse
:反转日志行的输出顺序。-o, --output=
:控制日志的输出格式,如short
,json
,verbose
等。--utc
:以世界统一时间(UTC)表示时间。-x, --catalog
:在日志的输出中增加一些解释性的短文本。-m, --merge
:混合显示包括远程日志在内的所有可见日志。-b [ID][±offset], --boot=[ID][±offset]
:显示特定于某次启动的日志。-k, --dmesg
:仅显示内核日志。-t, --identifier=SYSLOG_IDENTIFIER
:仅显示 syslog 标识符为 SYSLOG_IDENTIFIER 的日志项。-u, --unit=UNIT|PATTERN
:仅显示属于特定单元的日志。
2.1.2 输出格式选项
short
:默认值,输出格式与传统的 syslog 文件格式相似。json
:将日志项按照 JSON 数据结构格式化,每条日志一行。json-pretty
:将日志项按照 JSON 数据结构格式化,每个字段一行,便于阅读。verbose
:以结构化的格式显示每条日志的所有字段。
2.2 日志查看实战案例
2.2.1 查看所有日志
bash
journalctl
2.2.2 查看内核日志
bash
journalctl -k
2.2.3 查看系统本次启动的日志
bash
journalctl -b
2.2.4 查看指定时间的日志
bash
journalctl --since="2023-07-31 09:00:00" --until="2023-07-31 10:00:00"
2.2.5 显示尾部的最新日志
bash
journalctl -n 20
2.2.6 实时滚动显示最新日志
bash
journalctl -f
2.2.7 查看指定服务的日志
bash
journalctl -u nginx.service
2.2.8 查看指定用户的日志
bash
journalctl _UID=1000 --since today
2.2.9 查看指定优先级的日志
bash
journalctl -p err -b
2.2.10 以 JSON 格式输出日志
bash
journalctl -b -u nginx.service -o json-pretty
2.2.11 显示日志占据的硬盘空间
bash
journalctl --disk-usage
2.2.12 指定日志文件占据的最大空间
bash
journalctl --vacuum-size=1G
2.2.13 指定日志文件保存多久
bash
journalctl --vacuum-time=1years