Nginx log to syslog on TCP port

I need to redirect Nginx access and error logs to a remote syslog server. From http://nginx.org/en/docs/syslog.html I saw that I can do:

error_log syslog:server=192.168.1.1;

However I need to redirect to a specific TCP (not UDP!) port and I tried with:

error_log syslog:server=192.168.1.1:3000;

but it doesn't pass through. How can specify to Nginx that the port should be TCP and not UDP?

Many thanks!

7
задан 14 April 2016 в 14:09
2 ответа

Нет способа отправлять через TCP таким способом, который является довольно распространенным способом отправки журналов по сети, поскольку вы хотите, чтобы доставка сообщений была надежной (см. Модуль RELP для доказательства этой необходимости).

Кроме того, возможность отправлять журналы только через UDP является довольно распространенным явлением, ряд сетевых устройств (например, коммутаторы или маршрутизаторы) могут отправлять только через UDP, поэтому отправка в системный журнал шлюз может быть решением, если вы не можете добавить слушателя на сервер системного журнала на нужный порт. Это будет получать ваши журналы UDP и вместо этого отправлять их на ваш центральный сервер через TCP.

Я бы сам собирал журналы на сервере nginx с помощью rsyslog и пересылал их на центральный сервер вместо того, чтобы полагаться на nginx. делать всю работу. Вы можете выбрать протокол и порт для отправки.

2
ответ дан 2 December 2019 в 23:50

Вы можете отправить его в udp, а затем запустить socat на 192.168.1.1

socat UDP4-RECVFROM:192.168.1.1:3000,fork,reuseaddr TCP4-SENDTO:192.168.1.1:3000
0
ответ дан 2 December 2019 в 23:50

Теги

Похожие вопросы