У меня есть сервер 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, или есть другой встроенный способ?
Я решил свою проблему, написав скрипт Perl, открывающий PIPE на входном конце, перекачивая сообщения с завершением новой строки на удаленный сайт, используя LWP :: UserAgent давая мне свободу в отношении вопросов TLS (использовать сертификат CA или нет, проверять хост или нет). И вместо omfwd
я использую 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"
)
Затем я пойду и поменяю свой марионеточный модуль ...