HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Den nÊste HighLoad++ konference finder sted den 6. og 7. april 2020 i Sankt Petersborg. Detaljer og billetter via linket. HighLoad++ Moskva 2018. Sal "Moskva". 9. november, 15:00. Resumé og prÊsentation.

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

* OvervĂ„gning – online og analyse.
* PrimĂŠre begrĂŠnsninger ved ZABBIX platformen.
* LĂžsning til skalerbar analyseopbevaring.
* Optimering af ZABBIX serveren.
* Optimering af UI.
* Erfaring med systemdrift med belastninger over 40k NVPS.
* Kort konklusion.

Mikhail Makurov (herefter – MM): – Hej alle sammen!

Maksim Chernetsov (herefter – MCh): – Goddag!

MM: – Tillad mig at présentere Maksim. Maks – en talentfuld ingeniþr, den bedste netvérksekspert, jeg kender. Maksim arbejder med netvérk og services, deres udvikling og drift.

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MCh: – Og jeg vil gerne fortĂŠlle om Mikhail. Mikhail – en udvikler i C. Han har skrevet flere hĂžjtydende lĂžsninger til trafikbehandling for vores virksomhed. Vi lever og arbejder i Ural, i byen med de hĂ„rde mĂŠnd, Tjeljabinsk, i firmaet "Intersvyaz". Vores firma er en udbyder af internet- og kabel-tv-services til en million mennesker i 16 byer.

MM: – Og det skal siges, at "Intersvyaz" er meget mere end bare en udbyder, det er et IT-firma. Stþrstedelen af vores lþsninger er udviklet af vores IT-afdeling.

A: fra servere, der behandler trafik, til callcenter og mobilapplikation. IT-afdelingen har nu cirka 80 medarbejdere med meget forskellige kompetencer.

Om Zabbix og dets arkitektur

MCh: – Og nu vil jeg forsĂžge at sĂŠtte personlig rekord og pĂ„ et minut fortĂŠlle, hvad Zabbix (herefter – "Zabbix") er.

"Zabbix" positionerer sig som et enterprise overvĂ„gningssystem "out of the box". Det har mange funktioner, der gĂžr livet lettere: avancerede eskalationsregler, API til integration, gruppering og automatisk opdagelse af vĂŠrter og metrikker. I "Zabbix" er der sĂ„kaldte skaleringsvĂŠrktĂžjer – proxyer. "Zabbix" er et open source system.

Kort om arkitekturen. Man kan sige, at den bestÄr af tre komponenter:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

  • Server. Skrevet i C. Med rimeligt kompleks behandling og overfĂžrsel af information mellem trĂ„de. Al behandling sker her: fra modtagelse til lagring i database.
  • Alle data opbevares i databasen. "Zabbix" understĂžtter MySQL, PostgreSQL og Oracle.
  • WebgrĂŠnsefladen er skrevet i PHP. Den leveres som regel med Apache-serveren, men fungerer mere effektivt i kombination med nginx + php.

I dag vil vi gerne fortélle en historie fra vores virksomhed, der handler om 'Zabbix'


En historie fra virksomheden 'Intersvyaz'. Hvad har vi, og hvad har vi brug for?

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server
For 5 eller 6 mÄneder siden. En dag efter arbejde


MCh: – Misha, hej! Glad for at jeg fik fat i dig – jeg har noget at tale om. Vi har igen haft problemer med overvĂ„gningen. Under en stor nedetid gik alt i stĂ„, og der var ingen information om netvĂŠrkets tilstand. DesvĂŠrre sker det ikke for fĂžrste gang. Jeg har brug for din hjĂŠlp. Lad os sĂžrge for, at vores overvĂ„gning fungerer under alle omstĂŠndigheder!

MM: – Men lad os fĂžrst synkronisere os. Jeg har ikke kigget derovre i et par Ă„r. Hvis jeg husker korrekt, sĂ„ skiftede vi fra Nagios til 'Zabbix' for omkring 8 Ă„r siden. Og nu har vi, virker det som om, 6 kraftige servere og omkring et dusin proxies. Jeg blander ikke noget sammen?

MCh: – Nésten. 15 servere, hvoraf nogle er virtuelle maskiner. Det vigtigste er, at det ikke redder os i det þjeblik, hvor vi har brug for det mest. Hver gang der er en nedetid, hénger serverne, og vi ser ingenting. Vi har forsþgt at optimere konfigurationen, men det giver ikke et optimalt lþft i ydeevnen.

MM: – ForstĂ„eligt. Har I allerede kigget pĂ„ noget, eller har I fundet noget i diagnostikken?

MCh: – Det fĂžrste, vi skal tage fat pĂ„, er faktisk databasen. MySQL er konstant belasted med at gemme nye mĂ„linger, og nĂ„r 'Zabbix' begynder at generere en masse hĂŠndelser, gĂ„r databasen bogstaveligt talt i stĂ„ i flere timer. Jeg har allerede fortalt dig om optimeringen af konfigurationen, men vi opdaterede faktisk hardwaren i Ă„r: serverne har over hundrede gigabyte RAM, og der er SSD RAID-array pĂ„ disken – der er ikke nogen mening i at vokse det lineĂŠrt. Hvad skal vi gĂžre?

MM: – ForstĂ„eligt. Generelt set er MySQL en LTP-database. Det ser ud til, at den ikke lĂŠngere egner sig til at gemme arkivet af mĂ„linger i vores stĂžrrelse. Lad os finde ud af det.

MCh: – Lad os gþre det!

Integration af Zabbix og Clickhouse som resultat af hackathonen

Efter noget tid fik vi interessante data:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

StÞrstedelen af pladsen i vores database var optaget af metrics-arkivet, og mindre end 1 % blev brugt til konfiguration, skabeloner og indstillinger. PÄ det tidspunkt havde vi allerede anvendt en Big Data-lÞsning baseret pÄ Clickhouse i over et Är. Retningen for os var klar. PÄ vores forÄr 'Hackathon' skrev jeg en integration mellem Zabbix og Clickhouse for serveren og frontend. PÄ det tidspunkt havde Zabbix allerede stÞtte til ElasticSearch, og vi besluttede at sammenligne dem.

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Sammenligning af Clickhouse og Elasticsearch

MM: – Til sammenligningen genererede vi en belastning svarende til den, som Zabbix-serveren skaber, og sĂ„ pĂ„, hvordan systemerne ville klare sig. Vi skrev data i mellem 1000 rĂŠkker pr. gang og brugte CURL. Vi formodede pĂ„ forhĂ„nd, at Clickhouse ville vĂŠre mere effektiv til den belastningsprofil, som Zabbix skaber. Resultaterne overraskede os endda:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Under ens betingelser skrev Clickhouse tre gange sÄ mange data under testen. Begge systemer brugte meget fÄ ressourcer til at lÊse data. Men ElasticSearch krÊvede betydeligt flere CPU-ressourcer ved skrivning:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Generelt overgik Clickhouse ElasticSearch betydeligt bÄde i CPU-forbrug og hastighed. Desuden bruger Clickhouse 11 gange mindre plads pÄ harddisken takket vÊre datakompression og udfÞrer omtrent 30 gange fÊrre diskoperationer:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MCh: – Ja, arbejdet med disksystemet i Clickhouse er meget effektivt. Store SATA-diske kan bruges til databaser og opnĂ„ skrivehastigheder pĂ„ hundredtusinder af rĂŠkker pr. sekund. Systemet understĂžtter 'out of the box' sharding, replikering og er meget nemt at konfigurere. Vi er mere end tilfredse med driften i et Ă„r.

For at optimere ressourcerne kan Clickhouse installeres ved siden af den eksisterende hoveddatabase, hvilket sparer meget CPU-tid og diskoperationer. Vi har flyttet metrics-arkivet til allerede eksisterende Clickhouse-klynger:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Vi har lettet den primÊre MySQL-database sÄ meget, at vi kunne kombinere den pÄ én maskine med Zabbix-serveren og undgÄ at have en dedikeret server til MySQL.

Hvordan fungerer polling i Zabbix?

4 mÄneder siden

MM: – NĂ„, kan vi glemme problemerne med databasen?

MCh: – Det er helt rigtigt! En anden opgave, vi skal lþse, er langsom datainsamling. Nu er alle vores 15 proxy-servere overbelastede med SNMP-processer og polling. Vi har ikke andet valg end at anskaffe nye servere igen og igen.

MM: – Fantastisk. Men fortél mig fþrst, hvordan polling fungerer i 'Zabbix'?

MCh: – Kort sagt er der 20 typer metric og ti mĂ„der at indsamle dem pĂ„. 'Zabbix' kan samle data enten i 'request – response' tilstand, eller vente pĂ„ nye data via 'Trapper Interface'.

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Det er vĂŠrd at bemĂŠrke, at denne metode (Trapper) i den originale 'Zabbix' er den hurtigste.

Der findes proxy-servere til belastningsfordeling:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Proxy kan udfÞre de samme indsamlingfunktioner som 'Zabbix'-serveren ved at modtage opgaver fra den og sende de indsamlede metrics via Trapper-interfacet. Dette er den officielt anbefalede metode til at fordele belastningen. Proxy'er er ogsÄ nyttige til at overvÄge fjerna infrastrukturen, der arbejder gennem NAT eller en langsom forbindelse:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MM: – Arkitekturen er forstĂ„et. Vi skal kigge pĂ„ kildekoden


Et par dage senere

Sagnet om, hvordan nmap fping besejrede

MM: – Det ser ud til, at jeg har fundet noget.

MCh: – Fortél!

MM: – Jeg har opdaget, at 'Zabbix' ved tilgéngelighedskontroller kun tjekker maksimalt 128 vérter samtidigt. Jeg prþvede at þge dette tal til 500 og fjernede inter-pakke intervallet i deres ping – det fordoblede hastigheden. Men jeg vil gerne have stþrre tal.

MCh: – I mit arbejde mĂ„ jeg nogle gange kontrollere tilgĂŠngeligheden af tusinder af vĂŠrter, og jeg har ikke set noget hurtigere end nmap til dette. Jeg er sikker pĂ„, at det er den hurtigste metode. Lad os prĂžve det! Vi skal markant Ăžge antallet af vĂŠrter ad gangen.

MM: – Tjekke mere end fem hundrede? 600?

MCh: – Minimum et par tusinde.

MM: – Okay. Det vigtigste, jeg gerne vil sige: jeg fandt ud af, at det meste af polling i 'Zabbix' bliver udfĂžrt synkront. Vi skal helt sikkert ĂŠndre det til asynkront. SĂ„ kan vi dramatisk Ăžge antallet af metrics, der indsamles af pollere, isĂŠr hvis vi Ăžger antallet af metrics per iteration.

MCh: – Det lyder godt! Og hvornĂ„r?

MM: – Som sĂŠdvanligt, i gĂ„r.

MCh: – Vi sammenlignede begge versioner af fping og nmap:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

PÄ et stort antal vÊrter var nmap forventeligt op til fem gange mere effektivt. Da nmap kun tjekker for tilgÊngelighed og svartid, har vi flyttet tabstÊlling til triggere og betydeligt forkortet intervallerne for tilgÊngelighedstjek. Det optimale antal vÊrter til nmap, fandt vi, lÄ omkring 4000 pr. iteration. Nmap har gjort det muligt for os at reducere CPU-omkostningerne til tilgÊngelighedstjek med tre gange og forkorte intervallet fra 120 sekunder til 10.

Optimering af polling

MM: – Derefter tog vi fat pĂ„ pollere. Vi var isĂŠr interesserede i SNMP-aflĂŠsninger og agenter. I "Zabbix" er polling lavet synkront, og der er truffet sĂŠrlige foranstaltninger for at Ăžge systemets effektivitet. I det synkrone regime forĂ„rsager utilgĂŠngelighed af vĂŠrter betydelig nedgradering af polling. Der findes et helt system af tilstande og specielle processer – sĂ„kaldte unreachable-pollere, som kun arbejder med utilgĂŠngelige vĂŠrter:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Dette er en kommentar, der demonstrerer tilstandsmatrixen, hele kompleksiteten af de overgange, der krĂŠves for at systemet kan forblive effektivt. Derudover er selve den synkrone polling ret langsom:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Netop derfor kunne tusinder af pollertrÄde pÄ et dusin proxies ikke samle det nÞdvendige antal data til os. Den asynkrone implementering lÞste ikke kun problemerne med antallet af trÄde, men forenklede ogsÄ betydeligt systemet for tilstande af utilgÊngelige vÊrter, fordi uanset hvor mange der blev tjekket i én polling-iteration, var den maksimale ventetid 1 timeout:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Derudover modificerede og forbedrede vi polling-systemet for SNMP-forespÞrgsler. Problemet er, at de fleste ikke kan svare pÄ flere SNMP-forespÞrgsler samtidigt. Derfor lavede vi en hybridtilstand, hvor SNMP-polling af den samme vÊrt udfÞres asynkront:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Dette gĂžres for en hel bunke vĂŠrter. Denne tilstand er i sidste ende ikke langsommere end den helt asynkrone, da forespĂžrgslen af 150 SNMP-vĂŠrdier stadig er meget hurtigere end 1 timeout.

Vores eksperimenter viste, at det optimale antal forespĂžrgsler pr. iteration er omkring 8000 ved SNMP-polling. Samlet set har overgangen til den asynkrone tilstand gjort det muligt at fremskynde pollingens ydeevne med 200 gange, i flere hundrede gange.

MCh: – De optimeringer af polling har vist, at vi ikke kun kan slippe af med alle proxies, men ogsĂ„ forkorte intervallerne for mange kontroller, sĂ„ proxies ikke lĂŠngere er nĂždvendige som en metode til belastningsfordeling.

For cirka tre mÄneder siden

Ændr arkitekturen – þg belastningen!

MM: – NĂ„, Max, er det tid til produktion? Jeg har brug for en kraftfuld server og en god ingeniĂžr.

MCh: – Godt, lad os planlĂŠgge det. Det er pĂ„ hĂžje tid at komme videre fra de 5.000 metrics i sekundet.

Morgen efter opgraderingen

MCh: – Misha, vi er blevet opgraderet, men til morgen er vi tilbage igen
 GĂŠt hvilken hastighed vi nĂ„ede?

MM: – Maksimalt 20.000.

MCh: – Aha, 25! Desvérre er vi der, hvor vi startede.

MM: – Hvad er der galt? Har I foretaget nogen diagnose?

MCh: – Ja, selvfþlgelig! Her, for eksempel, et interessant top:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MM: – Lad os tage et kig. Jeg kan se, at vi har forsĂžgt med en enorm mĂŠngde polling-trĂ„de:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Men samtidig kunne vi ikke engang udnytte systemet halvt:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Og den samlede ydeevne er ret lav, omkring 4.000 metrics i sekundet:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Er der noget andet?

MCh: – Ja, strace fra en af pollerne:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MM: – Her kan man tydeligt se, at polling-processen venter pĂ„ 'semaforer'. Det er lĂ„sninger:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MCh: – UforstĂ„eligt.

MM: – Se, det ligner en situation, hvor en masse trĂ„de forsĂžger at arbejde med en ressource, som kun Ă©n kan arbejde med ad gangen. SĂ„ alt, hvad de kan gĂžre, er at dele denne ressource over tid:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Og den samlede ydeevne ved arbejde med en sÄdan ressource er begrÊnset af hastigheden pÄ én kerne:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

SÄdan et problem kan lÞses pÄ to mÄder.

Opgradere maskinens hardware, skifte til hurtigere kerner:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Eller éndre arkitekturen og samtidig – belastningen:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MCh: – For Ăžvrigt, pĂ„ den testmaskine bruger vi fĂŠrre kerner end pĂ„ den produktionsmaskine, men de er 1,5 gange hurtigere i frekvens pr. kerne!

MM: – ForstĂ„et? Vi mĂ„ se pĂ„ serverkoden.

Dataflowet i Zabbix-serveren

MCh: – For at finde ud af det, begyndte vi at analysere, hvordan data overfþres inden i 'Zabbix'-serveren:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

En flot illustration, ikke? Lad os se pÄ den trin for trin for at gÞre det mere klart. Der er trÄde og tjenester, der er ansvarlige for indsamling af data:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

De indsamlede metrics sendes via en socket til Preprocessor manager, hvor de gemmes i en kĂž:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Preprocessor manageren sender dataene til sine arbejdere, som udfĂžrer forbehandlingsinstruktionerne og sender dem tilbage gennem den samme socket:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Efter dette gemmer forbehandlingschefen dem i historikens cache:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Derfra hentes de af historik-synkere, der udfÞrer en hel del funktioner: for eksempel trigonometrisk beregning, udfyldning af cachevÊrdier og, vigtigst af alt, lagring af mÄlinger i historiklagringen. Generelt er processen kompleks og ret forvirrende.

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MM: – Det fĂžrste, vi sĂ„, var, at de fleste trĂ„de konkurrerede om den sĂ„kaldte "konfigurationscache" (et hukommelsesomrĂ„de, hvor alle serverkonfigurationer opbevares). IsĂŠr mange lĂ„sninger stammer fra trĂ„de, der er ansvarlige for at hente data:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server


da konfigurationen ikke kun indeholder mÄlinger med deres parametre, men ogsÄ kÞer, hvorfra pollere henter information om, hvad de skal gÞre nÊste gang. NÄr der er mange pollere, og en lÄser konfigurationen, venter de andre pÄ anmodninger:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Pollere mÄ ikke konflikte

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

SÄ det fÞrste, vi gjorde, var at opdele kÞen i 4 dele og tillade pollerne at lÄse disse kÞer, disse dele samtidigt under sikre forhold:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Dette fjernede konkurrencen om konfigurationscachen, og pollernes hastighed steg betydeligt. Men derefter stÞdte vi pÄ, at forbehandlingschefen begyndte at opbygge en pulje af opgaver:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Forbehandlingschefen skal kunne prioritere

Dette skete i tilfĂŠlde, hvor han manglede ydeevne. SĂ„ alt, hvad han kunne gĂžre, var at samle anmodninger fra dataindsamlingsprocesserne og lĂŠgge dem i en buffer indtil han fyldte al hukommelsen og gik ned:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

For at lĂžse dette problem tilfĂžjede vi en anden sokkel, der var dedikeret specifikt til arbejderne:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Dermed fik forbehandlingschefen mulighed for at prioritere sit arbejde, og i tilfĂŠlde af at bufferen voksede, ville opgaven bremse indsamlingen og give arbejderne mulighed for at tage bufferen:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Derefter opdagede vi, at en af Ärsagerne til bremserne var selve arbejderne, da de konkurrerede om en ressource, der ikke var vigtig for deres arbejde. Dette problem blev lÞst med en bug-fix, og i de nye versioner af "Zabbix" er det allerede afhjulpet:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Vi Ăžger antallet af sokler – vi fĂ„r resultater

DernÊst blev selve forbehandlingschefen et snÊvert punkt, da det er en enkelt trÄd. Den ramte hastigheden af kernen, hvilket gav en maksimal hastighed pÄ cirka 70.000 mÄlinger pr. sekund:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Derfor har vi lavet fire, med fire sĂŠt af stik, arbejdere:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Og det har gjort det muligt at Ăžge hastigheden til cirka 130.000 metrikker:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Den ikke-lineÊre vÊkst skyldes, at der er kommet konkurrence om cache-historikken. Fire prÊprocessormanager og history-synkere konkurrerede om det. PÄ det tidspunkt opnÄede vi omkring 130.000 metrikker pr. sekund pÄ testmaskinen, og udnyttede den cirka 95 % pÄ CPU'en:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

For omkring 2,5 mÄneder siden

Afskaffelse af snmp-community Ăžgede NVP'erne med halvanden gang

MM: – Max, jeg har brug for en ny testmaskine! Vi passer ikke léngere ind i den nuvérende.

MCh: – Hvad har vi nu?

MM: – Lige nu – 130k NVP'er og CPU'en "i stedet".

MCh: – Wow! Fantastisk! Vent, jeg har to spĂžrgsmĂ„l. IfĂžlge mine beregninger har vi brug for omkring 15-20.000 metrikker pr. sekund. Hvorfor har vi brug for mere?

MM: – Jeg vil gerne gþre arbejdet helt férdigt. Jeg vil gerne se, hvor meget vi kan presse ud af dette system.

MCh: – Men


MM: – Men det er ubrugeligt for forretningen.

MCh: – ForstĂ„et. Og det andet spĂžrgsmĂ„l: kan vi selv vedligeholde det, vi har nu, uden hjĂŠlp fra udvikleren?

MM: – Jeg tror ikke det. Ændring af arbejdet med konfigurationscachen er et problem. Det involverer éndringer i de fleste strþmme og er ret komplekst at vedligeholde. Det vil sandsynligvis vére meget svért at vedligeholde.

MCh: – SĂ„ skal vi find en alternativ lĂžsning.

MM: – Der er en mulighed. Vi kan skifte til hurtige kerner, samtidig med at vi opgiver det nye lĂ„sesystem. Vi vil stadig opnĂ„ en ydeevne pĂ„ 60-80.000 metrikker. Samtidig kan vi bevare al anden kode. 'ClickHouse', asynkron polling vil fungere. Og det vil vĂŠre nemt at vedligeholde.

MCh: – Fantastisk! Jeg foreslĂ„r, at vi stopper her.

Efter optimeringen af serverdelen kunne vi endelig lancerer den nye kode i produktion. Vi opgav nogle Êndringer til fordel for overgangen til en maskine med hurtige kerner og minimalisering af antallet af Êndringer i koden. Vi forenklede ogsÄ konfigurationen og opgav makroer i datakomponenterne, nÄr det var muligt, da de er kilden til yderligere blokeringer.

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

For eksempel har afskaffelsen af den makro, der ofte findes i dokumentationen og eksemplerne, snmp-community, i vores tilfĂŠlde tilladt yderligere at accelerere NVP'erne med cirka 1,5 gang.

Efter to dage i produktion

Vi fjerner pop op-vinduerne for hĂŠndelseshistorik

MCh: – Misha, vi har brugt systemet i to dage, og det fungerer. Men kun nĂ„r det fungerer! Vi havde planlagt vedligeholdelse med flytning af et ret stort netvĂŠrkssegment, og vi kontrollerede manuelt, hvad der var oppe, og hvad der ikke var.

MM: – Det kan ikke vĂŠre muligt! Vi har tjekket det 10 gange. Serveren hĂ„ndterer selv en komplet netvĂŠrksnedbrud Ăžjeblikkeligt.

MCh: – Jeg forstĂ„r det hele: server, database, top, austat, logs – alt gĂ„r hurtigt
 Men vi kigger pĂ„ webgrĂŠnsefladen, og der er CPU'en "i hvile" pĂ„ serveren, og sĂ„ er der dette:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MM: – ForstĂ„et. Lad os kigge pĂ„ web'en. Vi opdagede, at i situationer med mange aktive hĂŠndelser, begyndte de fleste operativwidgetter at kĂžre meget langsomt:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Årsagen var genereringen af pop-up vinduer med héndelseshistorik, der genereres for hvert element i listen. Derfor stoppede vi med at generere disse vinduer (vi kommenterede 5 linjer i koden), og det lþste vores problemer.

IndlÊsningstiden for widgetter selv ved komplet nedbrud reduceredes fra flere minutter til acceptable 10-15 sekunder for os, og historien kan stadig ses med et klik pÄ tiden:

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Efter arbejdet. For 2 mÄneder siden

MCh: – Misha, gĂ„r du? Vi skal tale.

MM: – Jeg havde ikke ténkt mig det. Er der igen noget med "Zabbix"?

MCh: – Nej, slap af! Jeg ville bare sige: alt fungerer, tak! Øl pĂ„ mig.

Zabbix er effektivt

"Zabbix" er et ret universelt og rigt system og funktion. Det kan sagtens bruges til smÄ installationer "out of the box", men med voksende behov skal det optimeres. Brug et passende lager til at opbevare et stort arkiv af mÄlinger:

  • du kan bruge de indbyggede vĂŠrktĂžjer i form af integration med "Elasticsearch" eller eksportere historikken til tekstfiler (tilgĂŠngeligt fra fjerde version);
  • du kan dra nytte af vores erfaring og integration med "ClickHouse".

For at radikalt Ăžge hastigheden af dataindsamling, saml dem med asynkrone metoder og overfĂžr dem via trapper-interface til "Zabbix"-serveren; eller du kan bruge en patch til asynkronitet for selve "Zabbix"'s pollere.

«Zabbix» er skrevet i C og er ret effektiv. Nogle lÞsninger pÄ smalle arkitektoniske steder gÞr det muligt at Þge dens ydeevne yderligere, og efter vores erfaring kan man fÄ mere end 100.000 metrikker pÄ en enkeltprocessor-maskine.

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Den samme Zabbix-patch

MM: – Jeg vil gerne tilfĂžje et par punkter. Hele den nuvĂŠrende prĂŠsentation, alle testene, tallene er givet for den konfiguration, vi bruger. Fra den tager vi nu cirka 20.000 metrikker i sekundet. Hvis du forsĂžger at forstĂ„, om det vil fungere for dig – kan du sammenligne. Det, vi har prĂŠsenteret i dag, er tilgĂŠngeligt pĂ„ GitHub som en patch: github.com/miklert/zabbix

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

Patchen inkluderer:

  • fuld integration med «ClickHouse» (bĂ„de Zabbix-servere og frontend);
  • lĂžsning af problemer med prĂŠprocessor-manageren;
  • asynkron polling.

Patchen er kompatibel med hele version 4, inklusive lts. Sandsynligvis vil den fungere med minimale Êndringer pÄ version 3.4.

Tak for opmĂŠrksomheden.

SpÞrgsmÄl

SpĂžrgsmĂ„l fra publikum (herefter – A): – Goddag! Kan I fortĂŠlle mig, om I har planer om intenst samarbejde med Zabbix-teamet eller de med jer, sĂ„ dette ikke vil vĂŠre en patch, men et normalt adfĂŠrd for «Zabbix»?

MM: – Ja, nogle éndringer vil vi helt sikkert commite. Nogle ting vil blive, som de er, i patchen.

A: – Tusind tak for en fremragende prĂŠsentation! Kan I fortĂŠlle mig, efter anvendelse af patchen, vil stĂžtten fra «Zabbix» forblive, og hvordan kan man derefter opgradere til hĂžjere versioner? Vil det vĂŠre muligt at opgradere «Zabbix» til 4.2, 5.0 efter jeres patch?

MM: – Om support kan jeg ikke sige. Hvis jeg var support for «Zabbix», ville jeg sandsynligvis sige nej, fordi det er anden parts kode. Hvad angĂ„r kodebasen 4.2, er vores position sĂ„dan: «Vi vil fĂžlge med tiden og selv opgradere til den nĂŠste version». Derfor vil vi i et stykke tid udgive patchen til de opdaterede versioner. Jeg sagde allerede i prĂŠsentationen: Antallet af ĂŠndringer mellem versionerne er indtil videre ret lille. Jeg tror, at overgangen fra 3.4 til 4 tog os cirka 15 minutter. Der ĂŠndrede sig lidt, men ikke noget vigtigt.

A: – SĂ„ I planlĂŠgger at stĂžtte jeres patch, og man kan trygt installere det i produktionen, og senere fĂ„ opdateringer pĂ„ en eller anden mĂ„de?

MM: – Vi anbefaler det kraftigt. Det lþser mange problemer for os.

MCh: – Jeg vil endnu engang understrege, at éndringer, der ikke vedrþrer arkitekturen og ikke involverer blokeringer eller kþer, de er modulerede, de er i separate moduler. Selv ved mindre éndringer kan de holdes ret nemt.

MM: – Hvis du er interesseret i detaljerne, sĂ„ bruger «Klikhaus» det sĂ„kaldte historiebibliotek. Det er adskilt – det er en kopi af «Elastix»'s stĂžtte, det vil sige, det kan konfigureres. Polling ĂŠndrer kun pollere. Vi mener, at det vil fungere i lang tid.

A: – Mange tak. Kan du fortélle, om der findes nogen dokumentation for de foretagne éndringer?

HighLoad++, Mikhail Makurov, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ én server

MM: – Dokumentationen er et patch. Det er Ă„benlyst, at med introduktionen af «Klikhaus», med indfĂžrelsen af nye typer pollere, opstĂ„r der nye konfigurationsmuligheder. Der er et kort beskrivelser i linket fra den sidste slide, om hvordan man bruger dette.

Om udskiftning af fping med nmap

A: – Hvordan har I i sidste ende implementeret dette? Kan du give konkrete eksempler: bruger I strappere og et eksternt script? Hvad kontrollerer sĂ„ hurtigt et sĂ„ stort antal vĂŠrter? Hvordan fĂ„r I de vĂŠrter? Skal man pĂ„ en eller anden mĂ„de fodre nmap med dem, fĂ„ dem fra et sted, lĂŠgge dem ind, starte noget op?..

MM: – Fedt. Meget relevant spĂžrgsmĂ„l! Essensen er denne. Vi har modificeret biblioteket (ICMP ping, en del af «Zabbix») til ICMP-tjek, hvor antallet af pakker er Ă©n (1), og koden forsĂžger at bruge nmap. SĂ„ det er Zabbix' interne arbejde, det er blevet til pingers interne arbejde. Derfor krĂŠves der ingen synkronisering eller brug af en trapper. Dette blev gjort bevidst for at bevareystemet intakt og undgĂ„ at synkronisere to systemer, som skal kontrolleres, uploads via polleren, og om vores upload er brudt?.. Det er meget enklere.

A: – GĂŠlder dette ogsĂ„ for proxy?

MM: – Ja, men vi har ikke testet det. Koden til polling er den samme i bĂ„de Zabbix og serveren. Det burde fungere. Jeg vil endnu en gang understrege: systemets ydeevne er sĂ„dan, at vi ikke har brug for en proxy.

MCh: – Det rigtige svar pĂ„ spĂžrgsmĂ„let er: «Hvorfor har I brug for en proxy med et sĂ„dant system?» Kun pĂ„ grund af NAT eller for at overvĂ„ge gennem en langsom kanal


A: – Og bruger I «Zabbix» som alerter, hvis jeg har forstĂ„et det korrekt? Eller er grafikkerne (hvor det arkiverede lag er) flyttet til et andet system, som Grafana? Eller bruger I ikke denne funktion?

MM: – Jeg vil endnu en gang understrege: vi har gennemfĂžrt fuld integration. Vi sender historikken til ‘Clickhouse’, men har samtidig ĂŠndret PHP-frontenden. PHP-frontenden henter data fra ‘Clickhouse’ og laver alle grafer derfra. Ærligt talt har vi ogsĂ„ en del, der bygger data i andre grafiske systemer baseret pĂ„ de samme data fra ‘Zabbix’.

MCh: – Inkluderet i ‘Grafana’.

Hvordan blev beslutningen om tildeling af ressourcer truffet?

A: – Del lidt af den interne proces. Hvordan blev beslutningen om at tildele ressourcer til en seriþs omarbejdning af produktet truffet? Det indebérer jo visse risici. Og fortél mig venligst i forhold til at I planlégger at stþtte nye versioner: hvordan retférdiggþres denne beslutning i forhold til ledelsen?

MM: – Tilsyneladende har vi ikke fortalt dramaet i historien sérlig godt. Vi befandt os i en situation, hvor der skulle gþres noget, og vi gik i praksis med to parallelle teams:

  • Det ene arbejdede pĂ„ at lancere et overvĂ„gningssystem med nye metoder: overvĂ„gning som en service, et standard sĂŠt af open source-lĂžsninger, som vi kombinerer og derefter forsĂžger at ĂŠndre forretningsprocesserne for at arbejde med det nye overvĂ„gningssystem.
  • Samtidig havde vi en entusiastisk programmĂžr, der beskĂŠftigede sig med det (om sig selv). Det viste sig, at han vandt.

A: – Og hvad er teamets stþrrelse?

MCh: – De stĂ„r foran jer.

A: – SĂ„ som altid er der brug for en passioneret leder?

MM: – Jeg ved ikke, hvad en passioneret leder er.

A: – I det tilfélde, ser det ud til, at det er dig. Mange tak, I er fantastiske.

MM: – Tak.

Om patches til Zabbix

A: – For et system, der bruger proxy (for eksempel i nogle distribuerede systemer), er det muligt at tilpasse og patch dine lþsninger, lad os sige, pullere, proxy og delvist préprocessor for selve ‘Zabbix’; og deres interaktion? Er det muligt at optimere de eksisterende lþsninger til et system med flere proxyer?

MM: – Jeg ved, at ‘Zabbix’-serveren bygges med hjĂŠlp fra proxy (kompileres og koden genereres). Vi har ikke testet dette i produktion. Jeg er ikke sikker pĂ„ det, men efter min mening bruges prĂŠprocessor-manager ikke i proxy. Proxyens opgave er at tage et sĂŠt metric fra ‘Zabbix’, indsamle dem (den registrerer ogsĂ„ konfigurationen, den lokale database) og sende dem tilbage til ‘Zabbix’-serveren. PrĂŠprocesseringen vil blive udfĂžrt af serveren selv, nĂ„r den modtager dataene.

Interessen for proxy er forstÄelig. Vi vil undersÞge det. Det er et interessant emne.

A: – Ideen var, at hvis man kan patche pollere, kan man patche dem til proxy og tilpasse interaktionen med serveren, og preprocessoren kun tilpasse disse formĂ„l pĂ„ serveren.

MM: – Jeg tror, det er faktisk enklere. Du tager koden, anvender patchen, konfigurerer som du þnsker – samler proxy-servere (for eksempel med ODBC) og distribuerer den patcherede kode til systemerne. Hvor det er nþdvendigt, samler du proxy, hvor det er nþdvendigt, server.

A: – Skal man ikke ogsĂ„ patch overfĂžrslen af proxy til serveren, sandsynligvis?

MCh: – Nej, det er standard.

MM: – Faktisk lĂžd det ikke som en af idĂ©erne. Vi har altid strĂŠbt efter at opretholde en balance mellem ideernes eksplosion og antallet af ĂŠndringer, nemhedsgraden ved vedligeholdelse.

Afspil video

Lidt reklame 🙂

Tak fordi du bliver hos os. Kan du lide vores artikler? Ønsker du at se flere interessante materialer? StÞt os ved at bestille eller anbefale os til dine bekendte, cloud VPS til udviklere fra 4,99 $, en unik analog til entry-level servere, som vi har designet til dig: Alt om VPS (KVM) E5-2697 v3 (6 kerner) 10 GB DDR4 480 GB SSD 1 Gbps fra 19 $ eller hvordan man deler serveren korrekt? (tilgÊngelige muligheder med RAID1 og RAID10, op til 24 kerner og op til 40 GB DDR4).

Dell R730xd til halv pris i datacenteret Equinix Tier IV i Amsterdam? Kun hos os 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB fra 199 $ i Holland! Dell R420 - 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - fra 99 $! LĂŠs om hvordan man bygger enterprise-infrastruktur ved hjĂŠlp af Dell R730xd E5-2650 v4 servere til 9000 euro for en brĂžkdel af prisen?

Kilde: habr.com

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster