И снова Здравствуйте :) 
Итак конечный вариант решения: 

В конфиге nginx вот такая конструкция 

map "$remote_port" $log_selector_0 { 
default 0; 
~0$ 1; 
} 
map "$remote_port" $log_selector_1 { 
default 0; 
~1$ 1; 
} 
map "$remote_port" $log_selector_2 { 
default 0; 
~2$ 1; 
} 
map "$remote_port" $log_selector_3 { 
default 0; 
~3$ 1; 
} 
map "$remote_port" $log_selector_4 { 
default 0; 
~4$ 1; 
} 
map "$remote_port" $log_selector_5 { 
default 0; 
~5$ 1; 
} 
map "$remote_port" $log_selector_6 { 
default 0; 
~6$ 1; 
} 
map "$remote_port" $log_selector_7 { 
default 0; 
~7$ 1; 
} 
map "$remote_port" $log_selector_8 { 
default 0; 
~8$ 1; 
} 
map "$remote_port" $log_selector_9 { 
default 0; 
~9$ 1; 
} 

..... 


access_log 
syslog:server=unix:/run/socket-00,nohostname,facility=local5,severity=info,tag=nginxStats01
 st01 if=$log_selector_0; 
access_log 
syslog:server=unix:/run/socket-01,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_1; 
access_log 
syslog:server=unix:/run/socket-02,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_2; 
access_log 
syslog:server=unix:/run/socket-03,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_3; 
access_log 
syslog:server=unix:/run/socket-04,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_4; 
access_log 
syslog:server=unix:/run/socket-05,nohostname,facility=local5,severity=info,tag=nginxStats01
 st01 if=$log_selector_5; 
access_log 
syslog:server=unix:/run/socket-06,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_6; 
access_log 
syslog:server=unix:/run/socket-07,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_7; 
access_log 
syslog:server=unix:/run/socket-08,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_8; 
access_log 
syslog:server=unix:/run/socket-09,nohostname,facility=local5,severity= info 
,tag=nginxStats01 st01 if=$log_selector_9; 

Данные почти равномерно расходятся по 10-ти файлам, которые пишутся на tmpfs в 
RAM. 
Отказался и от rsyslog и от syslog-ng 
В качестве принимающей стороны выступает пока python скрипт 
В нем стартую 10 процессов, каждый слушает свой сокет и вся его задача -- 
сложить в файл данные. 

Отказ от rsyslog-а обусловлен просто огромным количеством переключений 
контекста, rsyslog-ом генерируемое. 
Уже на 200-210тыс/сек их количество переваливает за 1.4 млн/сек. ( примерно 
0.9млн - работа rsyslog-а) и на этой отметке сильно деградирует 
производительность системы в целом. 

syslog-ng при работе с unixSocket показал довольно низкую производительность. 
(Долго с ним не разбирался. Чисто дефолтная установка и минимальная настройка). 

python по сравнению с rsyslog ЦПУ потребляет немного больше, но переключений 
контекста значительно меньше, и это положительно сказывается на работе всей 
системы. 


Как итог -- проверен порог в 220-230 тыс/сек (такая нагрузка сохранялась около 
3-х часов) на 1 nginx, на моем железе все отработало нормально, все метрики 
сошлись. 

Попытка с UDP -- больше потребление CPU, больше прерываний, больше переключений 
контекста... 
И если 220-230 тыс/сек на 10 unixSocket -еще не предел для моего железа, то те 
же 220-230 тыс/сек на udp на loopback интерфейс практически предел судя по 
мониторингу. 


Всем еще раз спасибо за внимание и советы. 


_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить