要让WebLogic、IBM MQ、Oracle DB等中间件日志绕过本地磁盘直推SOC,需配置中间件输出至syslog接口(如local4/local5),rsyslog启用纯内存队列(queue.maxdiskspace="0g")、绑定专用ruleset并禁用本地落盘,服务端启用TLS加密接收。

要让特定核心中间件(如 WebLogic、IBM MQ、Oracle DB 的审计模块等)产生的 syslog 绕过本地磁盘、实时直推至远程 SOC 机房,关键不是“全局转发所有日志”,而是精准捕获目标进程的日志流,并通过 rsyslog 的可靠传输通道 + 内存队列 + 零落盘策略实现热推。这不是简单加一行 *.* @@soc-ip:514 就能解决的。
明确日志源头:中间件必须输出到 syslog 接口
中间件自身需配置为将日志写入 local socket(/dev/log)或 UDP/TCP 端口,而非直接写文件。例如:
- WebLogic:启用 JVM 参数
-Dweblogic.log.LogSeverity=Debug -Dweblogic.log.RedirectStdoutToLog=true,再配合 log4j2 的SyslogAppender,facility 设为local4; - Oracle DB 审计:设置
AUDIT_TRAIL='OS'并确保audit_file_dest指向一个由 rsyslog 监听的命名管道或 syslog socket; - IBM MQ:在
qm.ini中配置Log:Syslog=yes,并指定Facility=local5。
若中间件只写文件(如 /opt/mq/logs/AMQERR01.LOG),则需用 imfile 模块监听该文件——但这就无法完全规避本地磁盘 I/O,不满足“绕过物理磁盘”要求。
rsyslog 客户端:禁用本地落盘,启用内存队列与 TCP 强保障
编辑 /etc/rsyslog.d/99-middleware-forward.conf,内容如下:
# 加载必要模块
module(load="imuxsock") # 接收 /dev/log socket 日志
module(load="imklog") # 接收内核日志(可选)
module(load="omfwd") # 转发模块
<h1>为中间件日志单独定义规则集,避免混入其他日志</h1><p>ruleset(name="middleware-only") {</p><h1>只匹配 facility=local4 和 local5 的日志(按中间件实际配置调整)</h1><p>if $syslogfacility-text == 'local4' or $syslogfacility-text == 'local5' then {</p><h1>关键:不写本地文件,直接进转发队列</h1><pre class="brush:php;toolbar:false;">action(
type="omfwd"
protocol="tcp"
target="soc-server.example.com"
port="514"
keepalive="on"
keepalive.maxidle="300"
queue.type="LinkedList"
queue.spoolDirectory="/var/lib/rsyslog" # 仅故障时临时落盘,生产建议挂 tmpfs
queue.filename="middleware-queue"
queue.maxdiskspace="0g" # 禁用磁盘缓存(强制纯内存)
queue.saveonshutdown="off" # 不保存队列到磁盘
queue.size="100000" # 大内存队列缓冲突发
action.resumeRetryCount="-1" # 永久重试,不丢日志
action.reportSuspension="on"
action.reportSuspensionContinuation="on"
)
stop # 匹配后终止处理,不落入默认规则} }
将规则集绑定到输入源
input(type="imuxsock" ruleset="middleware-only")
注意:queue.maxdiskspace="0g" 是绕过本地磁盘的核心参数;/var/lib/rsyslog 若必须存在,应挂载为 tmpfs(内存文件系统),避免真实磁盘写入。
SOC 机房服务端:按来源隔离 + TLS 加密(推荐)
在 SOC 服务器上,启用 TLS 保证传输安全(尤其跨网络边界):
- 生成证书并配置
/etc/rsyslog.d/tls-server.conf,加载imtcp和gtls模块; - 使用
template按中间件类型和主机 IP 分目录存储,例如:template(name="SOCFormat" type="string" string="/var/log/soc/%fromhost-ip%/%syslogfacility-text%/%$year%-%$month%-%$day%.log"); - 添加
$InputTCPServerStreamDriverMode "1"启用 TLS 模式; - 防火墙开放
6514/tcp(TLS 默认端口),而非明文 514。
这样既满足“实时热推”,又确保日志可溯源、防篡改、不落地客户端磁盘。
验证与可观测性要点
部署后必须验证三个层面是否真正生效:
- 中间件进程是否真在往
/dev/log写(lsof -U -p $(pgrep -f weblogic)); - rsyslog 是否收到但未转发(
rsyslogd -N1检查语法,journalctl -u rsyslog -f查看 rule 匹配日志); - SOC 侧是否收到且格式完整(
tcpdump -i any port 6514 -A -c 5抓包确认 TLS 握手及 payload)。
任何一环写入本地文件(如 /var/log/messages 或 /var/log/secure)都意味着未真正绕过磁盘——需回溯规则优先级与 stop 是否生效。

















