вопрос - offtopic

Anton Yuzhaninov citrin at citrin.ru
Sun Dec 2 01:13:21 MSK 2007


On 02.12.2007 0:33, Nikolay Grebnev wrote:
> 
> Или только складывать логи локально, и ежесуточно их автоматом 
> переливать в другое место?
> 

А чем вам не нравится такое решение?
Из всех способов надежной передачи логов на удаленный сервер это наиболее простой. И недостаток у него только 
один - на центральном сервере логи будут появляться с задержкой.

Подозреваю что syslog-ng даже в premium edition может потерять часть данных в момент потери связи с удаленным 
сервером, поскольку в его протоколе AFAIK нет ACK на прикладном уровне. А там где его нет, возникает такая 
проблема:

Отправитель просит ОС отправить данные по сети сделав write().
ОС помещает эти данные в буфер tcp-стека и возвращает размер записанных в буфер данных.
Некоторые приложения (включая syslog-ng) думают что раз write() не вернул ошибок можно считать что данные 
успешно отправлены и о них можно забыть.

Но если после того как данные были записаны в буфер но до того как были переданы, хост получателя вдруг станет 
недоступен, то данные будут потеряны. ОС будет чесно пытаться доставить данные (tcp retransmit) но делать 
вечно она этого не может. Да и в случае перезагрузки удаленного хоста это не поможет.

Следующий write() уже скорее всего вернет ошибку, и логи начнут буферезироваться локально. Но содержимое 
предыдущего write() будет потеряно.

Чтобы оно не терялось syslog-сервер должен посылать назад отправителю подтверждение того, что данные получены.
Насколько я знаю в syslog-ng таких подтверждений нет (но я могу ошибаться, исходники смотрел давно и 
недостаточно внимательно).

-- 
WBR,
  Anton Yuzhaninov





More information about the nginx-ru mailing list