rsyslog精选详解:从入门到生产环境实践

2026-10-26 来源: 点击量

rsyslog 精选详解:从入门到生产环境实践

rsyslog 是 Linux 平台主流高性能日志采集转发服务,是 syslog 标准的增强实现;替代老式 syslogd,支持多输入、过滤、模板、转发、本地落盘、协议转发(UDP/TCP/TLS/RELP)、队列缓冲,广泛用于服务器、中间件、集群统一日志归集,常搭配 ELK、Loki、Graylog。

适用场景:服务器系统日志、应用日志、容器宿主机日志转发;适合运维、后端、大数据面试、线上日志排错。rsyslog精选详解:从入门到生产环境实践

一、基础认知

1. syslog 标准基础

syslog 消息结构:Facility(设施)+ Severity(级别) Facility:消息来源,kern内核、user用户程序、daemon后台服务、auth认证、cron定时任务、local0~local7自定义应用 Severity(由高到低):emerg(0)、alert(1)、crit(2)、err(3)、warn(4)、notice(5)、info(6)、debug(7)

rsyslog 兼容 RFC3164(老格式)、RFC5424(新结构化 syslog,带时间戳、msgid、structured-data)。

2. rsyslog 核心能力对比

老式 syslogd:只本地写文件,UDP 接收,无缓冲、无模板、性能弱 rsyslog:

多输入源:系统内核消息、本地 socket、UDP、TCP、TLS、文件读取(imfile 模块)

过滤:facility+severity、正则、字段匹配

模板:自定义日志输出格式(json、标准 syslog、自定义分隔)

输出:本地文件、转发远端 rsyslog、MySQL/PostgreSQL、omkafka 推 kafka、omelasticsearch 写 ES

内存 / 磁盘队列:防止远端服务挂掉时日志丢失,生产重中之重

多线程、负载转发、日志限流

3. rsyslog 组件(模块化设计)

rsyslog 采用模块驱动:module(load="xxx")

imuxsock:读取系统 unix socket(系统默认,接收本地系统、应用 syslog)

imklog:读取内核日志(dmesg)

imudp:UDP 接收端口

imtcp:TCP 接收端口

imfile:读取文本文件(业务最常用,采集应用日志文件)

omfwd:转发到远端 rsyslog

omkafka:输出到 kafka

omelasticsearch:输出 ES

mmjsonparse:解析 json 格式日志(非常高频)

配置文件主入口:/etc/rsyslog.conf;子配置目录:/etc/rsyslog.d/*.conf,推荐业务配置全部放这里,不改动主文件。

二、基础配置语法(RainerScript,新版 rsyslog 默认语法)

旧版 facility.severity action 是传统语法,新项目优先 RainerScript,可读性更强。

# 加载模块

module(load="imuxsock")

module(load="imklog")

# 简单过滤+动作

if $programname == 'sshd' then {

action(type="omfile" file="/var/log/sshd.log")

}

# 丢弃debug日志

*.debug stop

内置常用变量(模板、过滤都能用)

$msg:日志正文

$fromhost-ip:来源 IP

$programname:程序名

$syslogseverity-text:日志级别文本

$syslogfacility-text:设施名称

$timegenerated:日志生成时间

三、模板 template(生产必用)

template 用来定义输出格式,比如输出 JSON,方便下游 ELK 解析,避免杂乱正则切割。示例:JSON 模板(RFC5424 风格)

template(name="json_template" type="string" string='{"time":"%timegenerated:::date-rfc3339%","host":"%fromhost-ip%","program":"%programname%","level":"%syslogseverity-text%","msg":"%msg%"}')

使用模板:action(type="omfile" file="/var/log/app.log" template="json_template")

template(name="json_tpl" type="json") {

constant(value="{")

property(name="timegenerated" format="date-rfc3339" outname="@timestamp")

property(name="fromhost-ip" outname="host_ip")

property(name="msg" outname="message")

constant(value="}")

}

四、四大典型输入场景(生产高频)

场景 1:采集系统默认 syslog(默认自带)

imuxsock + imklog,系统服务(sshd、crontab、sudo)默认写这个 socket。

场景 2:imfile 采集业务文本日志(最常用)

应用直接输出到日志文件,rsyslog 监控文件增量,类似 filebeat

module(load="imfile" PollingInterval="1") # 轮询间隔秒

input(type="imfile"

File="/opt/app/logs/app.log"

Tag="app-log"

Severity="info"

Facility="local0"

ReadMode="tail" # tail模式,只读新增,不回溯历史

StateFile="/var/lib/rsyslog/state-app") # 记录读取偏移,断点续传核心

重点:StateFile 保存文件读取位置;如果删掉 state 文件,rsyslog 会从头重读文件,造成日志重复!

场景 3:作为服务端,接收远端主机转发日志(imtcp/imudp)

module(load="imtcp")

input(type="imtcp" port="514")

514 是标准 syslog 端口;UDP 不可靠,跨机房、高吞吐生产优先 TCP;更高安全用 TLS 加密。

场景 4:接收应用主动发送 syslog(程序调用 syslog api)

程序直接 send syslog 到本机 socket 或者 TCP 514。

五、输出动作:本地落盘 + 远端转发

1)本地文件 omfile

action(type="omfile" file="/var/log/local.log" template="json_template")

2)转发远端 rsyslog(omfwd)

action(type="omfwd"

target="10.0.0.100"

port="514"

protocol="tcp"

template="json_template")

3)重点:队列配置(生产生命线,防止丢日志)

远端日志服务(kafka/rsyslog/ES)宕机时,rsyslog 内置队列缓存日志,分 内存队列 + 磁盘持久队列(diskqueue)

action(type="omfwd"

target="10.0.0.100" port="514" protocol="tcp"

queue.type="LinkedList"

queue.size="100000" # 内存最大消息数

queue.saveonshutdown="on" # 关机把内存队列刷磁盘

queue.filename="rsyslog_fwd_q"

queue.maxdiskspace="10G" # 磁盘队列上限

queue.highwatermark="80000"

queue.lowwatermark="20000"

action.resumeRetryCount="-1" # 无限重试,不丢弃

)

面试重点:没有配置 diskqueue,下游故障,日志直接丢;diskqueue 文件默认放在 /var/lib/rsyslog/,保证磁盘空间充足。

队列模式区分:

Direct:无队列,同步发送,下游卡直接阻塞整个 rsyslog,生产禁止

LinkedList:内存队列,超上限丢消息(除非开 diskqueue)

Disk:纯磁盘队列,性能低

DiskAssist:内存为主,溢出落盘,上面示例这种,生产首选

相关文章
  • rsyslog精选详解:从入门到生产环境实践
    rsyslog精选详解:从入门到生产环境实践

    rsyslog 精选详解:从入门到生产环境实践rsyslog 是 Linux 平台主流高性能日志采集转发服务,是 syslog 标准的增强实现;替代老式 syslogd,支持多输入、过滤、模板、转发、本地落盘、协议转发(UDP/TCP/TLS/RELP)、队列缓冲,广泛用于服务器、中间件、集群统一日志归集,常...

  • 故障转移故障排查手册:常见报错一站式解决
    故障转移故障排查手册:常见报错一站式解决

    故障转移故障排查手册:常见报错一站式解决故障转移(Failover)涉及的组件很多,但排查思路其实高度一致:先确认“是否真的触发了故障转移”,再定位“触发原因”,最后验证“切换后是否可用”。下面按通用排查流程 + 高频组件报错整理,适合做运维手册直接复...

  • 一文掌握内核参数入门教程,效率提升300%
    一文掌握内核参数入门教程,效率提升300%

    一文掌握内核参数入门教程,效率提升 300%说明:不是随便调参数就能凭空涨 3 倍性能,标题是圈内常见宣传口径;真实收益是:消除内核瓶颈、避免 OOM、软中断飙高、连接丢包、文件句柄耗尽这类隐性卡点,业务在高并发下不再被操作系统拖后腿。适合 Linux 服务器...

  • 2026年ELK监控教程最新教程,运维必收藏
    2026年ELK监控教程最新教程,运维必收藏

    2026 ELK(Elastic Stack)监控最新教程|运维必收藏版本基线:Elastic Stack 9.4 / 9.5,2026 主流;ELK 现在官方叫 Elastic Observability,不再只是日志,是日志 + 指标 + 链路统一可观测平台;架构重心从 Logstash 转向 Elastic Agent + Fleet + OTel 原生支持Elastic 适用:主机监控、容器 / K8s、微服...

  • 【实战】Fluentd源码,一步步带你搞定
    【实战】Fluentd源码,一步步带你搞定

    【实战】Fluentd 源码:一步步搞定核心链路Fluentd 看起来是“配置一个 fluent.conf 就能跑”的日志采集器,但真正要解决生产问题,必须看懂它的事件流转、插件加载、缓冲刷新和多 Worker 模型。当前主流稳定发行版是 fluent-package,td-agent 已停止维护。一、先看整体:F...

  • 为什么推荐Cron优缺点?深度对比与实测
    为什么推荐Cron优缺点?深度对比与实测

    为什么推荐 Cron 优缺点?深度对比与实测Cron 是 Linux 类系统内置定时任务工具,运维后端开发几乎都会用到,用来定时执行脚本 清理日志 数据同步 报表推送 巡检任务。不用额外部署服务,开箱即用,但是复杂调度场景也有明显短板,下面结合实测拆解优缺点,同时...