rsyslog精选详解:从入门到生产环境实践
rsyslog 精选详解:从入门到生产环境实践
rsyslog 是 Linux 平台主流高性能日志采集转发服务,是 syslog 标准的增强实现;替代老式 syslogd,支持多输入、过滤、模板、转发、本地落盘、协议转发(UDP/TCP/TLS/RELP)、队列缓冲,广泛用于服务器、中间件、集群统一日志归集,常搭配 ELK、Loki、Graylog。
适用场景:服务器系统日志、应用日志、容器宿主机日志转发;适合运维、后端、大数据面试、线上日志排错。
一、基础认知
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:内存为主,溢出落盘,上面示例这种,生产首选
- 上一页:HBase面试题常见问题排查手册
- 下一页:【收藏】公司官网必备清单和注意事项
-
rsyslog精选详解:从入门到生产环境实践rsyslog 精选详解:从入门到生产环境实践rsyslog 是 Linux 平台主流高性能日志采集转发服务,是 syslog 标准的增强实现;替代老式 syslogd,支持多输入、过滤、模板、转发、本地落盘、协议转发(UDP/TCP/TLS/RELP)、队列缓冲,广泛用于服务器、中间件、集群统一日志归集,常...
-
故障转移故障排查手册:常见报错一站式解决故障转移故障排查手册:常见报错一站式解决故障转移(Failover)涉及的组件很多,但排查思路其实高度一致:先确认“是否真的触发了故障转移”,再定位“触发原因”,最后验证“切换后是否可用”。下面按通用排查流程 + 高频组件报错整理,适合做运维手册直接复...
-
一文掌握内核参数入门教程,效率提升300%一文掌握内核参数入门教程,效率提升 300%说明:不是随便调参数就能凭空涨 3 倍性能,标题是圈内常见宣传口径;真实收益是:消除内核瓶颈、避免 OOM、软中断飙高、连接丢包、文件句柄耗尽这类隐性卡点,业务在高并发下不再被操作系统拖后腿。适合 Linux 服务器...
-
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 看起来是“配置一个 fluent.conf 就能跑”的日志采集器,但真正要解决生产问题,必须看懂它的事件流转、插件加载、缓冲刷新和多 Worker 模型。当前主流稳定发行版是 fluent-package,td-agent 已停止维护。一、先看整体:F...
-
为什么推荐Cron优缺点?深度对比与实测为什么推荐 Cron 优缺点?深度对比与实测Cron 是 Linux 类系统内置定时任务工具,运维后端开发几乎都会用到,用来定时执行脚本 清理日志 数据同步 报表推送 巡检任务。不用额外部署服务,开箱即用,但是复杂调度场景也有明显短板,下面结合实测拆解优缺点,同时...