linux · 2025-08-27 0

Linux 日志管理工具 rsyslog 与 journalctl

一、rsyslog 与 syslogd

rsyslog 是一个广泛使用的日志管理工具,它是 syslog 协议的一个增强版本,能够提供比传统 syslog 更高效、灵活和安全的日志处理能力。 rsyslog 允许系统将日志信息发送到本地文件、远程服务器、数据库等多种存储介质,同时支持高级功能如日志过滤、格式化和加密等。

rsyslog 目前是许多 Linux 发行版(如 Debian、Ubuntu、CentOS)中默认的日志管理工具。

syslogd 是最早的 UNIX 和 Linux 系统日志守护进程之一,它提供了一种简单而有效的方式来记录和管理系统和应用程序的日志。
rsyslog 和 syslogd 是两个用于日志管理的守护进程,尽管它们有共同的历史渊源,但在功能和特性上有显著的差异。

syslogd:适合于简单的日志记录需求,小规模系统使用。
rsyslog:功能强大,适合处理大规模、高并发的日志需求,支持复杂的日志处理规则和多种传输协议,提供高性能和高可靠性。

一个标准的 syslog 消息(以 RFC 3164 为例)格式是:

<优先级>时间戳 主机名 程序名[PID]: 消息内容。

优先级计算公式:facility 8 + severity(例如,local0.info 的优先级为 16 8 + 6 = 134)。

二、rsyslog

1.rsyslog的安装

apt install rsyslog

2.配置文件

rsyslog 的配置文件为 /etc/rsyslog.conf , 大多数日志文件都位于 /var/log/ 目录中

├── etc
│   ├── rsyslog.conf
│   └── rsyslog.d
│       ├── 20-ufw.conf
│       ├── 50-default.conf

在 /etc/rsyslog.conf 中,可开启 udp 和 tcp 端口

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

3.启动 rsyslog 服务

systemctl start rsyslog.service
systemctl enable rsyslog.service
systemctl status rsyslog.service

4.查看日志

tail -n 100 /var/log/syslog

三、journalctl

1.启动 journald 服务

systemctl start systemd-journald.service
systemctl status systemd-journald.service

2.journalctl 使用

1) 查看特定服务的日志

journalctl -u nginx.service

2) 查看指定 PID 的日志

journalctl _PID=1 -n 10

3) 查看指定标识符的日志

journalctl -t MYAPP

4) 按时间范围查询

journalctl --since "2025-08-28 00:00:00" --until "2025-08-28 02:00:00"

5) 显示最近的 10 条日志

journalctl -n 10

6) 查看错误级别的日志

journalctl -p err
journalctl -p 0
  • emerg 0 紧急
  • alert 1 警告
  • crit 2 严重
  • err 3 错误
  • warning 4 警告
  • notice 5 提醒
  • info 6 信息
  • debug 7 调试

三、发送日志

1.logger 命令发送 syslog 日志

logger 命令:

-p:指定等级
-t:指定标签
-i:记录日志程序的 pid
-n:指定远程服务器的 IP 或主机名
-P:指定端口(默认 514)
-T:只用 TCP

logger "This is an message"
logger -t MYAPP -p info -i "This is an message"
logger -n 127.0.0.1 -P 514 "This is an message"
logger -T -i -n 127.0.0.1 -P 514 -p user.info -t MYAPP "This is an message"
zxm@zxm-pc:~$ logger -t MYAPP -p info -i "This is an message"
zxm@zxm-pc:~$ tail -n 1 /var/log/syslog
2025-08-28T23:32:34.043683+08:00 zxm-pc MYAPP[5623]: This is an message
zxm@zxm-pc:~$ journalctl -n 1
8月 28 23:32:34 zxm-pc MYAPP[5623]: This is an message
zxm@zxm-pc:~$ journalctl -t MYAPP
8月 28 23:32:34 zxm-pc MYAPP[5623]: This is an message

2.nc 命令发送 syslog 日志

计算 Priority: 例如 user.info = 1*8 + 6 = 14

zxm@zxm-pc:~$ echo "<14>$(hostname) app[1234]: This is an message" | nc -w1 127.0.0.1 514
zxm@zxm-pc:~$ tail -n 1 /var/log/syslog
2025-08-27T00:57:58.958968+08:00 zxm-pc app[1234]: This is an message