Rsyslog 详解:Linux 系统日志的底层引擎

Rsyslog 中文详解:facility 与 priority 概念、/etc/rsyslog.conf 选择器与动作、模板(template)自定义格式、imfile 模块采集文件、omfwd 转发(TCP/UDP/RELP)、队列与高可靠配置,以及观测云 DataKit syslog 接入方案。

最佳实践
Rsyslog 详解:Linux 系统日志的底层引擎技术指南封面

Rsyslog 是几乎所有 Linux 发行版的默认 syslog 守护进程——你系统里 /var/log 下的大部分文件都流经它。它既是系统日志的底层引擎,也是性能强悍的通用日志路由器。本文讲清其核心概念与配置,为系统级日志治理打底。

核心要点速览

  • facility × priority 是 syslog 的分类体系:facility 表来源(auth/kern/mail/local0…),priority 表严重级别(debug…emerg)。
  • 选择器 + 动作 = 路由规则auth.* /var/log/auth.log 一行就是一条完整路由。
  • imfile 模块让 Rsyslog 能采任意文件——从系统日志引擎变身通用采集器。
  • 观测云接入:Rsyslog 可直接把日志转发到 DataKit 的 syslog 输入,无缝入云。

1. facility 与 priority:syslog 的二维分类

Facility 来源 Priority 级别
auth/authpriv 认证相关 emerg 系统不可用
kern 内核 alert/crit 严重
mail 邮件系统 err 错误
daemon 守护进程 warning 警告
user 用户进程 notice 注意
local0-7 自定义(应用用) info / debug 信息/调试

应用对接 syslog 时用 logger -p local0.info "msg" 或在代码中用 openlog 指定 facility——local0-7 就是为应用预留的自定义通道。

2. 配置文件解剖

# /etc/rsyslog.conf 及 /etc/rsyslog.d/*.conf

# 选择器 动作
auth,authpriv.*            /var/log/auth.log        # 认证日志
*.err                      /var/log/errors.log       # 所有 err 及以上
mail.*                     -/var/log/mail.log        # - 表示异步写入(不每条刷盘)
kern.*                     @@log-center.example.com:514   # @@ TCP 转发,@ UDP

现代格式(RainerScript)表达力更强:

if ($programname == 'nginx' and $syslogseverity <= 4) then /var/log/nginx-error.log
& stop

stop 阻止继续匹配后续规则——避免一条日志进多个文件。

3. 模板:自定义输出格式

template(name="JsonFormat" type="list") {
  constant(value="{\"time\":\"")      property(name="timereported" dateFormat="rfc3339")
  constant(value="\",\"host\":\"")    property(name="hostname")
  constant(value="\",\"msg\":\"")     property(name="msg" format="json")
  constant(value="\"}\n")
}
action(type="omfile" file="/var/log/app.json" template="JsonFormat")

模板把日志属性格式化成任意输出——包括直接输出 JSON(平台采集友好)。

4. imfile:采集任意文件

module(load="imfile")
input(type="imfile"
      File="/var/log/myapp/*.log"
      Tag="myapp:"
      Severity="info"
      Facility="local0")

应用日志文件被读入 syslog 流,之后可以走本机落盘、转发等一切规则——老系统里 imfile + 转发就是最早的"日志采集器"

5. 队列与高可靠

action(type="omfwd" Target="log-center" Port="514" Protocol="tcp"
       queue.type="LinkedList" queue.filename="fwd" queue.saveOnShutdown="on"
       action.resumeRetryCount="-1")    # 无限重试

动作级队列 + 磁盘辅助 + 无限重试:中心不可达时本地排队,恢复后补发。RELP 协议(omrelp)进一步提供传输层确认,比裸 TCP 更可靠。

观测云落地:Rsyslog 接入

  1. 转发到 DataKit:DataKit 开启 syslog 输入(TCP/UDP 监听),Rsyslog 配置 *.* @@datakit-host:514(或按 facility 过滤后转发),系统日志即刻入云;
  2. 替代方案:主机直接装 DataKit 采集 /var/log 文件——功能等价且多了 Pipeline 解析能力,新环境推荐后者
  3. 解析:Pipeline 解析 syslog 头部(时间/host/facility/severity),severity 映射标准 status
  4. 告警:监控器对 authpriv 失败登录暴破、内核 OOM 等模式告警,通知钉钉/企业微信/飞书。

常见问题(FAQ)

Rsyslog 和 syslog-ng、journald 什么关系?

三者都是 syslog 实现/体系:rsyslog 是多数发行版默认;syslog-ng 是另一实现;systemd 的 journald 管二进制日志并默认转发给 rsyslog(或并存)。现代系统常是 journald + rsyslog 组合。

转发用 UDP、TCP 还是 RELP?

可靠性排序:RELP > TCP > UDP。机房内 UDP 轻快但可丢;跨网络一律 TCP 起步,关键日志上 RELP 或文件采集方案。

为什么我的 imfile 重复采集了?

状态文件(StateFile)丢失或路径变了。imfile 靠 state 文件记录位点,确保其目录持久化,且通配符匹配的文件路径稳定。

Rsyslog 性能怎么样?

非常强——C 实现、百万 EPS 级别的成熟案例不少。它的问题不在性能而在配置生态老化;新需求优先评估现代采集器或 DataKit。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台