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

Следващата конференция HighLoad++ ще се проведе на 6 и 7 април 2020 година в Санкт Петербург. Подробности и билети. от връзката. HighLoad++ Москва 2018. Зала «Москва». 9 ноември, 15:00. Тезиси и презентация.

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

* Мониторинг — онлайн и аналитика.
* Основни ограничения на платформата ZABBIX.
* Решение за мащабиране на хранилището за аналитика.
* Оптимизация на сървъра ZABBIX.
* Оптимизация на UI.
* Опит в експлоатацията на системата при натоварвания над 40k NVPS.
* Кратки заключения.

Михаил Макуров (по-нататък – ММ): – Всичко приветствам!

Максим Чернецов (по-нататък – МЧ): – Добър ден!

ММ: – Позволете ми да представя Максима. Макс е талантлив инженер, най-добрият мрежовик, когото познавам. Максим се занимава със мрежи и услуги, тяхното развитие и експлоатация.

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

МЧ: – А аз бих искал да разкажа за Михаил. Михаил е разработчик на C. Той е написал няколко решения с високо натоварване за обработка на трафик за нашата компания. Живеем и работим в Урал, в града на суровите мъже Челябинск, в компания „Интерсвяизн“. Нашата компания е доставчик на интернет услуги и кабелна телевизия за един милион души в 16 града.

ММ: – И заслужава да се каже, че „Интерсвяизн“ е много повече от просто доставчик, това е ИТ компания. Повечето от нашите решения са направени от нашия ИТ отдел.

А: от сървъри, обработващи трафик, до кол център и мобилно приложение. В ИТ отдела в момента има около 80 души с много и много разнообразни компетенции.

За Zabbix и неговата архитектура

МЧ: – А сега ще опитам да поставя личен рекорд и за една минута да кажа какво представлява Zabbix (по-нататък – „Заббикс“).

„Заббикс“ се позиционира като система за мониторинг „извън кутията“ на ниво предприятие. В него има много функции, които улесняват живота: развити правила за ескалация, API за интеграция, групиране и авторазкриване на хостове и метрики. „Заббикс“ разполага с така наречените средства за мащабиране – прокси. „Заббикс“ е система с отворен код.

Кратко за архитектурата. Може да се каже, че тя се състои от три компонента:

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

  • Сървър. Написан на C. С доста сложна обработка и предаване на информация между потоци. Цялата обработка става в него: от получаване до запазване в база.
  • Всички данни се съхраняват в база. „Заббикс“ поддържа 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“ записваше три пъти повече данни. И двете системи обаче изключително ефективно консумираха (малко ресурси) при четене на данни. Но на „Elasticsearch“ му беше необходим голямо количество процесорна мощност при запис:

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

Общо „Clickhouse“ значително надминава „Elasticsearch“ по потребление на процесора и по скорост. В същото време благодарение на компресията на данните „Clickhouse“ използва 11 пъти по-малко място на твърдия диск и извършва приблизително 30 пъти по-малко дискови операции:

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

МЧ: – Да, работата с дисковата подсистема в „Clickhouse“ е реализирана много ефективно. За базите може да се използват огромни SATA дискове и да се получи скорост на запис в стотици хиляди реда в секунда. Системата „извън кутията“ поддържа шардване, репликация и е изключително лесна за настройка. Ние сме повече от доволни от експлоатацията ѝ през последната година.

За оптимизация на ресурсите може да се инсталира „Clickhouse“ до съществуващата основна база, спестявайки много процесорно време и дискови операции. Архивът на метриките прехвърлихме на вече наличните кластери на „Clickhouse“:

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

Ние толкова разтоварихме основната MySQL база, че можехме да я обединим на една машина с „Zabbix“ сървъра и да се откажем от отделен сървър за MySQL.

Как е устроен polling в Zabbix?

Преди 4 месеца

ММ: – Ну, проблемите с базата вече могат да бъдат забравени?

МЧ: – Това е точно! Другата задача, която трябва да решим, е бавният сбор на данни. Сега всички нашите 15 прокси-сървъра са претоварени с процесите на SNMP и поллинга. И няма какво друго да направим, освен да инсталираме нови и нови сървъри.

ММ: – Отлично. Но първо ми разкажи как е организиран поллингът в „Zabbix“?

МЧ: – Накратко, съществуват 20 типа метрики и десетки начини за тяхното получаване. „Zabbix“ може да събира данни или в режим на „запитване – отговор“, или да чака нови данни чрез „Trap Interface“.

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 ни позволи да намалим разходите за CPU за проверки на наличността три пъти и да съкратим интервала от 120 секунди на 10 секунди.

Оптимизация на поллинга

ММ: – След това се захванахме с поллерите. Основно ни интересуваше извличането на данни чрез SNMP и агенти. В „Zabbix“ поллингът е реализиран синхронно и са приети специални мерки за увеличаване на ефективността на системата. В синхронен режим недостъпността на хостовете предизвиква значително влошаване на поллинга. Съществува цяла система от състояния, има специални процеси – така наречените unreachable-поллери, които работят само с недостъпни хостове:

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

Това е коментар, който демонстрира матрицата на състоянията, цялата сложност на системата на преходи, необходима за поддържане на ефективността на системата. Освен това, самият синхронен поллинг е достатъчно бавен:

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

Точно затова хиляди потоци поллери на десетки прокси не можаха да съберат необходимото количество данни за нас. Асинхронната реализация реши не само проблемите с количеството на потоките, но и значително опрости системата на състоянията на недостъпните хостове, тъй като при всяко количество, проверявано в една итерация на поллинга, максималното време на изчакване беше 1 тайм-аут:

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

Допълнително модифицирахме и усъвършенствахме системата за поллинг на SNMP заявки. Работата е там, че повечето не могат да отговарят на няколко SNMP заявки едновременно. Затова създадохме хибриден режим, в който SNMP поллингът на един и същ хост се извършва асинхронно:

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

Това се прави за цяла партида хостове. Такъв режим в крайна сметка не е по-бавен от напълно асинхронния, тъй като анкетата на около 150 SNMP стойности все пак е много по-бърза от 1 тайм-аут.

Нашите експерименти показаха, че оптималното количество заявки в една итерация е приблизително 8 хиляди при SNMP поллинг. Общото преминаване към асинхронен режим позволи да се ускори производителността на поллинга 200 пъти, в хиляди пъти.

МЧ: – Получените оптимизации полинг показаха, че не само можем да се отървем от всички проксита, но и да съкратим интервалите за много проверки, а прокситата ще станат ненужни като метод за разпределение на натоварването.

Около три месеца назад

Промени архитектурата – увеличи натоварването!

ММ: – Well, Max, is it time to go productive? I need a powerful server and a good engineer.

МЧ: – Добре, да го планираме. Време е да се преместим от мъртвата точка на 5000 метрики в секунда.

Сутринта след ъпгрейда

МЧ: – Миша, обновихме се, но до сутринта се върнахме обратно… Познай колко скорост успяхме да постигнем?

ММ: – Около 20000 максимално.

МЧ: – Ага, 25! За съжаление, сме на същото ниво, от което започнахме.

ММ: – Защо така? Направихте ли някаква диагностика?

МЧ: – Да, разбира се! Например, интересен top:

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

ММ: – Нека да видим. Виждам, че сме опитвали огромно количество потоци за полинг:

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

Но в същото време не успяхме да утилизируем системата дори наполовина:

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

Общата производителност е доста малка, около 4000 метрики в секунда:

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

Има ли нещо друго?

МЧ: – Да, strace на един от поллерите:

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

ММ: – Тук ясно се вижда, че процесът на полинг изчаква "семафори". Това са блокировки:

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

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

ММ: – Виж, това изглежда като ситуация, в която куп потоци се опитват да работят с ресурса, с който може да работи само един. Тогава всичко, което могат да правят, е да разделят този ресурс по време:

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

И общата производителност при работа с такъв ресурс е ограничена до скоростта на едно ядро:

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

Този проблем може да се реши по два начина.

Да ъпгрейднете машината, да преминете към по-бързи ядра:

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

Или да промените архитектурата и паралелно – натоварването:

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

МЧ: – Между другото, на тестовата машина ще пуснем по-малко ядра, отколкото на производствената, но те ще бъдат с 1.5 по-бързи по честота на ядро!

ММ: – Ясно ли е? Трябва да се погледне кода на сървъра.

Пътят на данните в сървъра Zabbix

МЧ: – За да разберем, започнахме да анализираме как данните се предават вътре в сървъра на "Заббикс":

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

Страхотна картинка, нали? Нека преминем през нея стъпка по стъпка, за да проясним малко. Има потоци и услуги, отговорни за събиране на данни:

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

Събраните метрики те предават през сокет на Preprocessor manager, където се запазват в опашка:

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 на един сървър

След това открихме, че една от причините за забавянето бяха самите работници, тъй като те съперничеха за съвсем ненужен ресурс за тяхната работа. Този проблем оформяхме с bug-fix и в новите версии на „Zabbix“ той вече е решен:

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

Увеличаваме броя на сокетите – получаваме резултат

След това самият предварител на процесора стана тесен момент, тъй като това е един поток. Той се упираше в скоростта на ядрото, давайки максимална скорост около 70 хиляди метрики в секунда:

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

Затова направихме четири, с четири комплекта сокети, работници:

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

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

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

Нелинейността на растежа се обяснява с появата на конкуренция за кеша на историята. За него се конкурираха 4 мениджъра на предварителни обработватели и синхронизатори на историята. Към този момент получавахме на тестовата машина около 130 хиляди метрики в секунда, използвайки я около 95% по процесора:

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

Около 2.5 месеца назад

Отказът от snmp-community увеличи NVPs с 1.5 пъти

ММ: – Макс, нужна ми е нова тестова машина! В текущата не се побираме вече.

МЧ: – А какво имаме сега?

ММ: – Сега – 130k NVPs и процесор "в рафта".

МЧ: – Ух, страхотно! Изчакай, имам два въпроса. Според моите изчисления, нашата нужда е около 15-20 хиляди метрики в секунда. Защо ни е повече?

ММ: – Искам да завърша нещата до край. Искам да видя колко можем да извлечем от тази система.

МЧ: – Но...

ММ: – Но за бизнеса е безполезно.

МЧ: – Разбирам. И вторият въпрос: могат ли да поддържаме сегашното без помощ от разработчика?

ММ: – Не мисля. Промените в работата с конфигурационния кеш са проблем. Те засягат промените в повечето потоци и са достатъчно сложни за поддръжка. Вероятно ще бъде много трудно да се поддържа.

МЧ: – Тогава трябва да се помисли за някаква алтернатива.

ММ: – Има такъв вариант. Можем да преминем на бързи ядра, отказвайки се от новата система за блокиране. Ще получим производителност от 60-80 хиляди метрики. В същото време можем да запазим целия останал код. "ClickHouse", асинхронният polling ще работят. И това ще бъде лесно за поддръжка.

МЧ: – Чудесно! Предлагам да спрем тук.

След оптимизация на сървърната част най-накрая успяхме да пуснем новия код в продуктив. Отказахме се от част от промените в полза на преминаването на машина с бързи ядра и минимизиране на количеството промени в кода. Също така опростихме конфигурацията и, където е възможно, се отказахме от макросите в елементите на данните, тъй като те са източник на допълнителни блокировки.

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

Например, отказът от често срещания в документацията и примерите макрос snmp-community в нашия случай позволи допълнително да ускори NVPs с около 1.5 пъти.

След два дни в продуктив

Премахваме изскачащите прозорци на историята на инцидентите

МЧ: – Миша, използваме системата от два дни и всичко работи. Но само когато всичко функционира! Имахме планирани работи с прехвърляне на голям сегмент от мрежата, и отново проверявахме на ръка какво работи и какво – не.

ММ: – Не може да бъде! Проверихме всичко 10 пъти. Сървърът обработва дори пълната недостъпност на мрежата моментално.

МЧ: – Разбирам всичко: сървър, база, top, austat, логове – всичко е бързо… Но гледаме уеб интерфейса, а там – процесорът е "в полка" на сървъра и това:

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

ММ: – Ясно. Нека да погледнем уеб интерфейса. Открихме, че в ситуации, когато има голямо количество активни инциденти, повечето оперативни уиджети започват да работят много бавно:

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

Причината беше генерирането на изскачащи прозорци с история на инцидентите, които се генерират за всеки елемент в списъка. Затова отказахме да генерираме тези прозорци (коментирахме 5 реда в кода) и това реши нашите проблеми.

Времето за зареждане на уиджетите дори при пълна недостъпност намаля от няколко минути до допустимите за нас 10-15 секунди, а историята все още може да се вижда с кликване по времето:

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

След работата. 2 месеца назад.

МЧ: – Миша, тръгваш ли? Имам нещо за казване.

ММ: – Не съм планирал. Отново нещо с "Заббикс"?

МЧ: – Не, успокой се! Просто исках да кажа: всичко работи, благодаря! От мен бира.

Zabbix е ефективен.

"Заббикс" е достатъчно универсална и богата система и функция. Може да се използва за малки инсталации "извън кутията", но с увеличаването на нуждите трябва да се оптимизира. За съхранение на голям архив от метрики използвайте подходящо хранилище:

  • можете да използвате вградените средства под формата на интеграция с "Еластиксърч" или експортиране на историята в текстови файлове (достъпно от четвъртата версия);
  • можете да използвате нашия опит и интеграцията с "Кликхаус".

За основно увеличаване на скоростта на събиране на метрики, събирайте ги асинхронни методи и ги предавайте през траппер интерфейса в "Заббикс" сървъра; или можете да използвате пач за асинхронността на поллерите на самия "Заббикс".

Zabbix е написан на C и е достатъчно ефективен. Някои архитектурни подобрения позволяват допълнително увеличаване на производителността му и, според нашия опит, позволяват да се получат повече от 100 хиляди метрики на еднопроцесорна машина.

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

Този патч Zabbix

ММ: – Искам да добавя няколко момента. Цялото текущо представяне, всички тестове, цифрите, представени тук, касаят конкретната конфигурация, която използваме. От нея в момента извличаме около 20 хиляди метрики в секунда. Ако се опитвате да разберете дали това ще работи при вас – можете да сравните. Това, което споделихме днес, е публикувано в GitHub под формата на патч: github.com/miklert/zabbix

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

Патчът включва:

  • пълна интеграция с ClickHouse (как на сървърите на Zabbix, така и на фронтенда);
  • решаване на проблеми с мениджъра на предварителната обработка;
  • асинхронно polling.

Патчът е съвместим с всичките версии 4, включително и lts. Най-вероятно, с минимални промени, той ще работи и на версия 3.4.

Благодаря ви за вниманието.

Въпроси

Въпрос от публиката (по-долу – В): – Добър ден! Кажете, моля, имате ли планове за активно взаимодействие с екипа на Zabbix или те с вас, така че това да не е патч, а нормално поведение на Zabbix?

ММ: – Да, част от промените определено ще бъдат комитнати. Нещо от тях ще остане в патча.

А: – Благодаря ви много за отличната презентация! Кажете, моля, след прилагането на патча, поддръжката от страна на Zabbix ще остане ли и как ще можем да обновим до по-високи версии? Ще имаме ли възможност да обновим Zabbix след вашия патч до 4.2, 5.0?

ММ: – За поддръжката не мога да кажа. Ако бях техническа поддръжка на Zabbix, вероятно бих казал не, защото това е чужд код. Що се отнася до кодовата база 4.2, нашата позиция е следната: "Ние ще вървим с времето и сами ще се обновяваме до следващата версия". Следователно, за известно време ще публикуваме патчи за обновените версии. Както вече казах в презентацията: количеството на промените с версиите е все още достатъчно малко. Мисля, че преминаването от 3.4 на 4 ни отне около 15 минути. Имаше някои промени, но неособено важни.

А: – Тоест планирате да поддържате своя патч и можем смело да го инсталираме на продукция, получавайки обновления по някакъв начин в бъдеще?

ММ: – Категорично препоръчваме. Това решава много проблеми за нас.

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

ММ: Ако ви интересуват детайлите, „Кликхаус“ използва така наречената библиотека за история. Тя е независима – това е копие на поддръжката на „Еластикс“, тоест е конфигурационно променлива. Поллингът променя само поллерите. Считаме, че това ще работи дълго.

А: Много благодаря. И можете ли да ми кажете дали има документация за направените промени?

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

ММ: Документацията е пач. Очевидно, с въвеждането на „Кликхаус“ и новите типове поллери се появяват нови конфигурационни опции. На линка от последния слайд има кратко описание как да се ползва.

За смяната на fping с nmap

А: Как в крайна сметка реализирахте това? Можете ли с конкретни примери: имате страппери и външен скрипт? Как проверявате толкова бързо огромно количество хостове? Как извличате тези хостове? Трябва ли да се нахрани nmap с тях, да ги получите отнякъде, да ги поставите и да стартирате нещо?

ММ: Страхотно. Много уместен въпрос! Същността е следната. Ние модифицирахме библиотеката (ICMP пинг, част от „Заббикс“) за ICMP проверки, в които е зададено количеството на пакетите – единица (1), а кодът се опитва да използва nmap. Тоест, това е вътрешна работа на „Заббикс“, стана вътрешна работа на пингера. Следователно, не се изисква никаква синхронизация или използване на траппер. Това беше направено съзнателно, за да се запази системата цялостна и да не се занимаваме със синхронизация на две бази – какво да проверяваме, да се качва чрез поллер, без да се счупи ли качването?

А: Работи ли и за прокси?

ММ: Да, но не проверихме. Кодът за поллинг и в „Заббикс“, и на сървера е единен. Трябва да работи. Още веднъж подчертавам: производителността на системата е такава, че не се нуждаем от прокси.

МЧ: Правилният отговор на въпроса е: „А защо ви е прокси при такава система?“ Само заради NAT или за мониторинг през някакъв бавен канал...

А: А вие използвате „Заббикс“ като алартор, ако съм разбрал правилно. Или графиките (където е архивният слой) са преминали в друга система, като Grafana? Или не използвате тази функционалност?

ММ: – Подчертавам отново: ние направихме пълна интеграция. Изпращаме историята в "Кликхаус", но променихме php фронтенда. Php фронтенд изтегля данни от "Кликхаус" и генерира всички графики от там. Ако трябва да бъда честен, имаме част, която черпи данни от същия "Кликхаус", от данните на "Заббикс", за да генерира данни в други системи за графично отображение.

МЧ: – В "Графана", включително.

Как беше взето решението и заделени ли са ресурсите?

А: – Споделете малко вътрешната кухня. Как беше взето решението, че е необходимо да бъдат заделени ресурси за сериозно преосмисляне на продукта? Това е, всъщност, определен риск. И моля, кажете, в контекста на това, че планирате да поддържате нови версии: как обосновавате това решение от гледна точка на управлението?

ММ: – Явно, драматургията на историята не беше много добре представена. Попаднахме в ситуация, в която трябваше да действаме, и следвахме по същество две паралелни направления:

  • Едното се занимаваше с внедряването на система за мониторинг с нови методи: мониторинг като услуга, стандартен набор от опенсорсни решения, които комбинираме и след това се опитваме да променим бизнес процесите, за да работим с новата система за мониторинг.
  • Паралелно с това, имаме ентусиаст-програмист, който се занимаваше с това (говорейки за себе си). Така се случи, че той победи.

А: – И какъв е размерът на екипа?

МЧ: – Той е пред вас.

А: – Тоест, както винаги, нужен е пасионарий?

ММ: – Не знам какво е пасионарий.

А: – В този случай, вероятно, вие. Много благодаря, вие сте страхотни.

ММ: – Благодаря.

За патчовете за Zabbix

А: – За система, която използва прокси (например в разпределени системи), възможно ли е вашето решение да бъде адаптирано и патчирано, да кажем, за поллерите, проксита и частично предобработвача на самия "Заббикс"; и тяхното взаимодействие? Възможно ли е съществуващите разработки да бъдат оптимизирани за система с няколко прокси?

ММ: – Знам, че "Заббикс"-сървърът се изгражда с помощта на прокси (компилира се и получаваме код). Ние не сме го тествали в продукция. Не съм сигурен в това, но според мен, предобработвача-мениджър не се използва в прокси. Задачата на проксито е да вземе набор от метрики от "Заббикс", да ги сподели (той също така записва конфигурацията, локалната база) и да ги върне обратно на "Заббикс"-сървъра. Предобработката ще бъде извършена впоследствие от самия сървър, когато я получи.

Интересът към проксита е разбираем. Ще го проверим. Темата е интересна.

А: – Идеята беше: ако можете да патчвате поллерите, можете да патчвате и прокситата и да адаптирате взаимодействието със сървъра, а препроцесорът да бъде приспособен само на сървъра за тези цели.

ММ: – Мисля, че е дори по-просто. Вземате кода, налагате патч, след това го конфигурирате по начина, по който ви е нужно – изграждате прокси-сервери (например, с ODBC) и разпространявате патчвания код из системите. Където е необходимо – изграждате прокси, където е необходимо – сървър.

А: – Допълнително патчване на предаването на проксито към сървъра вероятно няма да е нужно?

МЧ: – Не, то е стандартно.

ММ: – Всъщност не се чу някоя от идеите. Винаги сме спазвали баланс между изблиците на идеи и количеството изменения, лекотата на поддръжка.

Пуснете видеото

Малко реклама 🙂

Благодарим ви, че оставате с нас. Харесвате ли нашите статии? Искате ли да виждате повече интересни материали? Подкрепете ни, като направите поръчка или препоръчате на познати, облачни VPS за разработчици от $4.99, уникален аналог на entry-level сървъри, който е създаден от нас за вас: Цялата истина за VPS (KVM) E5-2697 v3 (6 ядра) 10GB DDR4 480GB SSD 1Gbps от $19 или как да делите правилно сървър? (с налични опции за RAID1 и RAID10, до 24 ядра и до 40GB DDR4).

Dell R730xd на половин цена в дата центъра Equinix Tier IV в Амстердам? Всичко това само при нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB от 199 $ в Нидерландия! Dell R420 — 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от 99 $! Чете се за това Как да построим инфраструктура от корпоративен клас с помощта на сървъри Dell R730xd E5-2650 v4 на стойност 9000 евро за малко пари?

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster