Highload++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100Knvps На Одном Сервере

Следующая конференция HighLoad++ пройдет 6 и 7 апреля 2020 года в Санкт-Петербурге.

Подробности и билеты связь .

HighLoad++ Москва 2018. Зал «Москва».

9 ноября, 15:00. Тезисы и презентация .



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

* Мониторинг - онлайн и аналитика.

* Основные ограничения платформы ZABBIX. * Решение для масштабирования хранилища аналитики.

* Оптимизация сервера ЗАББИКС.

* Оптимизация пользовательского интерфейса.

* Опыт работы системы под нагрузками более 40к NVPS. * Краткие выводы.

Михаил Макуров (далее – ММ): - Всем привет! Максим Чернецов (далее – МЧ): - Добрый день! ММ: – Позвольте представить Максима.

Макс — талантливый инженер, лучший сетевик, которого я знаю.

Максим занимается сетями и сервисами, их развитием и эксплуатацией.



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

МЧ: – И мне хотелось бы рассказать вам о Михаиле.

Михаил — разработчик C. Он написал для нашей компании несколько высоконагруженных решений по обработке трафика.

Мы живем и работаем на Урале, в городе крутых мужчин Челябинске, в компании Интерсвязь.

Наша компания является поставщиком услуг Интернета и кабельного телевидения для миллиона человек в 16 городах.

ММ: – И стоит сказать, что «Интерсвязь» – это гораздо больше, чем просто провайдер, это IT-компания.

Большинство наших решений разрабатываются нашим ИТ-отделом.

А: от серверов обработки трафика до колл-центра и мобильного приложения.

В ИТ-отделе сейчас работает около 80 человек с очень и очень разнообразными компетенциями.



О Zabbix и его архитектуре

МЧ: — А теперь я попробую установить личный рекорд и за одну минуту сказать, что такое Zabbix (далее «Заббикс»).

Zabbix позиционирует себя как готовую систему мониторинга корпоративного уровня.

Он имеет множество функций, упрощающих жизнь: расширенные правила эскалации, API для интеграции, группировки и автоматического определения хостов и метрик.

В Zabbix есть так называемые инструменты масштабирования — прокси.

Zabbix — это система с открытым исходным кодом.

Коротко об архитектуре.

Можно сказать, что он состоит из трех компонентов:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

  • Сервер.

    Написан на C. С достаточно сложной обработкой и передачей информации между потоками.

    В нем происходит вся обработка: от получения до сохранения в базу данных.

  • Все данные хранятся в базе данных.

    Zabbix поддерживает MySQL, PostgreSQL и Oracle.

  • Веб-интерфейс написан на PHP. В большинстве систем он поставляется с сервером Apache, но более эффективно работает в сочетании с nginx + php.
Сегодня мы хотели бы рассказать одну историю из жизни нашей компании, связанную с Zabbix.

История из жизни компании Интерсвязь.

Что у нас есть и что нам нужно?



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

5 или 6 месяцев назад. Однажды после работы.

МЧ: - Миша, здравствуй! Я рад, что мне удалось тебя поймать - разговор есть.

У нас снова возникли проблемы с мониторингом.

Во время крупной аварии все работало медленно и не было никакой информации о состоянии сети.

К сожалению, это происходит не в первый раз.

Мне нужна ваша помощь.

Давайте сделаем так, чтобы наш мониторинг работал при любых обстоятельствах! ММ: - Но давайте сначала синхронизируемся.

Я не заглядывал туда уже пару лет. Насколько я помню, мы отказались от Nagios и перешли на Zabbix около 8 лет назад. И сейчас у нас вроде бы 6 мощных серверов и около десятка прокси.

Я что-то путаю? МЧ: - Почти.

15 серверов, часть из которых виртуальные машины.

Самое главное, что оно не спасает нас в тот момент, когда мы больше всего в этом нуждаемся.

Как случайность — сервера тормозят и ничего не видно.

Мы попытались оптимизировать конфигурацию, но это не обеспечило оптимального прироста производительности.

ММ: - Ясно.

Вы что-то смотрели, уже что-то накопали из диагностики? МЧ: – Первое, с чем вам придется иметь дело, – это база данных.

MySQL постоянно загружается, сохраняя новые метрики, а когда Zabbix начинает генерировать кучу событий, база данных переходит в перегрузку буквально на несколько часов.

Про оптимизацию конфигурации я уже рассказывал, но буквально в этом году обновили железо: на серверах больше ста гигабайт памяти и дисковых массивов на SSD RAID — линейно наращивать в долгосрочной перспективе смысла нет. Что мы делаем? ММ: - Ясно.

В общем, MySQL — это база данных LTP. Видимо, для хранения архива метрик нашего размера он уже не подходит. Давайте разберемся.

МЧ: - Давайте!

Интеграция Zabbix и Clickhouse по итогам хакатона

Через некоторое время мы получили интересные данные:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Большую часть места в нашей базе занимал архив метрик и менее 1% использовалось для конфигурации, шаблонов и настроек.

К тому моменту мы уже больше года эксплуатировали решение Big Data на базе Clickhouse. Направление движения было для нас очевидно.

На нашем весеннем хакатоне я писал интеграцию Zabbix с Clickhouse для сервера и фронтенда.

На тот момент в Zabbix уже была поддержка ElasticSearch, и мы решили их сравнить.



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере



Сравнение Clickhouse и Elasticsearch

ММ: — Для сравнения мы генерировали ту же нагрузку, которую обеспечивает Zabbix-сервер, и смотрели, как будут вести себя системы.

Мы записывали данные пакетами по 1000 строк, используя CURL. Мы заранее предполагали, что Clickhouse будет более эффективен для того профиля нагрузки, который делает Zabbix. Результаты даже превзошли наши ожидания:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

При тех же условиях тестирования Clickhouse записал в три раза больше данных.

При этом обе системы очень эффективно потребляли (небольшое количество ресурсов) при чтении данных.

Но «Эlastix» требовал большого количества процессора при записи:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

В целом Clickhouse значительно превосходил Lastix по потреблению процессора и скорости.

При этом за счет сжатия данных Clickhouse использует в 11 раз меньше жесткого диска и выполняет примерно в 30 раз меньше дисковых операций:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

МЧ: — Да, работа Clickhouse с дисковой подсистемой реализована очень эффективно.

Вы можете использовать огромные диски SATA для баз данных и получать скорость записи в сотни тысяч строк в секунду.

Готовая система поддерживает шардинг, репликацию и очень проста в настройке.

Мы более чем довольны его использованием на протяжении всего года.

Чтобы оптимизировать ресурсы, вы можете установить Clickhouse рядом с существующей основной базой данных и тем самым сэкономить много процессорного времени и дисковых операций.

Мы перенесли архив метрик в существующие кластеры Clickhouse:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Мы настолько разгрузили основную базу данных MySQL, что смогли объединить ее на одной машине с сервером Zabbix и отказаться от выделенного сервера для MySQL.

Как работает опрос в Zabbix?

4 месяца назад ММ: – Ну что, можем забыть о проблемах с базой? МЧ: - Это точно! Еще одна проблема, которую нам нужно решить, — это медленный сбор данных.

Теперь все наши 15 прокси-серверов перегружены процессами SNMP и опроса.

И нет другого выхода, кроме как устанавливать новые и новые сервера.

ММ: - Большой.

Но сначала расскажите, как работает опрос в Zabbix? МЧ: — Короче говоря, есть 20 типов метрик и десяток способов их получения.

Zabbix может собирать данные либо в режиме «запрос-ответ», либо ждать новых данных через «Интерфейс Траппера».



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Стоит отметить, что в оригинальном Zabbix этот метод (Trapper) является самым быстрым.

Для распределения нагрузки имеются прокси-серверы:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Прокси могут выполнять те же функции сбора, что и Zabbix-сервер, получая от него задачи и отправляя собранные метрики через интерфейс Trapper. Это официально рекомендуемый способ распределения нагрузки.

Прокси также полезны для мониторинга удаленной инфраструктуры, работающей через NAT или медленный канал:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

ММ: – С архитектурой все понятно.

Надо смотреть источники.

Пару дней спустя

История о том, как победил nmap fping

ММ: — Кажется, я что-то откопал.

МЧ: - Скажи мне! ММ: — Я обнаружил, что Zabbix при проверке доступности проверяет максимум 128 хостов одновременно.

Я попробовал увеличить это число до 500 и убрать межпакетный интервал в их пинге (пинге) - это увеличило производительность вдвое.

Но хотелось бы большего количества.

МЧ: — В моей практике мне иногда приходится проверять доступность тысяч хостов, и я никогда не видел для этого ничего быстрее, чем nmap. Я уверен, что это самый быстрый способ.

Давай попробуем! Нам нужно значительно увеличить количество хостов на итерацию.

ММ: – Чек больше пятисот? 600? МЧ: - Хотя бы пару тысяч.

ММ: - ХОРОШО.

Самое главное, что я хотел сказать, это то, что я обнаружил, что большая часть опросов в Zabbix выполняется синхронно.

Нам обязательно нужно перевести его в асинхронный режим.

Тогда мы сможем резко увеличить количество метрик, собираемых поллерами, особенно если увеличить количество метрик на итерацию.

МЧ: - Большой! И когда? ММ: – Как обычно, вчера.

МЧ: – Мы сравнили обе версии fping и nmap:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Ожидалось, что на большом количестве хостов nmap будет в пять раз эффективнее.

Поскольку nmap проверяет только доступность и время ответа, мы перенесли расчет потерь на триггеры и существенно сократили интервалы проверки доступности.

Мы обнаружили, что оптимальное количество хостов для nmap составляет около 4 тысяч на итерацию.

Nmap позволил нам в три раза снизить затраты процессора на проверки доступности и сократить интервал со 120 секунд до 10.

Оптимизация опроса

ММ: «Затем мы начали проводить опросы.

Нас в основном интересовали обнаружение и агенты SNMP. В Zabbix опрос выполняется синхронно и приняты специальные меры для повышения эффективности системы.

В синхронном режиме недоступность хоста приводит к значительному ухудшению опроса.

Есть целая система состояний, есть специальные процессы — так называемые недостижимые поллеры, которые работают только с недоступными хостами:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Это комментарий, демонстрирующий матрицу состояний, всю сложность системы переходов, которые необходимы для того, чтобы система оставалась эффективной.

Кроме того, сам синхронный опрос довольно медленный:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Именно поэтому тысячи потоков поллера на десятках прокси не смогли собрать необходимый для нас объём данных.

Асинхронная реализация решила не только проблемы с количеством потоков, но и существенно упростила систему состояний недоступных хостов, поскольку для любого числа, проверенного за одну итерацию опроса, максимальное время ожидания составляло 1 таймаут:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Дополнительно мы модифицировали и улучшили систему опроса SNMP-запросов.

Дело в том, что большинство людей не могут одновременно отвечать на несколько запросов SNMP. Поэтому мы сделали гибридный режим, когда SNMP-опрос одного и того же хоста происходит асинхронно:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Это делается для всей пачки хостов.

Этот режим в конечном счете не медленнее полностью асинхронного, поскольку опрос полутора сотен значений SNMP все равно происходит гораздо быстрее, чем 1 таймаут. Наши эксперименты показали, что оптимальное количество запросов за одну итерацию составляет примерно 8 тысяч при SNMP-опросе.

В общей сложности переход в асинхронный режим позволил ускорить производительность опроса в 200 раз, в несколько сотен раз.

МЧ: — Полученные оптимизации опросов показали, что мы можем не только избавиться от всех прокси, но и сократить интервалы многих проверок, и прокси больше не понадобятся как способ разделения нагрузки.

Около трех месяцев назад

Меняйте архитектуру – увеличивайте нагрузку!

ММ: - Ну что, Макс, пора заняться делом? Мне нужен мощный сервер и хороший инженер.

МЧ: - Хорошо, давай спланируем это.

Пора сдвинуться с мертвой точки в 5 тысяч метрик в секунду.

Утро после обновления МЧ: - Миша, мы обновились, но к утру откатились.

Угадай, какой скорости удалось достичь? ММ: – 20 тысяч максимум.

МЧ: - Да, 25! К сожалению, мы находимся там, где начали.

ММ: - Почему? Вы делали какую-нибудь диагностику? МЧ: - Да, конечно! Вот, например, интересный топ:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

ММ: - Давай посмотрим.

Я вижу, что мы перепробовали огромное количество потоков опросов:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Но при этом переработать систему не смогли даже наполовину:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Да и общая производительность совсем небольшая, около 4 тысяч метрик в секунду:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Есть ли еще что-нибудь? МЧ: — Да, след одного из опросчиков:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

ММ: — Здесь хорошо видно, что процесс опроса ожидает «семафоры».

Это замки:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

МЧ: - Не понятно.

ММ: — Посмотрите, это похоже на ситуацию, когда куча потоков пытается работать с ресурсами, с которыми одновременно может работать только один.

Тогда все, что они смогут сделать, это поделиться этим ресурсом с течением времени:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

А общая производительность работы с таким ресурсом ограничена скоростью одного ядра:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Есть два способа решить эту проблему.

Обновите аппаратную часть машины, переключитесь на более быстрые ядра:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Либо менять архитектуру и заодно менять нагрузку:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

МЧ: — Кстати, на тестовой машине мы будем использовать меньше ядер, чем на боевой, но по частоте на одно ядро они в 1,5 раза быстрее! ММ: - Прозрачный? Вам нужно посмотреть код сервера.



Путь к данным на сервере Zabbix

МЧ: — Чтобы разобраться, мы начали анализировать, как передаются данные внутри Zabbix-сервера:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Классная картинка, правда? Давайте пройдемся по шагам, чтобы было более-менее понятно.

За сбор данных отвечают потоки и сервисы:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Собранные метрики они передают через сокет менеджеру препроцессора, где они сохраняются в очередь:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

«Менеджер препроцессора» передает данные своим воркерам, которые выполняют инструкции предварительной обработки и возвращают их обратно через тот же сокет:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

После этого менеджер препроцессора сохраняет их в кэше истории:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Оттуда их забирают сборщики истории, которые выполняют довольно много функций: например, расчет триггеров, заполнение кэша значений и самое главное сохранение метрик в хранилище истории.

В общем, процесс сложный и очень запутанный.



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

ММ: — Первое, что мы увидели, это то, что большинство потоков конкурируют за так называемый «кеш конфигурации» (область памяти, где хранятся все конфигурации сервера).

Особенно много блокировок выполняют потоки, отвечающие за сбор данных:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

.

так как в конфигурации хранятся не только метрики с их параметрами, но и очереди, из которых поллеры берут информацию о том, что делать дальше.

Когда опросщиков много и один блокирует конфигурацию, остальные ждут запросов:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере



Опросники не должны конфликтовать



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Поэтому первое, что мы сделали — разделили очередь на 4 части и разрешили поллерам блокировать эти очереди, эти части одновременно, в безопасных условиях:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Это устранило конкуренцию за кэш конфигурации, а скорость опросов значительно возросла.

Но тут мы столкнулись с тем, что менеджер препроцессора начал накапливать очередь заданий:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере



Менеджер препроцессора должен уметь расставлять приоритеты

Это происходило в тех случаях, когда ему не хватало работоспособности.

Тогда все, что он мог сделать, — это аккумулировать запросы от процессов сбора данных и складывать их буфер до тех пор, пока он не съест всю память и не упадет:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Чтобы решить эту проблему, мы добавили второй сокет, специально предназначенный для воркеров:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Таким образом, у менеджера препроцессора появилась возможность расставить приоритеты в своей работе и в случае роста буфера задача — замедлить удаление, предоставив воркерам возможность забрать этот буфер:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Потом мы обнаружили, что одной из причин замедления были сами рабочие, поскольку они боролись за совершенно неважный для их работы ресурс.

Мы задокументировали эту проблему как исправление ошибки, и она уже решена в новых версиях Zabbix:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере



Увеличиваем количество розеток — получаем результат

Далее узким местом стал сам менеджер препроцессора, так как он один поток.

Он упирался в скорость ядра, давая максимальную скорость около 70 тысяч метрик в секунду:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Поэтому мы сделали четыре, с четырьмя комплектами розеток, рабочие:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

И это позволило нам увеличить скорость примерно до 130 тысяч метрик:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Нелинейность роста объясняется тем, что появилась конкуренция за кэш истории.

За него соревновались 4 менеджера препроцессора и сборщики истории.

На данный момент мы получали примерно 130 тысяч метрик в секунду на тестовой машине, используя примерно 95% процессора:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Около 2,5 месяцев назад

Отказ от snmp-сообщества увеличил НВП в полтора раза

ММ: – Макс, мне нужна новая тестовая машина! Мы уже не вписываемся в нынешнюю.

МЧ: - Что у тебя есть сейчас? ММ: – Сейчас – 130 тысяч NVP и готовый процессор.

МЧ: - Ух ты! Прохладный! Подождите, у меня два вопроса.

По моим расчетам, наша потребность составляет около 15-20 тысяч метрик в секунду.

Почему нам нужно больше? ММ: «Я хочу закончить работу».

Хотелось бы посмотреть, сколько мы сможем выжать из этой системы.

МЧ: - Но… ММ: «Но для бизнеса это бесполезно».

МЧ: - Ясно.

И второй вопрос: можем ли мы поддерживать то, что имеем сейчас, самостоятельно, без помощи разработчика? ММ: - Я не думаю.

Изменение способа работы кэша конфигурации является проблемой.

Он влияет на изменения в большинстве потоков и его довольно сложно поддерживать.

Скорее всего, поддерживать его будет очень сложно.

МЧ: «Тогда нам нужна какая-то альтернатива».

ММ: - Есть такой вариант. Мы можем перейти на быстрые ядра, отказавшись при этом от новой системы блокировки.

Мы все равно получим производительность в 60-80 тысяч метрик.

При этом весь остальной код мы можем оставить.

Clickhouse и асинхронный опрос будут работать.

И его будет легко поддерживать.

МЧ: - Удивительный! Предлагаю остановиться здесь.

После оптимизации серверной части мы наконец смогли запустить новый код в производство.

Мы отказались от части изменений в пользу перехода на машину с быстрыми ядрами и минимизации количества изменений кода.

Мы также упростили настройку и исключили макросы из элементов данных, где это возможно, поскольку они вводят дополнительную блокировку.



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Например, отказ от макроса snmp-community, который часто встречается в документации и примерах, в нашем случае позволил дополнительно ускорить NVP примерно в 1,5 раза.

Спустя два дня производства

Удаление всплывающих окон с историей инцидентов

МЧ: – Миша, пользуемся системой уже два дня, все работает. Но только тогда, когда все работает! У нас были запланированы работы по переносу достаточно большого сегмента сети, и мы еще раз проверили руками, что поднялось, а что нет. ММ: - Не может быть! Мы проверили все 10 раз.

Сервер мгновенно обрабатывает даже полную недоступность сети.

МЧ: - Да я все понимаю: сервер, база данных, топ, аустат, логи - все быстро.

Но смотрим веб-интерфейс, а там на сервере "в полке" стоит процессор и вот это:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

ММ: - Ясно.

Давайте посмотрим Интернет. Мы обнаружили, что в ситуации, когда было большое количество активных инцидентов, большинство живых виджетов начинали работать очень медленно:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Причиной этого стало создание всплывающих окон с историей инцидентов, которые генерируются для каждого элемента списка.

Поэтому мы отказались от генерации этих окон (закомментировали 5 строк в коде), и это решило наши проблемы.

Время загрузки виджетов, даже когда они полностью недоступны, сократилось с нескольких минут до приемлемых для нас 10-15 секунд, а историю по-прежнему можно просмотреть, нажав на время:

HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

После работы.

2 месяца назад МЧ: - Миша, ты уходишь? Нам надо поговорить.

ММ: - Я не собирался.

Опять что-то с Zabbix? МЧ: - Нет, расслабься! Просто хотел сказать: все работает, спасибо! У меня есть пиво.



Zabbix эффективен

Zabbix — достаточно универсальная и богатая система и функции.

Его можно использовать для небольших установок прямо из коробки, но по мере роста потребностей его необходимо оптимизировать.

Для хранения большого архива метрик используйте подходящее хранилище:

  • можно использовать встроенные инструменты в виде интеграции с «Эlastiksearch» или выгрузки истории в текстовые файлы (доступно с четвертой версии);
  • Вы можете воспользоваться нашим опытом и интеграцией с Clickhouse.
Чтобы кардинально увеличить скорость сбора метрик, собирайте их асинхронными методами и передавайте через интерфейс траппера на сервер Zabbix; или вы можете использовать патч, чтобы сделать опросы Zabbix асинхронными.

Zabbix написан на C и достаточно эффективен.

Решение нескольких узких мест архитектуры позволяет еще больше повысить его производительность и, по нашему опыту, получить более 100 тысяч метрик на однопроцессорной машине.



HighLoad++, Михаил Макуров, Максим Чернецов (Интерсвязь): Zabbix, 100kNVPS на одном сервере

Теги: #it-инфраструктура #Системное администрирование #Администрирование серверов #Конференции #zabbix

Вместе с данным постом часто просматривают: