Re: Тест nginx -- сколько сообщений в log syslog без потерь?

Anatoliy Melnik anatoliy.melnik на showjet.ru
Чт Фев 15 10:49:44 UTC 2024





Gena Makhomed Wrote: 
------------------------------------------------------- 
> On 14.02.2024 13:30, Anatoliy Melnik via nginx-ru wrote: 
> 
> >>> Если вы предлагаете писать напрямую с nginx-а в файл -- 
> >>> сделайте у себя ротацию файлов с интервалом 30 сек 
> >>> при 200-250 тыс подключений/сек... 
> >>> 
> >>> Если у вас уже есть такое рабочее решение - 
> >>> поделитесь опытом, буду рад вас выслушать. 
> 
> >> В этом сообщении Вы говорите о том, что Вы пробовали писать логи 
> >> "напрямую с nginx-а в файл" с ротацией с интервалом в 30 секунд, 
> >> при при 200-250 тыс подключений/сек, и у Вас не получилось 
> >> создать "рабочее решение". 
> 
> > Вы привели ПОЛНУЮ ЦИТАТУ! ОТЛИЧНО! 
> > Я сказал ровно то, что и хотел сказать. 
> > Где вы прочитали про "не получилось" ??? 
> > Пожалуйста процитируйте... без своих домыслов и фантазий. 
> 
> А Вы помните, на какой именно мой вопрос Вы отвечали? Напомню: 
> https://mailman.nginx.org/pipermail/nginx-ru/2024-February/L3UKQXO2PKI 
> HBFWHHTQRKDQY53XGE5BN.html 
> 
> Я же практически прямым текстом Вам написал, что Ваша попытка 
> выжать максимум производительности из связки nginx-syslog - 
> это есть проблема Y и задал Вам вопрос, какую именно проблему X 
> Вы таким способом пытаетесь решить. И что я слышу в ответ - 
> что Вы не смогли получить работающую систему при 200-250 тысяч 
> подключений в секунду и при ротации логов раз в 30 секунд - именно 
> это и значают Ваши слова "Если у вас уже есть такое рабочее решение 
> - поделитесь опытом, буду рад вас выслушать" - если Вы спрашиваете, 
> как именно построить рабочую систему ротации логов при такой 
> нагрузке, 
> то логично предположить, что Вы попытались это сделать, у Вас это 
> не получилось и Вы тогда пошли другим путем - писать логи 
> через syslog unix socket`ы, потому что там ротации не надо делать. 
> 

Сойдемся на формулировке: 
"Я намеренно ввел вас в заблуждение путем публикации сообщения, допускающее двойное толкование в ту или иную сторону по желанию сторон." 
Если таковая вас устроит. 

Дальнейшее перемалывание темы ротации лично для меня интереса не представляет. 
Т.к. концептуально является переливанием из пустого в порожнее. 
> 
> Читать из unix socket`а удобно, паралельно в 10 потоков, 
> а читать из одного текстового лог-файла - неудобно? 
> А в чем именно неудобство чтения логов из файла? 
> 
> > Есть 3 реверс-прокси, и от 15 до 30 беков, на которые и проксируются 
> запросы. 
> > Обращения жестко делятся на несколько типов, тип определяется 
> значением переменной в запросе, запросы БЕЗ этой переменной 
> игнорируются. 
> > Беки ведут статистику сколько и какого типа запросов они получили, 
> эти данные сливаются в БД и хранятся с дискретностью 20минут. 
> > 
> > Регулярно требуется "нестандартная" статистика, например 
> > "средний размер ($body_bytes_sent) по запросам типа "sc012" за 
> сутки" 
> > "соотношение обращений по http и https ($schema) по запросам типа 
> "q1wr" за час" 
> > "наименьшее/среднее/наибольшее время ($request_time) по запросам 
> типа "sc012" за..." 
> > "объем запросов типа "q1wr" (сумма $body_bytes_sent таких запросов) 
> в общем объеме трафика (сумма $body_bytes_sent всех запросов)" 
> > и т.д. 
> > нет смысла каждый раз перекраивать ПО на беках, ведь все это есть в 
> логах реверс-прокси. 
> 
> Если Вам не достаточно тех метрик, которые Angie 
> умеет отдавать напрямую в Prometheus, рассматривали 
> ли Вы как вариант решения своей задачи улититы 
> 
> https://github.com/google/mtail 
> 
> https://github.com/timberio/vector 
> 
> ? 
Нет, не рассматривал. 
На данном этапе не интересно и не вижу необходимости ломать имеющееся. 

> 
> Referer: https://github.com/freeseacher/metrics_ru_faq 
> 
> 
> > как минимум создам дополнительную нагрузку на сетевой стек ОС-и, ибо 
> tcp как ни крути более затратен по сравнению с unixSocket. 
> > Или с высокой вероятностью упрусь в теже ограничения unixSocket если 
> отказаться от tcp со всеми дальше вытекающими. 
> > При размещении на другом сервере решить проблему исчерпания портов 
> для соединения прокси-проски. (а их "в моменте" 350-400 тыс), да, без 
> body их будет меньше, но все-таки довольно много. 
> 
> если использовать keepalive в блоке upstream, то не упретесь, 
> потому что одно и то же соединение к backend`у будет повторно 
> использоваться для отправки на backend большого количества запросов, 
> и не будет такой ситуации, что на каждый запрос открывается новое 
> подлюкчение к backend`у, так что исчерпания портов не произойдет. 
> дефолтовое значение proxy_http_version 1.0 - это плоая идея, потому 
> что в http 1.0 коцен файла - это закрытие соедения, а оно может быть 
> и по причине ошибки, и nginx будет тогда отдавать битые ответы. 
> Если включить proxy_http_version 1.1 - такой проблемы не будет. 
> И заодно - можно будет использовать http keepalive 
> при подключении к backend`у, чтобы по одному tcp 
> соединению передавать большое количество запросов. 
> 
> > Моя проблема "Х": 
> > Ограниченность в связке nginx->unixSocket->syslog 
> > Мое решение проблемы "Х": распараллелить процесс, чтоб проблема "Х" 
> не возникала в принципе на необходимых мне уровнях. 
> 
Все. Точка. 
При износе какой-то запчасти в механизме чаще меняют запчасть, а не механизм. 
Я свой случай отношу именно к категории про запчасть. 
Вы предлагаете замену всего при весьма не очевидных плюсах в результате. 
Зачем мне менять рабочее, устраивающее меня решение на другое, которое в любом случае придется допиливать и отлаживать, подгонять под свои цели? 
Чтоб было лучше? Лучше кому? И лучше в чем? 
Что такого я получу в результате, чего у меня нет сейчас? 

Полученное решение эффективно расходует мое рабочее время, занимая ровно "0" секунд в день на его обслуживание. 
оптимально устраивает начальство на предмет отображения полученных данных. 
Создает равномерную нагрузку на cpu. Без ярко выраженных всплесков, которые будут при обработке файла с накопленными данными. 

И даже сокращает "углеродный след" не насилуя попусту жесткие диски операциями чтения-записи :) 


Вам не подходит? 
Не пользуйтесь подобными конструкциями. 

> 
> > Объективно оптимального решения практически любой проблемы не 
> существует в природе. 
> 
> Практически всегда можно найти оптимальное ли близкое к оптимальному 
> решение, надо просто осознавать какие критерии важны в первую 
> очередь, 
> а какие являются второстепенными - и исходя из условий задачи 
> - всегда можно найти оптимальное или близкое к оптимальному решение 
> для этих условий. Поэтому, например, иногда будет более оптимальным 
> VPN WireGuard, а иногда - более оптимальным будет VPN OpenVPN. 
> Все зависит от критериев оптимальности и всех условий задачи. 
> 
> > Если у вас в крсе обучения был такой предмет как "методы 
> оптимизации" -- вы должны это понимать. 
> > Вспомните задачки из курса: 
> > На одну и ту же таблицу данных: 
> > Постройте оптимальный маршрут по расстоянию. 
> > Постройте оптимальный маршрут по времени. 
> > Постройте оптимальный маршрут по загрузке. 
> > Постройте оптимальный с учетом состояния дорог. 
> > И ответы везде разные, а табличка-то одна :) 
> > И это которые простые задачки.... 
> 
> И что, Вы разве тогда находили _субъективно_ оптимальные решения? 
> И у каждого из 30 студентов в группе было свое собственное решение, 
> каждой из этих задач, которое он и считал самым оптимальным? 
> Или же для каждой этой задачи оптимальные решения получались 
> одинаковыми или очень сильно похожими друг на друга? 
> 
Решение было свое собственное, (ну не совсем у каждого, а по вариантам) потому что критерий оптимальности был у каждого свой, "данный свыше". 
В обычной жизни критерии могут быть очень похожи, но это таки субъективные критерии. 

> > Эффективность с точки зрения чего? 
> > Мы с вами эффективность считаем по совершенно разным критериям. 
> > Это не хорошо и не плохо. Это просто по-разному :) 
> > Ваше мнение может отличаться от моего. 
> 
> при одинаковых критериях эффективности - тоже будут разные решения? 
> 
> > Объективно оптимального решения практически любой проблемы не 
> существует в природе. 
> 
> То есть, у каждого будет свое собственное _субъективное_ понимание 
> того, какое решение является наиболее эффективным при четко заданных 
> критериях эффективности? 
ДА! 
ДА! 
На оба ваших вопроса выше... 
Оглянитесь вокруг, и вы сами в этом убедитесь. 
Кровли одинаковой конструкции очень похожих домов покрыты разным материалом. 
Внешне одинаковые постройки с одинаковой теплоэффективностью в качестве теплоизолятора содержат разные материалы. 
По дорогам ездят разные автомобили с одинаковыми требованиями к эффективности. 
Люди носят разную одежду при одинаковых требованиях к эффективности. 

Список можно продолжать до бесконечности. 
Можно придраться к каждому пункту по принципу "... а тут они не все критерии!" 
Так в жизни практически не бывает "чтоб прям все":) По крайней мере в моей. 


> 
> > Вы почему-то упорно пытаетесь отказать мне в праве самостоятельно 
> решать что мне надо :) 
> 
> Решайте сами, я просто хотел понять Вашу исходную задачу X, 
> поэтому и задавал уточняющие вопросы. 
> 
Спасибо. Как уже упоминалось ранее -- по озвученной на самом старте теме я уже все решил. 

> > Про оптимальность я выше упоминал. 
> > Оптимизировать можно по разным критериям. 
> > Вы исходите из одних критериев оптимальности, я из других. 
> > И это абсолютно нормально. 
> 
> Ненормально, если при одних и тех же критериях оптимальности 
> и эффективности получаются совершенно различные решения 
> - так не может быть. 

Может. 
У Пикуля есть произведение "Честь Имею". 
Там есть эпизод с описанием различия принципов обучения в российской и немецкой академиях генштаба. 
Так вот - в немецкой идеалом считалось, когда любой выпускник, поставленный в сложную ситуацию, принимал оптимальное эффективное ЕДИНСТВЕННО ВЕРНОЕ решение, одинаковое для всех успешных выпускников в такой ситуации. 
Коренное отличие русской состояло в том, что каждый выпускник принимал оптимальное эффективное решение для достижения цели, и идеалом считалось когда у подавляющего большинства решения разные, но очень близки по эффективности. 
Если мне память не изменяет -- давно читал. 
Может что и напутал или помню не правильно... 

Кроме того при одинаковых критериях исходные условия могут быть разными. 
И решения будут КАРДИНАЛЬНО отличаться. 
Вот при одинаковых условиях, критериях, ресурсах, предпочтениях и конечных требованиях уже можно ожидать низкой вариативности в реализации. И то не факт. 

> 
> > Не стоит убеждать меня в "неправильности" моих критериев. 
> 
> Проблема XY - это не про неправильность критериев. 
> 
> Проблема XY - это про то, что Вы ищете решение проблемы Y, 
> хотя на самом деле Вам нужно решение проблемы X. 
Любая проблема является следствием одних проблем, и причиной других. 
Это нормально. 
При желании добраться из пунта А в пункт Б именно на машине и проблеме "машина не едет" 2 концептуальных решения: 
1.Заменить машину. 
2.Устранить причины "не едет" в имеющейся. 
Соответственно 2 пути -- ищем другую машину, или меняем вышедшую из строя запчасть. 
Если провести параллели, то с моей точки зрения мне вполне достаточно запчасти. 
Вы предлагаете замену машины. 
Да, тут тоже есть куда развить тему, к чему придраться и т.д. 
Аналогия может не самая удачная. Можете привести свою. 

> 
> > Есть большое подозрение, что уже на текущем этапе по данному вопросу 
> осталось лишь 2 собеседника. 
> 
> я не настаиваю на продолжении диалога, если Вам этот разговор 
> не интересен, не полезен или доставляет какой-то дискомфорт. 
> 
> On 14.02.2024 23:58, Anatoliy Melnik via nginx-ru wrote: 
> 
> > 2. Хорошо -- пусть каждый прокси сам свое считает: исключаются 
> > потери по сети, каждый прокси в этом плане становится 
> > автономно-независимой единицей. 
> > При высоких нагрузках -- расхождения в статистике. 
> 
> Каким образом можно получить расхождения в статистике, 
> если на диске есть свободное место - в лог пишутся все 
> сообщения, потерь не может быть в этом случае. 
> 
Файлы в следующем пункте. 
> Получить потери можно в случае использования syslog 
> и unix socket`ов - если читающая сторона не будет 
> успевать читать данные из сокета - у nginx не останется 
> иных варантов, кроме как дропать часть записей. 
> 
> При записи логов в файлы - этот вариант исключен, 
> если на разделе есть достаточное количество свободного места. 
> 
О появились доп. условия -- место на разделе... 


> Хотя бы даже одним только этим свойством запись логов в файлы 
> намного лучше записи логов в unix socket`ы. 
> 
А как же место на разделе? Замена одной проблемы другой. Только и всего. 
Т.е. Проблему X -- расхождение при использовании сокета, вы меняете на проблему У -- достаточное количество места и производительность системы ввода-вывода, просто с вашей точки зрения это как-бы и не проблема вовсе, с моей точки зрения менять одну проблему на другую смысла нет, если можно решить первую. Тем более решение оказалось сущим пустяком. 



> Потому что, грубо говоря, при использовании unix socket`ов, 
> у Вас есть очень небольшой буфер в памяти и он очень быстро 
> может переполниться, что и приведет к потере части записей. 
Что и было решено путем распараллеливания. 

> 
> А при использовании лог-файлов на диске и ротации логов по 
> SIGUSR1 - в качестве такого "буфера" у Вас выступает все свободное 
> место на диске - поэтому не требуется та высокая степень 
> синхронности, 
> которая необходима при использовании unix socket`ов. 
> 
> Какой смысл в статистике, если она будет не точкной и ошибочной, 
> если система сбора статистики будет очень хрупкой и будет терять 
> часть сообщений при всплесках пиковой нагрузки на сервис? 
На данном этапе эксплуатации не выявлено ни одного из перечисленных вами эффектов. 


> 
> Если же одним из критериев эффективности и оптимальности системы 
> сбора статистики считать полноту статистики и отсутствие потерь 
> - в таком случае однозначно необходимо предпочесть именно логи, 
> куда будет писать сам nginx напрямую и ротацию логов через SIGUSR1. 
> 
> Если же потери части входных данных Вам не создают проблем, 
> то это у Вас какая-то не совсем понятная статистика получается. 
> Зачем она нужна, если эти система очень легко может терять часть 
> записей? 
Ну не так уж и легко. 
Собственно время покажет. 


> 
> > 3. Хорошо, запишем в файл прям с nginx-а. файл 
> распарсим-посчитаем. 
> > 3а.простыми методами (типа grep и awk) обработка статистики за 30 
> секунд занимает больше 30 секунд. 
> 
> а если через 
> 
> https://github.com/google/mtail 
> 
> https://github.com/timberio/vector. 
> 
> ? 
> 
> Ведь не Вы же первый сталкиваетесь с задачей обработки логов. 
> И кроме grep и awk придумано и создано большое количество 
> инструментов для этого. 
> 
> > 3б.пишем в файл->читаем из файла->удаляем файл в объемах 
> 30-60Мбайт/сек... лично мое мнение - файл тут явно лишний. 
> (Ваше мнение может отличатся от моего, я абсолютно не настаиваю). 
> 
> Вас не смущает тот факт, что буфер в памяти может очень легко и 
> быстро 
> переполниться и это приведет к потере части данных? Это не важно? 
> Но судя по тому, что именно с этой проблемой Вы сюда и пришли - 
> для Вас это важно и критично, чтобы потерь данных у Вас не было. 
> 
> Если это критично, чтобы не было потерь - тогда логично построить 
> систему которая в принципе не способна терять данные, если только 
> есть достаточное количество свободного места на диске. Разве не так? 
> 
> >>> Чисто техничски можно и без access-логов, будете сами 
> >> реализовывать нечто 
> >>> подобное -- выберете более близкое вам решение. 
> >> 
> >> Вы не назвали альтернативные решения. 
> > Это сделали за меня: 
> > Написать свой бекэнд (как вариант на Go) и отзеркалировать туда 
> запросы с фронотов.... 
> 
> не только, еще можно использовать Angie и экспортировать 
> статистику напрямую в Prometheus, если этого будет достаточно. 
> 
> > Из лабиринтов собственных заблуждений 
> > скорее выберется тот, кто готов признать, что он заблуждается. 
> 
> А он признает? 
А вы у кого спрашиваете? 
> 
> > Лично я этот путь приодолел не единожды. Чего и вам желаю. 
> 
> Спасибо. В чем мои заблуждения? 
Ну как вариант: 
"Я намеренно ввел вас в заблуждение путем публикации сообщения, допускающее двойное толкование в ту или иную сторону по желанию сторон." 
Чуть попозже может всплыть и еще что-то. 
> 
> > Разве я кого-то пытался убедить, что его подход в корне не верен, 
> как 
> в этом пытаются убедить меня? 
> 
> Если цель кого-то пытаться убедить в истинности своей 
> точки зрения - это полемика. Если цель найти наиболее оптимальное 
> решение проблемы/задачи - это дискуссия. Отличие только в целях 
> и мотивации, внешнему наблюдателю они могут быть не видны и не 
> понятны, 
> если он воспринимает других через призму своего собственного сознания 
> и своих собственных установок/предубеждений. 
Не так много встречал людей, способных к адекватному восприятию не только через призму своего собственного сознания, но также и чужого. 

> 
> > Я же свои задачи решаю, а не ваши. 
> 
> Задачи очень схожие часто. И можно поделиться своим опытом с другими. 
> Но чтобы был возможен процесс поиска наиболее оптимального решения 
> задачи - необходимо знать условия задачи и критерии 
> оптимизации / эффективности. 
> 
> Причем, поиска решения настоящей задачи X о сборе статистики, 
> а не придуманной задачи Y про оптимизацию syslog/unix socket. 
Лично для меня уже не актуальны ни Х ни Y, ни их комбинации. 


Вот вам идея оптимального по большинству критериев решения -- 
Когда будете решать сходную задачу напишите свой модуль для nginx 
Чтоб сразу считать все нужное "внутри" без посредников. 
Я такое решение тоже рассматривал, отказался. 
Лично мои трудозатраты по реализации такого подхода превосходят все разумные пределы. 
Что и стало ключевым фактором "против". 

> -- 
> Best regards, 
> Gena 
> 
> _______________________________________________ 
> nginx-ru mailing list 
> nginx-ru на nginx.org 
> https://mailman.nginx.org/mailman/listinfo/nginx-ru 



----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20240215/94ab7197/attachment-0001.htm>


Подробная информация о списке рассылки nginx-ru