一、日志管理服务
- systemd-journald
- 由 systemd 提供的日志管理服务。
- 临时日志:默认仅记录本次启动的日志,存储路径为:
/run/log/systemd/id/system.journal
。 - 永久日志:需要手动设置,详见后续操作。
- rsyslog
- 系统的日志服务,支持永久保存。
- 各类日志通过排序方式写入到不同的文件中,方便管理。
二、常用日志文件
/var/log/messages
记录大多数系统日志消息,包括服务信息、系统报错信息等。/var/log/secure
与安全性和身份验证相关的日志。/var/log/cron
与定时任务执行相关的日志。/var/log/maillog
与系统邮件服务相关的日志。/var/log/boot.log
与系统启动相关的日志。
三、日志在 rsyslog 中的组成
- 格式:
类型.级别 具体日志文件
- 示例:
boot.info /var/log/boot.log
mail.info /var/log/maillog
四、日志轮循
- logrotate 工具:
自动轮循日志文件,防止日志文件占用过多系统空间。
五、journalctl 常用参数
_PID
:进程的 PID。_UID
:运行该进程的用户 ID。_SYSTEMD_UNIT
:启动该进程的 systemd 单元名称。_COMM
:指定命令的名称。_EXE
:进程的可执行文件路径。
六、设置永久日志保存
- 创建日志目录:
mkdir /var/log/journal
- 修改配置文件: 编辑 /etc/systemd/journald.conf,将 Storage 参数设置为 persistent。
示例:
Storage=persistent
- 重启服务:
systemctl restart systemd-journald
七. 定义日志格式
a. 编辑 rsyslog 配置文件
- 使用
vim
命令编辑/etc/rsyslog.conf
文件。
vim /etc/rsyslog.conf
b. 定义日志格式
- 在
/etc/rsyslog.conf
文件中定义日志格式,例如:
mail.info /var/log/test.log
这行配置表示将 mail.info
级别的日志信息记录到 /var/log/test.log
文件中。
2. 手动发送日志
a. 使用 logger
命令
logger
是一个用于发送日志消息到系统日志守护进程的工具。
b. 指定优先级和类型
- 使用
-P
选项指定优先级,例如:
logger -P mail.info
这表示发送到 mail.info
优先级的日志。
- 使用
-t
选项指定日志类型,例如:
logger -t mail
这表示发送到 mail
类型的日志。
c. 记录进程的 PID
- 使用
-i
选项记录进程的 PID,例如:
logger -i
这表示在日志消息中包含发送进程的 PID。
d. 发送具体日志消息
- 使用
-p
选项指定优先级和类型,例如:
logger -p mail.info -t mail "hello rhce"
这表示发送一条内容为 "hello rhce" 的日志消息,优先级为 mail.info
,类型为 mail
。
3. 扩展内容
a. 理解日志级别
- 了解不同的日志级别,如
debug
,info
,notice
,warning
,err
,crit
,alert
,emerg
等。
b. 配置 rsyslog
- 学习如何配置
rsyslog
以满足不同的日志记录需求,包括远程日志记录、日志轮转等。
c. 使用 syslog-ng
- 了解
syslog-ng
作为另一种日志管理工具的使用和配置。
d. 日志分析工具
- 学习使用日志分析工具,如
logwatch
或graylog
,来分析和可视化日志数据。
e. 安全性和合规性
- 考虑日志记录的安全性和合规性要求,确保敏感信息得到适当处理。
通过这些笔记,你可以更好地理解和使用 Linux 系统中的日志记录功能。希望这些内容对你有所帮助!
基于 UDP 和 TCP 的日志转发配置笔记
服务端配置
步骤 1:打开服务端 TCP 和 UDP 端口
- 编辑
/etc/rsyslog.conf
文件以配置 UDP 和 TCP 输入模块。
vim /etc/rsyslog.conf
- 加载 UDP 模块并设置端口为 514。
module(load="imudp") # 只需执行一次
input(type="imudp" port="514")
- 加载 TCP 模块并设置端口为 514。
module(load="imtcp") # 只需执行一次
input(type="imtcp" port="514")
步骤 2:重启服务以应用配置
- 重启
rsyslog
服务以使配置生效。
systemctl restart rsyslog.service
客户端配置
步骤 1:配置日志转发
- 编辑
/etc/rsyslog.conf
文件以配置日志转发。
vim /etc/rsyslog.conf
- 设置日志级别为
info
及以上,并指定服务端 IP 地址进行日志转发。
- 使用 UDP 转发:在地址前加
@
符号。 - 使用 TCP 转发:在地址前加
@@
符号。
*. info @<服务端IP地址> # 使用 UDP 转发
*. info @@<服务端IP地址> # 使用 TCP 转发
步骤 2:重启服务
- 重启
rsyslog
服务以应用配置。
systemctl restart rsyslog
总结
- 服务端需要同时打开 TCP 和 UDP 端口,并在
rsyslog.conf
中配置相应的输入模块。 - 客户端需要在
rsyslog.conf
中指定日志级别和转发目标(服务端 IP 地址),并使用@
或@@
符号来区分使用 UDP 或 TCP 协议进行转发。 - 每次修改配置文件后,都需要重启
rsyslog
服务以使更改生效。
Logrotate 日志轮循管理工具
1. Logrotate 简介
logrotate
是一个 Linux 系统中用于自动化管理日志文件的工具,它可以定期地将日志文件备份、压缩并删除旧日志文件,从而有效控制日志文件大小,节省磁盘空间,并提升系统的可维护性和安全性。
2. 主要功能
- 日志轮转:按照设定的规则定期对日志文件进行轮转,例如每天、每周或每月。轮转时,原有日志文件会被重命名(通常添加时间戳),并创建新的日志文件接收新的日志记录。
- 压缩日志:对轮转后的旧日志文件进行压缩,以节省磁盘空间,常见的压缩格式有 gzip 等。
- 删除旧日志:根据设定的保留策略,自动删除过旧的日志文件,防止磁盘空间被过多历史日志占用。
3. 配置文件
- 主配置文件:
/etc/logrotate.conf
,包含全局的 logrotate 配置选项,如默认的日志文件位置、轮换周期等。 - 应用配置文件:
/etc/logrotate.d/
,该目录里的所有文件都会被主动读入/etc/logrotate.conf
中执行,用于特定服务或日志文件的轮换策略。
4. 配置参数及说明
daily|weekly|monthly
:设置日志轮转的周期。size
:当日志文件达到指定大小时才转储,缺省单位是字节,可以设定 k(小写)或者 M(大写)。rotate
:指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份。compress
:通过 gzip 压缩转储后的日志。nocompress
:不压缩转储后的日志。dateext
:在转储后的日志文件后面加上日期做后缀。dateformat
:指定日期格式,默认是-%Y%m%d
,最多也只能加上秒,如:-%Y%m%d%s
。copytruncate
:用于还在打开中的日志文件,把当前日志备份并截断。nocopytruncate
:备份日志文件不截断。nocreate
:不建立新的日志文件。
5. 帮助信息
参考 logrotate
的 man 手册页(man logrotate
)以获取更多配置细节和命令行选项。
6. 手动运行和状态检查
- 可以使用
logrotate -f /etc/logrotate.d/yourlogfile
强制运行日志轮转。 logrotate
的状态文件通常位于/var/lib/logrotate/status
,可以查看这个文件来检查上次轮转的时间和状态。
7. 配置脚本执行
logrotate
支持在轮转日志之后执行自定义脚本,如重启服务、清理缓存等。可以在配置文件中使用 postrotate
和 endscript
来指定这些操作。
8. 测试配置
在应用新的 logrotate
配置之前,你可以使用以下命令来测试配置文件的语法是否正确:
logrotate -d /etc/logrotate.conf
-d
参数会让 logrotate
以调试模式运行,打印出将要执行的操作,而不实际执行它们。这可以帮助你验证配置文件是否按预期工作,而不会影响到实际的日志文件。
示例配置
示例 1:基本日志轮转配置
这是一个基本的 logrotate
配置,用于每天轮转日志文件,并保留 7 天的日志备份。
# /etc/logrotate.d/syslog
/var/log/syslog {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
示例 2:基于大小的日志轮转
这个配置示例展示了如何基于日志文件的大小来轮转日志,而不是基于时间。当日志文件达到 10MB 时,会自动轮转。
# /etc/logrotate.d/apache
/var/log/apache2/access.log {
size 10M
rotate 5
compress
missingok
notifempty
create 640 root adm
}
示例 3:带有自定义脚本的日志轮转
这个配置示例展示了如何在轮转日志后执行自定义脚本,例如重启 Apache 服务。
# /etc/logrotate.d/apache
/var/log/apache2/other_vhosts_access.log {
weekly
rotate 8
compress
missingok
notifempty
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
示例 4:不压缩的日志轮转
这个配置示例展示了如何配置 logrotate
以不压缩轮转后的日志文件。
# /etc/logrotate.d/uncompressed
/var/log/uncompressed.log {
monthly
rotate 6
nocompress
missingok
notifempty
create 640 root adm
}
示例 5:带有日期后缀的日志轮转
这个配置示例展示了如何为轮转后的日志文件添加日期后缀。
# /etc/logrotate.d/dateext
/var/log/dateext.log {
daily
rotate 30
dateext
dateformat -%Y%m%d
compress
missingok
notifempty
create 640 root adm
}
示例 6:不创建新日志文件的轮转
这个配置示例展示了如何在轮转日志后不创建新的日志文件。
# /etc/logrotate.d/nocreate
/var/log/nocreate.log {
weekly
rotate 4
nocreate
compress
missingok
notifempty
}
Journalctl 日志管理工具
1. Journalctl 简介
journalctl
是 systemd
提供的日志管理工具,用于查看和管理由 systemd-journald
守护进程收集的日志。与传统的 Syslog 相比,journalctl
将日志存储在二进制格式的日志文件中,并提供了更强大的查询和过滤功能。
2. 查看 /var/log/messages
在 systemd
系统中,/var/log/messages
通常被 journalctl
所取代,但可以通过以下命令查看:
journalctl -k
或者
journalctl --dmesg
这两个命令都会显示内核和系统日志信息,类似于传统的 messages
文件。
3. Journalctl 常用选项
-f
:实时跟踪日志输出,类似于tail -f
。-n
:查询最后的指定日志记录,默认是十条,可以指定数字来显示更多或更少的日志条目。-p
:按优先级过滤日志,例如-p err
显示错误级别或更高级别的日志条目。--since
:显示指定日期或以后的日志条目,如--since "1 hour ago"
或--since "2021-07-01"
。--until
:显示指定日期或之前的日志条目。-u
:查看特定服务的日志,如-u nginx.service
。-b
:查看当前系统启动的日志。-k
:只看内核日志(不显示应用日志)。
4. 实时查看和跟踪日志
- 实时查看新添加的日志条目:
journalctl -f
- 实时查看特定服务的日志条目:
journalctl -f -u <服务名>
例如,实时查看 nginx
服务的日志:
journalctl -f -u nginx.service
5. 查看指定数量的日志记录
- 查看最后的 20 条日志记录:
journalctl -n 20
6. 查看特定时间范围内的日志
- 查看从昨天开始到现在的日志:
journalctl --since yesterday
- 查看从早上 9:00 到一小时前的日志:
journalctl --since 09:00 --until "1 hour ago"
7. 格式化输出结果
- 使用
-o
或--output
可以指定日志的输出格式,如short
、short-iso
、short-precise
、verbose
等。
8. 控制输出
- 使用
--no-pager
选项将结果重定向到标准输出,而不是在分页器中显示:
journalctl --no-pager
Comments NOTHING