Тест 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