Rsyslog теряет сообщение при отправке через TCP
Я пытался создать собственный сервер Syslog на платформе Windows, для чего я, для начала, реализую базовый TCP-прослушиватель (сервер). Я столкнулся с проблемой, и я задал это на StackOverflow: Вопрос.
Позже я понял, что проблема существует, даже когда я использую два Rsyslogs на двух отдельных машинах Linux.
Это rsyslog.conf на клиентском компьютере:
local3.* @@192.168.1.199:514
Это rsyslog.conf на сервере:
local3.* /var/log/test.log
Это скрипт (на клиенте) для отправки сообщений журнала:
#!/bin/dash
for i in 1 2 3 4 5 6 7 8 9 10
do
logger -i -t Test -p local3.debug "This is test $i"
done
Это выходной файл, полученный на сервере (test.log):
2016-08-02T00:10:33-07:00 ubuntu Test[37023]: This is test 2
2016-08-02T00:10:33-07:00 ubuntu Test[37024]: This is test 3
2016-08-02T00:10:33-07:00 ubuntu Test[37025]: This is test 4
2016-08-02T00:10:33-07:00 ubuntu Test[37026]: This is test 5
2016-08-02T00:10:33-07:00 ubuntu Test[37027]: This is test 6
2016-08-02T00:10:33-07:00 ubuntu Test[37028]: This is test 7
2016-08-02T00:10:33-07:00 ubuntu Test[37029]: This is test 8
2016-08-02T00:10:33-07:00 ubuntu Test[37030]: This is test 9
2016-08-02T00:10:33-07:00 ubuntu Test[37031]: This is test 10
Судя по всему, первое сообщение This is test 1
это тот, который запускает соединение TCP, и он был отброшен.
Есть ли какие-либо настройки на rsyslog, которые я могу установить, чтобы предотвратить это?
Редактировать:
Я хочу отметить, что это происходит только в том случае, если соединение еще не установлено; если я запускаю скрипт второй раз сразу после первого, второй запуск скрипта сгенерирует This is test 1
,
Я также рад, что у меня есть положительные отзывы на этот вопрос, но мне кажется странным, что не так много людей заметили эту проблему и пытались ее исправить. Люди, которые входят в систему, - это, как правило, люди, которые серьезно относятся к пониманию того, где их система работает правильно и неправильно, и все же они предполагают, что все будет работать правильно, если они правильно настроят конфигурации? Я хотел попробовать больше вещей, но я действительно очень плохо знаком с системами Unix, поэтому я не знаю, как решить эту проблему.
Обновить:
Я сделал дальнейшие тесты. Кажется, я был не совсем прав. Кажется, это произойдет, только если я systemctl restart rsyslog
на сервере (получающем), но делающем это на клиентском компьютере.
Я предполагаю, что клиент думает, что он все еще подключен (тогда как на стороне сервера нет), и пытается отправить следующее сообщение. Это когда клиент понимает, что соединение было разорвано, и пытается восстановить новое соединение.
Странно то, что я понятия не имею, почему клиент подумает, что потерянное сообщение доставлено.
Я знаю, что есть RELP, но в итоге у меня будет центральный сервер системного журнала на платформе Windows. Как мне использовать TCP без этой проблемы или получить (или собрать) сервер системного журнала (сборщик), работающий в Windows с поддержкой RELP?