HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A következő HighLoad++ konferencia 2020. április 6-án és 7-én kerül megrendezésre Szentpéterváron. Részletek és jegyek a linken. HighLoad++ Moszkva 2018. Terem: „Moszkva”. November 9., 15:00. Összefoglalók és előadás.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

* Monitoring — online és analitika.
* A ZABBIX platform főbb korlátai.
* Megoldás az analitika tárolásának skálázására.
* A ZABBIX szerver optimalizálása.
* UI optimalizálás.
* Több mint 40k NVPS terhelés esetén szerzett tapasztalatok.
* Röviden a következtetések.

Mihail Makurov (a továbbiakban MM): – Üdvözlök mindenkit!

Maxim Csernyecov (a továbbiakban MCS): – Jó napot kívánok!

MM: – Engedjék meg, hogy bemutassam Maxit. Max egy tehetséges mérnök, a legjobb hálózati szakember, akit ismerek. Maxim a hálózatokkal és szolgáltatások fejlesztésével és üzemeltetésével foglalkozik.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MCS: – Én pedig Mihailról szeretnék beszélni. Mihail C nyelven programozó. Számos nagy terhelést igénylő forgalomkezelő megoldást írt a cégünk számára. Az Uralban élünk és dolgozunk, a kemény férfiak városában, Cseljabinszkban, az „Interszvjaz” cégnél. Cégünk internetes és kábeltévé szolgáltatást nyújt egymillió embernek 16 városban.

MM: – És érdemes megemlíteni, hogy az „Interszvjaz” sokkal több, mint egy egyszerű szolgáltató, ez egy IT-cég. A megoldásaink nagy része a mi IT-osztályunk munkájának eredménye.

A: a forgalmat kezelő szerverektől kezdve a call centerig és a mobilalkalmazásig. Az IT-osztályon jelenleg körülbelül 80 ember dolgozik, nagyon sokféle kompetenciával.

A Zabbixról és annak architektúrájáról

MCS: – Most pedig megpróbálom felállítani a személyes rekordomat, és egy perc alatt elmondani, mi is a Zabbix (a továbbiakban „Zabbix”).

A „Zabbix” úgy pozicionálja magát, mint egy vállalati szintű monitoring rendszer, amely „dobozból ki” működik. Számos hasznos funkciónk van: fejlett eszkalációs szabályok, API integrációhoz, hosztok és metrikák csoportosítására és automatikus felfedezésére. A „Zabbix”-ban vannak úgynevezett skálázási eszközök – proxyk. A „Zabbix” nyílt forráskódú rendszer.

Röviden az architektúráról. Mondhatjuk, hogy három komponensből áll:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

  • Szerver. C nyelven íródott. Elég bonyolult információfeldolgozással és -átadással a szálak között. Az összes feldolgozás itt történik: az adatfogadástól a tárolásig.
  • Minden adat az adatbázisban tárolódik. A „Zabbix” támogatja a MySQL, PostgreSQL és Oracle rendszereket.
  • A web interface is written in PHP. Most systems come with the Apache server, but it works more efficiently in conjunction with nginx + php.

Today we would like to share a story from our company related to "Zabbix"…

A story from the life of the company "Intersvyaz". What do we have and what do we need?

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren
5 or 6 months ago. One day after work…

MCS: – Misha, hi! Glad I caught you – we need to talk. We had issues with monitoring again. During a major outage, everything slowed down, and there was no information about the network status. Unfortunately, this is not the first time this has happened. I need your help. Let's make sure our monitoring works under any circumstances!

MM: – But first, let’s synchronize. I haven’t looked at it in a couple of years. As far as I remember, we gave up Nagios and switched to "Zabbix" about 8 years ago. And now we seem to have 6 powerful servers and about a dozen proxies. Am I mixing things up?

MCS: – Almost. We have 15 servers, some of which are virtual machines. The main issue is that this doesn't save us at the moment when we need it the most. When an outage happens, the servers slow down, and nothing is visible. We tried to optimize the configuration, but it doesn't yield any optimal performance gains.

MM: – I see. Have you looked at anything, dug up any diagnostics?

MCS: – The first thing to deal with is the database. MySQL is constantly overloaded, saving new metrics, and when "Zabbix" starts generating a ton of events – the database locks itself for literally several hours. I’ve already told you about the configuration optimization, and just this year we updated the hardware: there are over a hundred gigs of memory on the servers and SSD RAID arrays – there’s no point in growing it linearly any further. What shall we do?

MM: – I see. Generally, MySQL is a LTP database. It seems it's no longer suitable for storing an archive of metrics of our size. Let's figure it out.

MCS: – Let's do it!

Integration of Zabbix and Clickhouse as a result of the hackathon

After a while, we received interesting data:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A legtöbb hely a rendszerünkben a metrikák archívumával volt elfoglalva, és kevesebb mint 1%-ot használtunk konfigurációra, sablonokra és beállításokra. Ekkor már több mint egy éve használtuk a Big Data megoldást Clickhouse alapokon. Az irányunk egyértelmű volt. A tavaszi Hackathonon írtam egy integrációt a Zabbix és a Clickhouse között a szerver és a frontend számára. Abban az időben a Zabbix már támogatta az ElasticSearch-t, és úgy döntöttünk, hogy összehasonlítjuk őket.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Clickhouse és Elasticsearch összehasonlítása

MM: – Az összehasonlításhoz olyan terhelést generáltunk, mint amit a Zabbix szerver biztosít, és megnéztük, hogyan fogják viselni a rendszerek. 1000 soros csomagokban írtunk adatokat, CURL-t használtunk. Előre feltételeztük, hogy a Clickhouse hatékonyabb lesz a Zabbix által generált terhelési profilhoz képest. Az eredmények még a vártnál is jobbakk lettek:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Azonos körülmények között a teszteken a Clickhouse háromszor annyi adatot írt. Eközben mindkét rendszer nagyon hatékonyan használta az erőforrásokat az adatok olvasásakor. De az ElasticSearch esetében íráskor nagy CPU kapacitásra volt szükség:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Összességében a Clickhouse lényegesen túlszárnyalta az ElasticSearch-t CPU fogyasztásban és sebességben. A tömörítési technológia miatt a Clickhouse 11-szer kevesebb helyet használ a merevlemezen, és körülbelül 30-szor kevesebb lemezműveletet végez:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MCS: – Igen, a Clickhouse lemezkezelése rendkívül hatékonyan van megvalósítva. Határtalan SATA lemezeket használhatunk az adatbázisokhoz, és akár százezernyi sor másodpercenkénti írási sebességet érhetünk el. A rendszer „out of the box” támogatja a shardingot és a replikációt, és meglehetősen egyszerű a beállítása. Több mint elégedettek vagyunk a tavalyi üzemeltetésével.

Az erőforrások optimalizálása érdekében a Clickhouse-t közvetlenül a meglévő fő adatbázis mellett is telepíthetjük, ezáltal rengeteg CPU időt és lemezműveletet takaríthatunk meg. Az archív metrikákat átvittük a már meglévő Clickhouse klaszterekre:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Annyira tehermentesítettük a fő MySQL adatbázist, hogy egy gépen egyesíthettük a Zabbix szerverrel, és lemondhattunk a MySQL-hez fenntartott dedikált szerverről.

Hogyan működik a polling a Zabbixban?

4 hónapja

MM: – Nos, a felmerült adatbázis problémákról végre megfeledkezhetünk?

MCS: – Ez pontosan így van! A másik feladat, amelyet meg kell oldanunk, az az adatgyűjtés lassúsága. Jelenleg mind a 15 proxy szerverünk túlterhelt az SNMP és pollingen végzett folyamatokkal. Nincs más megoldás, mint újabb és újabb szerverek telepítése.

MM: – Nagyszerű. De először mesélj, hogyan működik a polling a Zabbixban?

MCS: – Röviden, 20 típusú metrika létezik és tucatnyi módja van ezek megszerzésének. A Zabbix képes adatokat gyűjteni vagy kérés-válasz módban, vagy várhat új adatokat a Trapper interfészen keresztül.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Érdemes megjegyezni, hogy az eredeti Zabbixben ez a módszer (Trapper) a leggyorsabb.

Vannak proxy szerverek a terhelés elosztására:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A proxik ugyanazokat a gyűjtési funkciókat tudják ellátni, mint a Zabbix szerver, azaz feladatokat kapnak tőle és az összegyűjtött metrikákat a Trapper interfészen keresztül küldik vissza. Ez a hivatalosan ajánlott módszer a terhelés elosztására. A proxik hasznosak a távoli infrastruktúra monitorozásakor is, amely NAT-on keresztül vagy lassú kapcsolaton működik:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MM: – Az architektúra világos. Meg kell néznünk a forrást…

Pár nappal később

A mese arról, hogyan győzött az nmap fping

MM: – Úgy tűnik, valamit találtam.

MCS: – Mesélj!

MM: – Felfedeztem, hogy a Zabbix elérhetőség-ellenőrzése maximum 128 hosztot ellenőriz egyszerre. Megpróbáltam ezt a számot 500-ra növelni és eltávolítottam a ping közötti késleltetést – ez körülbelül duplájára növelte a teljesítményt. De szeretnék még nagyobb számokat.

MCS: – A gyakorlatomban néha ezer hoszt elérhetőségének ellenőrzésére van szükségem, és semmi gyorsabbat nem találtam, mint az nmap. Biztos vagyok benne, hogy ez a leggyorsabb módszer. Próbáljuk ki! Jelentősen növelnünk kell a hosztok számát egy iterációban.

MM: – Több mint ötszázat ellenőrizni? 600?

MCS: – Legalább pár ezer.

MM: – Rendben. A legfontosabb, amit el akartam mondani: felfedeztem, hogy a Zabbix legtöbb pollingja szinkron módon történik. Feltétlenül át kell alakítanunk aszinkron módra. Akkor drasztikusan növelhetjük a pollerek által gyűjtött metrikák számát, különösen, ha növeljük a metrikák számát egy iterációban.

MCS: – Nagyszerű! És mikor?

MM: – Mint mindig, tegnap.

MCS: – Összehasonlítottuk az fping és az nmap két verzióját:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Számos hoszten az nmap várhatóan akár ötödével is hatékonyabb volt. Mivel az nmap csak a hozzáférhetőség tényét és a válaszidőt ellenőrzi, a veszteségek számítását áthelyeztük a triggerekkel, és jelentősen csökkentettük a hozzáférhetőség ellenőrzésének intervallumait. Az nmap optimális hosztszámát egy iterációnként körülbelül 4000 körüli értékben határoztuk meg. Az nmap segítségével háromszorosára csökkentettük a CPU-költségeket a hozzáférhetőség ellenőrzése során, és az intervallumot 120 másodpercről 10 másodpercre csökkentettük.

A polling optimalizálása

MM: – Ezután a pollerekkel foglalkoztunk. Elsősorban az SNMP-lekérdezések és az ügynökök érdekeltek minket. A "Zabbix"-ban a polling szinkron módon történik, és külön intézkedéseket vezettek be a rendszer hatékonyságának növelése érdekében. Szinkron üzemmódban a hosztok nem elérhetősége jelentős romlást okoz a pollingban. Egy teljes állapot rendszert alkalmaznak, és külön folyamatok is léteznek – úgynevezett unreachable-pollerek, amelyek csak a nem elérhető hosztokkal foglalkoznak:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ez egy megjegyzés, amely bemutatja az állapotok mátrixát, és azt a komplexitást, amely a rendszer hatékonyságának fenntartásához szükséges átmenetekből fakad. Ezenkívül a szinkron polling önmagában is viszonylag lassú:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ezért több ezer poller a tucatnyi proxyval nem tudta összegyűjteni a szükséges mennyiségű adatot. Az aszinkron megvalósítás nemcsak a szálak számával kapcsolatos problémákat oldotta meg, hanem jelentősen leegyszerűsítette a nem elérhető hosztok állapotainak rendszerét is, mivel bármennyi hoszt ellenőrzése során a maximális várakozási idő 1 időtúllépés volt:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Emellett módosítottuk és továbbfejlesztettük az SNMP-lekérdezések polling rendszerét. Az a helyzet, hogy a legtöbb rendszer nem tud egyszerre több SNMP-lekérdezésre válaszolni. Ezért bevezettünk egy hibrid üzemmódot, ahol a ugyanannak a hosztnak az SNMP-pollingja aszinkron módon történik:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ez minden hosztcsoportra vonatkozik. Ez az üzemmód végül nem lassabb, mint a teljes mértékben aszinkron, mivel másfél száz SNMP-érték lekérdezése így is sokkal gyorsabb, mint 1 időtúllépés.

Kísérleteink azt mutatták, hogy az optimális lekérdezési szám egy iteráción belül körülbelül 8000 az SNMP-polling során. Az aszinkron módra való átállás összességében 200-szorosára gyorsította a polling teljesítményét, több százszorosára.

MCS: A kapott polling optimalizálások azt mutatták, hogy nemcsak megszabadulhatunk az összes proxy-tól, hanem sok ellenőrzés intervallumait is lerövidíthetjük, a proxy-kra pedig már nincs szükség mint terhelésmegosztási módszer.

Körülbelül három hónappal ezelőtt

Változtasd meg az architektúrát – növeld a terhelést!

MM: – Nos, Max, itt az ideje a termelésnek? Szükségem van egy erős szerverre és egy jó mérnökre.

MCS: – Rendben, tervezzünk! Itt az ideje végre lépni a 5000 metrika/másodperces holtpontból.

A reggel az frissítés után

MCS: – Misha, frissítettünk, de reggelre visszaálltunk… Találd ki, milyen sebességet sikerült elérni?

MM: – Maximum 20 ezer.

MCS: – Igen, 25! Sajnos ugyanott vagyunk, ahonnan indultunk.

MM: – Miért van ez? Készítettetek diagnosztikát?

MCS: – Igen, természetesen! Íme, például egy érdekes top:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MM: – Nézzük meg. Látom, hogy hatalmas mennyiségű polling szálat próbáltunk:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

De még így sem tudtuk a rendszert a fele kapacitásig se kihasználni:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A teljesítmény viszont meglehetősen alacsony, körülbelül 4000 metrika/másodperc:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Van valami más?

MCS: – Igen, az egyik poller strace:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MM: – Itt világosan látszik, hogy a polling folyamat „semaphore”-ra vár. Ezek blokkolások:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MCS: – Nem világos.

MM: – Nézd, ez inkább olyan helyzetnek tűnik, amikor sok szál próbál egy olyan erőforrással dolgozni, amelyhez egyszerre csak egyetlen egy férhet hozzá. Akkor mindaz, amit tehetnek, az az erőforrás időbeli megosztása:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

És az ilyen erőforrással való munka összesített teljesítménye egy mag sebességére korlátozódik:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ez a probléma két módon megoldható.

Felkészítheted a gép hardverét és áttérhetsz gyorsabb magokra:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Vagy megváltoztathatod az architektúrát és párhuzamosan – a terhelést:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MCS: – A tesztgépen kevesebb magot használunk, mint a termelőn, de ezek 1,5-ször gyorsabbak a magfrekvenciában!

MM: – Érthető? Meg kell néznünk a szerver kódját.

Adatok útja a Zabbix szerveren

MCS: – Azért, hogy megértsük, elkezdtük elemezni, hogyan történik az adatok továbbítása a Zabbix szerveren belül:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Nagyszerű kép, igaz? Nézzük meg lépésről lépésre, hogy nagyjából tisztában legyünk vele. Vannak szálak és szolgáltatások, amelyek felelősek az adatok gyűjtéséért:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A begyűjtött metrikákat socketen keresztül továbbítják a Preprocessor manager-hez, ahol sorba kerülnek:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A „Preprocessor manager” továbbítja az adatokat a munkásainak, akik végrehajtják az előfeldolgozási utasításokat és ugyanazon a socketen keresztül visszaküldik.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ezután a preprocessor menedzser tárolja őket a történeti gyorsítótárban:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Onnan veszik a hítori szinkronizálók, amelyek számos funkciót látnak el: például trigger kiszámítása, értékek gyorsítótárba töltése, és ami a legfontosabb, metrikák mentése a történeti tárolóba. Összességében a folyamat bonyolult és meglehetősen zavaros.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MM: – Az első dolog, amit láttunk, hogy a legtöbb szál a úgynevezett "konfigurációs gyorsítótár" (memória terület, ahol az összes szerverkonfiguráció tárolódik) megszerzéséért versenyez. Különösen sok zárolás történik az adatok kinyeréséért felelős szálak miatt:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

…mivel a konfigurációban nemcsak a metrikák tárolódnak a paramétereikkel, hanem azok a sorok is, ahonnan a pollerek értesítést kapnak arról, hogy mi lesz a következő lépés. Amikor sok poller van, és az egyik zárolja a konfigurációt, a többiek várják a kérdéseket:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A pollereknek nem szabad konfliktusba kerülnie

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ezért az első dolog, amit tettünk, az volt, hogy a sort 4 részre osztottuk, és biztonságos körülmények között engedélyeztük a pollereknek, hogy egyszerre zárolják ezeket a részeket:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ez megszüntette a versenyt a konfigurációs gyorsítótárért, és a pollerek munkagyorsasága jelentősen megnőtt. De aztán szembesültünk azzal, hogy a preprocessor menedzser elkezdte felhalmozni a feladatok sorát:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A preprocessor menedzsernek képesnek kell lennie prioritásokat felállítani

Ez azokban az esetekben történt, amikor hiányzott a teljesítmény. Akkor minden, amit tehetett – a gyűjtő folyamatoktól érkező kéréseket halmozni és felhalmozni a pufferbe, amíg az el nem érte az összes memóriát, és összeomlott:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A probléma megoldására hozzáadtunk egy második socketet, amelyet kifejezetten a munkások számára szántunk:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ezzel a preprocessor menedzsernek lehetősége nyílt a feladat prioritásának megállapítására, és ha a puffer növekedett, a feladat lelassította a kinyerést, lehetőséget adva a munkásoknak, hogy elvegyék ezt a puffert:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ezután felfedeztük, hogy az egyik ok, amiért lelassult a teljesítmény, maguk a munkások voltak, mivel versenyeztek egy teljesen lényegtelen erőforrásért a működésükhöz. Ezt a problémát bug-fixként rögzítettük, és az új "Zabbix" verziókban már megoldották:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A socketek számának növelésével – eredményt kapunk

Ezt követően a preprocessor menedzser lett a szűk keresztmetszet, mivel ez egy szál. A mag sebességébe ütközött, maximálisan körülbelül 70 ezer metrikát tudott másodpercenként kezelni:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ezért négyet készítettünk, négy szettel és munkásokkal:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ez lehetővé tette, hogy a sebesség körülbelül 130 ezer metrikáig emelkedjen:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A növekedés nemlineáris volt, mivel verseny alakult ki a történet cache-ért. Négy előfeldolgozó menedzser és történet-szinkronizáló versengett érte. Ekkorra a tesztgépünk körülbelül 130 ezer metrikát tudott produkálni másodpercenként, a processzorunk körülbelül 95%-át kihasználva:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Körülbelül 2,5 hónappal ezelőtt

Az snmp-community elhagyása másfél szorosára növelte az NVP-ket

MM: – Max, szükségem van egy új tesztgép! A jelenlegi már nem bír el minket.

MCS: – Mi van most?

MM: – Jelenleg – 130k NVP és a processzor "a polcon".

MCS: – Wow! Szuper! Várj, kettő kérdésem van. A számításaim szerint a szükségletünk körülbelül 15-20 ezer metrikára van másodpercenként. Miért van szükségünk többre?

MM: – Szeretném a dolgot végleg befejezni. Szeretném látni, mennyit tudunk kihozni ebből a rendszerből.

MCS: – De…

MM: – De ez a vállalatnak haszontalan.

MCS: – Értem. És a második kérdés: amit most van, azt tudjuk tartani magunknak, fejlesztő segítsége nélkül?

MM: – Nem hiszem. A konfigurációs cache-sel való munka megváltoztatása probléma. Ez a legtöbb folyamatban változásokkal jár, és elég nehezen karbantartható. Valószínűleg nagyon nehéz lesz fenntartani.

MCS: – Akkor szükség van valamilyen alternatívára.

MM: – Van egy lehetőség. Át tudunk térni a gyors magokra, úgy, hogy lemondunk az új zárolási rendszerről. Így is 60-80 ezer metrikát fogunk produkálni. Ezen kívül az összes többi kódot megőrizzük. A ClickHouse, az aszinkron polling működni fog. És ezt könnyű lesz karbantartani.

MCS: – Csodás! Javaslom, hogy ezen álljunk meg.

A szerveroldali optimalizálás után végre sikerült az új kódot bevezetni a termelésbe. Néhány változtatást elhagytunk az átállás érdekében a gyors magokra, minimalizálva a kódmódosításokat. Ezenkívül egyszerűsítettük a konfigurációt, és ahol lehetett, lemondtunk a makrókról az adatelemekben, mivel ezek további zárolások forrása volt.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Például az snmp-community makró elhagyása, ami gyakori a dokumentációban és a példákban, a mi esetünkben körülbelül másfél szeres gyorsulást eredményezett az NVP-k számára.

Két nap után a termelésben

Eltávolítjuk az incidenstörténetek felugró ablakait

MCS: – Misi, már két napja használjuk a rendszert, és minden működik. De csak akkor, amikor minden rendben van! Volt egy tervezett karbantartásunk, amely során egy elég nagy hálózati szegmenst kellett áttelepítenünk, és ismét manuálisan ellenőriztük, hogy mi működik és mi nem.

MM: – Ez nem lehet igaz! Tízszer ellenőriztük mindent. A szerver még a teljes hálózati elérhetetlenséget is azonnal feldolgozza.

MCS: – Én mindent értek: a szerver, az adatbázis, a top, az austat, a logok – minden gyors… De mi a webes felületet nézzük, és ott van a processzor „szünet” a szerveren és ez a dolog:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MM: – Értem. Nézzük a webet. Felfedeztük, hogy abban az esetben, ha sok aktív incidens volt, a legtöbb operatív widget nagyon lassan kezdett működni:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ennek az oka az incidens történetekkel kapcsolatos felugró ablakok generálása volt, amelyek minden egyes elemhez készülnek a listában. Ezért lemondtunk ezen ablakok generálásáról (5 sort kommenteztünk ki a kódban), és ez megoldotta a problémáinkat.

A widgetek betöltési ideje, még teljes elérhetetlenség esetén is, néhány percről a számunkra megengedett 10-15 másodpercre csökkent, és a történetet továbbra is egy időpontra kattintva lehet megtekinteni:

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Munka után. 2 hónappal ezelőtt

MCS: – Misi, mész? Van egy beszélgetésem.

MM: – Nem akartam. Megint valami a „Zabbix”-szal?

MCS: – Dehogy, lazíts! Csak azt akartam mondani: minden működik, köszi! Tőlem sör jár.

A Zabbix hatékony

A „Zabbix” egy meglehetősen univerzális és gazdag rendszer és funkció. Teljesen használható kis telepítésekhez „dobozból”, de a növekvő igények miatt azt optimalizálni kell. Nagy mennyiségű metrikák tárolásához megfelelő tárolót használj:

  • felhasználhatod a beépített eszközöket az „Elasticsearch” integrációjaként vagy a történelem szöveges fájlokba való exportálásával (elérhető a negyedik verziótól);
  • felhasználhatod a tapasztalatainkat és az „ClickHouse” integrációt.

A metrikák gyűjtési sebességének radikális növeléséhez aszinkron módszerekkel gyűjtsd őket, és továbbítsd őket a Zabbix-szerver trap-interface-en keresztül; vagy használhatsz patch-et a Zabbix pollerek aszinkron működéséhez.

A «Zabbix» C nyelven íródott, és meglehetősen hatékony. Néhány szűk architektúrájú megoldás lehetőséget ad a teljesítmény további növelésére, és tapasztalataink szerint több mint 100 ezer metrikát tudunk begyűjteni egy egyprocesszoros gépen.

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

Ez az a Zabbix folt

MM: – Szeretnék hozzátenni pár dolgot. Az összes jelenlegi jelentés, minden teszt és szám arra a konfigurációra vonatkozik, amelyet mi használunk. Jelenleg körülbelül 20 ezer metrikát gyűjtünk másodpercenként. Ha próbálja megérteni, hogy ez önöknél működne-e, hasonlítsa össze. Amit ma bemutattunk, GitHub-on érhető el foltként: github.com/miklert/zabbix

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

A folt tartalmazza:

  • teljes integráció a «Clickhouse»-szal (mind a «Zabbix» szerverek, mind a frontend számára);
  • problémák megoldása a preprocesszor-vezetővel;
  • aszinkrón pollezés.

A folt kompatibilis a 4-es verzióval, beleértve az lts-t is. Valószínűleg minimális változtatásokkal működni fog a 3.4-es verzióval is.

Köszönöm a figyelmet.

Kérdések

Kérdés a közönségből (továbbiakban – K): – Jó napot! Mondja meg kérem, van-e terve az intenzív együttműködésre a Zabbix csapattal, vagy ők önökkel, hogy ez ne csak folt legyen, hanem a «Zabbix» normális működése?

MM: – Igen, a változások egy részét mindenképpen elkötelezzük. Lesz, ami foltban marad.

A: – Nagyon köszönöm a nagyszerű előadást! Mondja meg kérem, a folt alkalmazása után a «Zabbix»-tól milyen támogatás marad, és hogyan lehet tovább frissíteni a magasabb verziókra? Lesz lehetőség frissíteni a «Zabbix»-t az önök foltjával 4.2-re, 5.0-ra?

MM: – A támogatásról nem tudok nyilatkozni. Ha én lennék a «Zabbix» technikai támogatása, akkor valószínűleg azt mondanám, hogy nem, mert ez idegen kód. Ami a 4.2-es kód alapját illeti, a mi álláspontunk a következő: „Követni fogjuk az időt, és magunk is frissülni fogunk a következő verzióra”. Ezért egy ideig ki fogjuk adni a frissített verziókhoz tartozó foltot. Már említettem az előadásomban: a verziók közti változások eddig meglehetősen csekélyek. Úgy gondolom, hogy a 3.4-ről 4-re való áttérés körülbelül 15 percet vett igénybe. Ott valami megváltozott, de nem túl lényeges.

A: – Tehát tervezik a folt támogatását, és biztonságosan telepíthető éles környezetbe, a további frissítések megszerzése mellett?

MM: – Ezt kategorikusan javasoljuk. Számos problémánkat megoldja.

MCS: – Még egyszer szeretném hangsúlyozni, hogy a módosítások, amelyek nem érintik az architektúrát és nem kapcsolódnak a blokkolásokhoz vagy sorokhoz – modulárisak, és külön modulokban találhatók. Még kisebb módosítások esetén is elég könnyen karbantarthatók.

MM: – Ha érdeklik a részletek, a "ClickHouse" a történeti könyvtár nevű könyvtárat használja. Ez laza kapcsolatban van – ez az "Elasticsearch" támogatásának másolata, tehát konfigurálható. A polling csak a pollereket változtatja meg. Úgy gondoljuk, hogy hosszú ideig működni fog.

A: – Nagyon köszönöm. Tudna esetleg információt adni a végrehajtott módosításokról készült dokumentációról?

HighLoad++, Mikhaíl Makúrov, Makszim Csernyecov (Interszvjaz): Zabbix, 100kNVPS egy szerveren

MM: – A dokumentáció egy javítás. Nyilvánvaló, hogy a "ClickHouse" bevezetésével, új típusú pollerek bevezetésével új konfigurációs opciók jelennek meg. Az utolsó dián található linken rövid leírás van arról, hogyan használja ezt.

Az fping nmap-ra való cseréjéről

A: – Végül hogyan valósították ezt meg? Tudna konkrét példákat mondani: az önök esetében ez strap-on és külső szkript? Mi ellenőrzi ilyen gyorsan ennyi hosztot? Hogyan szerzik ezeket a hosztokat? Az nmap-nak valahogy meg kell adni őket, valahonnan megkapni, elhelyezni, valamit elindítani?..

MM: – Szuper. Nagyon helyes kérdés! A lényeg a következő: módosítottuk a könyvtárat (ICMP ping, a "Zabbix" része) az ICMP ellenőrzésekhez, ahol a csomagok száma - egy (1) - és a kód próbálja használni az nmap-et. Ez a "Zabbix" belső munkája lett, a pinger belső munkájává vált. Ennek megfelelően nincs szükség szinkronizációra vagy trap használatra. Ezt szándékosan tettük, hogy a rendszert érintetlenül tartsuk, és ne foglalkozzunk a két rendszer adatbázisának szinkronizálásával: mit ellenőrizzünk, mit töltsünk be a polleren keresztül, és hogy nem sérült-e a betöltés?.. Ez sokkal egyszerűbb.

A: – Ez a proxyra is működik?

MM: – Igen, de ezt nem ellenőriztük. A polling kódja mind a "Zabbix"-ban, mind a szerveren egységes. Működnie kell. Még egyszer hangsúlyozom: a rendszer teljesítménye olyan, hogy nekünk proxyra nincs szükségünk.

MCS: – A helyes kérdés erre a következőt mondja: "Miért van szüksége proxy-ra egy ilyen rendszer esetén?" Csak a NAT miatt vagy valamilyen lassú kapcsolaton keresztül monitorozni...

A: – Ön a "Zabbix"-ot használja riasztásra, ha jól értettem. Vagy a grafikonok (ahol az archív réteg van) egy másik rendszerbe, például a Grafanába költöztek? Vagy nem használja ezt a funkciót?

MM: – Még egyszer hangsúlyozom: teljes integrációt valósítottunk meg. A history-t a „Clickhouse”-ba öntjük, de eközben megváltoztattuk a PHP frontendet. A PHP frontend a „Clickhouse”-hoz való átkéréseket végez, és onnan készíti el az összes grafikonunkat. Amennyire őszinte tudok lenni, van egy részünk, amely a „Clickhouse”-ból és a „Zabbix” azon adataiból készít adatokat más grafikonábrázoló rendszerekhez.

MCS: – A „Grafanában” is.

Hogyan született a döntés a források allokálásáról?

A: – Kérlek, oszd meg egy kicsit a belső folyamatokat. Hogyan született a döntés, hogy forrásokat kell allokálni a termék jelentős átalakítására? Ez egy bizonyos kockázatot rejteget. És kérlek, mondjátok el, hogy a frissített verziók támogatásának fényében: hogyan indokolható ez a döntés a menedzsment szempontjából?

MM: – Valószínűleg nem meséltük el jól a történet drámáját. Abban a helyzetben voltunk, hogy valamit tennünk kellett, és lényegében két párhuzamos csapat fele mentünk:

  • Az egyik a monitorozási rendszer új módszerekkel történő bevezetésével foglalkozott: monitorozás mint szolgáltatás, különböző nyílt forráskódú megoldások, amelyeket kombinálunk, majd megpróbáljuk átalakítani az üzleti folyamatot, hogy működni tudjunk az új monitorozási rendszerrel.
  • Párhuzamosan volt egy lelkes programozó, aki ezzel foglalkozott (magáról). Így alakult, hogy ő győzött.

A: – Mekkora a csapat létszáma?

MCS: – Önök előtt áll.

A: – Tehát, mint mindig, szükség van egy szenvedélyes emberre?

MM: – Nem tudom, mi az a szenvedélyes ember.

A: – Ebben az esetben valószínűleg te. Nagyon köszönöm, ti nagyszerűek vagytok.

MM: – Köszönöm.

A Zabbix patch-ekről

A: – Egy olyan rendszer esetében, amely proxykat használ (például egyes elosztott rendszerekben), lehetséges az Önök megoldásának alkalmazása és patch-elése például a pollereknek, proxyknak és részben a „Zabbix” előfeldolgozójának; és ezek kölcsönhatásának? Lehetőség van a meglévő megoldások optimalizálására egy több proxyval rendelkező rendszerhez?

MM: – Tudom, hogy a „Zabbix” szerver proxy segítségével épül fel (kompilálódik és kapja a kódot). Ezt nem teszteltük termelésben. Nem vagyok benne biztos, de úgy gondolom, hogy az előfeldolgozó-igazgató nem használható proxyban. A proxy feladata egy készlet metrikiát venni a „Zabbix”-tól, feldolgozni őket (őt magát is a konfiguráció, lokális adatbázis rögzítése közben) és visszaadni a „Zabbix” szervernek. Az előfeldolgozást később maga a szerver végzi el, amikor megkapja.

A proxy piques interest. We'll check it out. It's an intriguing topic.

A: – The idea was this: if you can patch pollers, you can patch them to work with proxies and adapt the preprocessor for these purposes only on the server.

MM: – I think it's even simpler. You take the code, apply the patch, then configure it as needed – collect proxy servers (for example, with ODBC) and distribute the patched code across systems. Where needed, you assemble proxies, where needed, a server.

A: – You probably won't need to additionally patch the proxy transmission to the server?

MCS: – No, it's standard.

MM: – In fact, one of the ideas wasn't voiced. We've always maintained a balance between an explosion of ideas and the number of changes, as well as ease of maintenance.

Videó lejátszása

Egy kis reklám 🙂

Köszönjük, hogy velünk maradtál. Tetszenek a cikkeink? Szeretnél több érdekes anyagot látni? Támogass minket, és rendelés leadásával vagy ismerősöknek ajánlással segíts nekünk. Felhőalapú VPS fejlesztőknek 4,99 dollártól, Egyedülálló alternatívája az entry-level szervereknek, amelyet Önnek találtunk ki: Minden igazság a VPS (KVM) E5-2697 v3 (6 mag) 10GB DDR4 480GB SSD 1Gbps áron 19 dollártól, vagy hogyan oszd fel helyesen a szervert? (elérhetők RAID1 és RAID10 opciók, akár 24 magig és 40GB DDR4-ig).

Dell R730xd kétszer olcsóbban a Tier IV Equinix adatközpontban Amszterdamban? Csak nálunk 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB 199 dollártól Hollandiában! Dell R420 — 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — 99 dollártól! Olvasd el ezt Hogyan építsünk vállalati szintű infrastruktúrát Dell R730xd E5-2650 v4 szerverekkel, amelyek költsége 9000 euróban van megszabva?

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster