Тест nginx -- сколько сообщений в log syslog без потерь?
Maxim Dounin
mdounin на mdounin.ru
Чт Янв 18 19:30:32 UTC 2024
Hello!
On Thu, Jan 18, 2024 at 07:15:10PM +0300, Anatoliy Melnik via nginx-ru wrote:
> Слив в 1 Syslog с 3-х nginx -ов, до суммарно 150тыс/сек все
> сходится (3х50), расхождение +- 0.1% , на 200 тыс (3х67тыс)
> расхождение достигает 4-7% (в syslog-е на 4-7% меньше, чем сумма
> по бекэндам)
Сравнивать с суммой по бэкендам как минимум некорректно без учёта
возможной работы proxy_next_upstream и внутренних перенаправлений,
не говоря уже о подзапросах.
Если хочется сравнивать с бэкендами, то надо либо как-то
убеждаться, что каждый запрос порождает только один запрос к
бэкенду (proxy_next_upstream off, keepalive к бэкендам не
используется, подзапросов нет), либо учитывать все попытки в
$upstream_addr и $upstream_status (опять же в предположении
отсутствия подзапросов).
> Результат не зависит от использования UDP или unixSocket (на
> локальном сервере).
> Не зависит от того, локальный это syslog или на соседнем сервере
> (для UDP).
>
> Ситуация повторяется как минимум на 2-х версиях nginx
> nginx version: nginx/1.18.0
> И
> nginx version: nginx/1.24.0
>
> Замена syslog сервера на самописную версию, единственная задача
> которой из unixSocket блок данных записать в файл дает такие же
> результаты количественные.
>
> Возможно я плохо искал методы тюнинга unixSocket, к сожалению не
> нашел.
Тюнинг стандартный: setsockopt(SO_RCVBUF), как и для любых
сокетов.
Если в syslog-сервере ручки не вынесено, то в системе можно
настроить с помощью соответствующих sysctl'ей -
net.inet.udp.recvspace и net.local.dgram.recvspace для FreeBSD,
net.core.rmem_default (а при необходимости net.ipv4.udp_mem и
net.ipv4.udp_rmem_min) на Linux.
Для локальных сокетов на Linux'е, судя по всему, нужно ещё крутить
net.unix.max_dgram_qlen.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru