我在前端有一个 rsyslog 服务器,需要转发某些设施到远程服务器。我创建了一个模板,用于以 HTTP 主体形式传输:
template(name="syslogforward" type="list") {
constant(value="POST / HTTP/1.0\n")
constant(value="Content-type: text/plain; charset=UTF-8\n")
constant(value="\n")
property(name="timereported")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="app-name")
constant(value=": ")
property(name="pri-text")
property(name="msg")
}
local1.* action(
Name="Forward_to_remote"
type="omfwd"
Template="syslogforward"
Target="xxx.xxx.xxx.xxx"
Port="8080"
Protocol="tcp"
)
我想转发这些用 HTTPS 加密的消息,我是否必须启动另一个进程来打开本地套接字并执行 HTTPS,或者是否有其他内置方法?
答案1
我通过编写一个 perl 脚本解决了我的问题,在输入端打开一个 PIPE,使用以下命令将以换行符结尾的消息发送到远程站点LWP::用户代理omfwd
让我可以自由处理 TLS 问题(是否使用 CA 证书、是否验证主机)。我使用而不是ompipe
。
我的 rsyslog 配置改变如下:
template(name="syslogforward" type="list") {
property(name="timereported")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="app-name")
constant(value=": ")
property(name="pri-text")
property(name="msg")
# avoid buffering
# maybe I should re-think this
constant(value="\n")
}
local1.* action(
Name="Forward_to_remote"
Type="ompipe"
# just a demo pipe
Pipe="/tmp/mypipe"
Template="syslogforward"
)
接下来我要去更换我的傀儡模块……