十五、系统日志管理

wangzhaoyang 发布于 7 天前 20 次阅读 网络工程中的Linux系统 无~ 2989 字


一、日志管理服务

  • 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:进程的可执行文件路径。

六、设置永久日志保存

  1. 创建日志目录:
   mkdir /var/log/journal
  1. 修改配置文件: 编辑 /etc/systemd/journald.conf,将 Storage 参数设置为 persistent。
    示例:
   Storage=persistent
  1. 重启服务:
   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. 日志分析工具

  • 学习使用日志分析工具,如 logwatchgraylog,来分析和可视化日志数据。

e. 安全性和合规性

  • 考虑日志记录的安全性和合规性要求,确保敏感信息得到适当处理。

通过这些笔记,你可以更好地理解和使用 Linux 系统中的日志记录功能。希望这些内容对你有所帮助!

基于 UDP 和 TCP 的日志转发配置笔记

服务端配置

步骤 1:打开服务端 TCP 和 UDP 端口

  1. 编辑 /etc/rsyslog.conf 文件以配置 UDP 和 TCP 输入模块。
   vim /etc/rsyslog.conf
  1. 加载 UDP 模块并设置端口为 514。
   module(load="imudp") # 只需执行一次
   input(type="imudp" port="514")
  1. 加载 TCP 模块并设置端口为 514。
   module(load="imtcp") # 只需执行一次
   input(type="imtcp" port="514")

步骤 2:重启服务以应用配置

  1. 重启 rsyslog 服务以使配置生效。
   systemctl restart rsyslog.service

客户端配置

步骤 1:配置日志转发

  1. 编辑 /etc/rsyslog.conf 文件以配置日志转发。
   vim /etc/rsyslog.conf
  1. 设置日志级别为 info 及以上,并指定服务端 IP 地址进行日志转发。
  • 使用 UDP 转发:在地址前加 @ 符号。
  • 使用 TCP 转发:在地址前加 @@ 符号。
   *. info    @<服务端IP地址>  # 使用 UDP 转发
   *. info    @@<服务端IP地址> # 使用 TCP 转发

步骤 2:重启服务

  1. 重启 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 支持在轮转日志之后执行自定义脚本,如重启服务、清理缓存等。可以在配置文件中使用 postrotateendscript 来指定这些操作。

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 简介

journalctlsystemd 提供的日志管理工具,用于查看和管理由 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 可以指定日志的输出格式,如 shortshort-isoshort-preciseverbose 等。

8. 控制输出

  • 使用 --no-pager 选项将结果重定向到标准输出,而不是在分页器中显示:
  journalctl --no-pager