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