HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

NÀsta konferens HighLoad++ Àger rum den 6 och 7 april 2020 i Sankt Petersburg. Mer information och biljetter. via lÀnken. HighLoad++ Moskva 2018. Sal "Moskva". 9 november, 15:00. Sammanfattningar och presentation.

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

* Övervakning – online och analys.
* GrundlÀggande begrÀnsningar av plattformen ZABBIX.
* Lösning för skalning av analyslagring.
* Optimering av ZABBIX-servern.
* Optimering av UI.
* Erfarenhet av systemdrift med belastningar över 40k NVPS.
* Kort sammanfattning.

Mikhail Makurov (hĂ€danefter – MM): – Hej allihopa!

Maxim Chernytsov (hĂ€danefter – MC): – God eftermiddag!

MM: – LĂ„t mig fĂ„ presentera Maxim. Max – en talangfull ingenjör, den bĂ€sta nĂ€tverksspecialisten jag kĂ€nner. Maxim arbetar med nĂ€tverk och tjĂ€nster, deras utveckling och drift.

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MC: – Och jag skulle vilja berĂ€tta om Mikhail. Mikhail – en programmerare i C. Han har skrivit flera högpresterande lösningar för trafikbehandling för vĂ„rt företag. Vi bor och arbetar i Ural, i staden med strĂ€nga mĂ€n Tjeljabinsk, pĂ„ företaget "Intersvyaz". VĂ„rt företag Ă€r en internet- och kabel-TV-leverantör till en miljon mĂ€nniskor i 16 stĂ€der.

MM: – Och det Ă€r vĂ€rt att nĂ€mna att "Intersvyaz" Ă€r mycket mer Ă€n bara en leverantör, det Ă€r ett IT-företag. De flesta av vĂ„ra lösningar har skapats av vĂ„r IT-avdelning.

A: FrÄn servrar som hanterar trafik till callcenter och mobilapplikationer. IT-avdelningen har för nÀrvarande cirka 80 personer med mycket varierande kompetens.

Om Zabbix och dess arkitektur

MC: – Och nu ska jag försöka sĂ€tta ett personligt rekord och pĂ„ en minut förklara vad Zabbix (hĂ€danefter – "Zabbix") Ă€r.

"Zabbix" positionerar sig som ett övervakningssystem "out of the box" pĂ„ företagsnivĂ„. Det har mĂ„nga funktioner som förenklar livet: avancerade eskaleringsregler, API för integration, gruppering och automatisk upptĂ€ckte av vĂ€rdar och mĂ€tvĂ€rden. I "Zabbix" finns sĂ„ kallade skalningsverktyg – proxyer. "Zabbix" Ă€r ett system med öppen kĂ€llkod.

Kort om arkitekturen. Man kan sÀga att den bestÄr av tre komponenter:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

  • Server. Skriven i C. Med relativt komplex bearbetning och överföring av information mellan trĂ„dar. All bearbetning sker dĂ€r: frĂ„n mottagning till lagring i databasen.
  • All data lagras i en databas. "Zabbix" stödjer MySQL, PostgreSQL och Oracle.
  • WebbgrĂ€nssnittet Ă€r skrivet i PHP. I de flesta system levereras det med Apache-servern, men det fungerar effektivare i kombination med nginx + php.

I dag skulle vi vilja berĂ€tta en historia frĂ„n vĂ„rt företags liv, kopplad till "Zabbix"


En historia frÄn företaget "Intersvyaz". Vad vi har och vad vi behöver?

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server
För 5 eller 6 mĂ„nader sedan. En dag efter arbetet


MC: – Misha, hej! Kul att jag lyckades fĂ„ tag pĂ„ dig – vi mĂ„ste prata. Vi har haft problem med övervakningen igen. Under en stor olycka stannade allt, och det fanns ingen information om nĂ€tverksstatusen. TyvĂ€rr upprepas det hĂ€r inte för första gĂ„ngen. Jag behöver din hjĂ€lp. LĂ„t oss se till att vĂ„r övervakning fungerar under alla omstĂ€ndigheter!

MM: – Men först lĂ„t oss synkronisera oss. Jag har inte tittat dĂ€r pĂ„ ett par Ă„r. SĂ„vitt jag minns avsade vi oss Nagios och gick över till "Zabbix" för ungefĂ€r 8 Ă„r sedan. Och nu har vi, verkar det som, 6 kraftfulla servrar och cirka ett dussin proxys. Jag blandar inte ihop nĂ„got?

MC: – NĂ€stan. 15 servrar, varav en del Ă€r virtuella maskiner. Det viktigaste Ă€r att det inte rĂ€ddar oss i de ögonblick nĂ€r vi behöver det som mest. Vid olyckor – servrarna hĂ€nger sig och inget syns. Vi har försökt optimera konfigurationen, men det ger ingen optimal prestandaförbĂ€ttring.

MM: – Jag förstĂ„r. Har ni sett pĂ„ nĂ„got, har ni redan grĂ€vt i diagnostiken?

MC: – Det första vi har att göra med Ă€r just databasen. MySQL Ă€r stĂ€ndigt belastad och lagrar nya mĂ€tvĂ€rden, och nĂ€r "Zabbix" börjar generera en massa hĂ€ndelser – gĂ„r databasen in i sig sjĂ€lv i bokstavligen flera timmar. Jag har redan berĂ€ttat om optimering av konfigurationen, men just i Ă„r har vi uppdaterat hĂ„rdvaran: servrarna har över hundra gigabyte minne och diskar pĂ„ SSD RAID – det finns ingen poĂ€ng i att öka storleken lĂ€ngre. Vad ska vi göra?

MM: – Jag förstĂ„r. Generellt Ă€r MySQL en LTP-databas. Det verkar som att den inte lĂ€ngre passar för lagring av arkivet av mĂ€tvĂ€rden av vĂ„r storlek. LĂ„t oss analysera det.

MC: – LĂ„t oss göra det!

Integrationen av Zabbix och Clickhouse som en resultat av hackathonet

Efter en tid fick vi intressanta data:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Den största delen av utrymmet i vÄr databas var upptagen av en arkiv av mÀtningar och mindre Àn 1 % anvÀndes för konfiguration, mallar och instÀllningar. Vid den tidpunkten hade vi redan anvÀnt en Big Data-lösning baserad pÄ Clickhouse i över ett Är. Riktningen för oss var uppenbar. PÄ vÄr vÄr Hackathon skrev jag en integration av Zabbix med Clickhouse för servern och fronten. Vid den tidpunkten hade Zabbix redan stöd för ElasticSearch, och vi bestÀmde oss för att jÀmföra dem.

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

JÀmförelse mellan Clickhouse och Elasticsearch

MM: – För jĂ€mförelsen genererade vi en belastning som motsvarade den som Zabbix-servern levererar och sĂ„g hur systemen skulle prestera. Vi skrev data i batchar om 1000 rader och anvĂ€nde CURL. Vi antog pĂ„ förhand att Clickhouse skulle vara mer effektivt för den belastningsprofil som Zabbix producerar. Resultaten övertrĂ€ffade till och med vĂ„ra förvĂ€ntningar:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Under samma förutsÀttningar vid testerna skrev Clickhouse tre gÄnger sÄ mycket data. BÄda systemen konsumerade mycket effektivt (lite resurser) vid lÀsning av data. Men ElasticSearch krÀvde en stor mÀngd processorkraft vid skrivning:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Sammanfattningsvis övertrÀffade Clickhouse ElasticSearch betydligt bÄde vad gÀller processoranvÀndning och hastighet. Genom datakomprimering anvÀnder Clickhouse dessutom 11 gÄnger mindre utrymme pÄ hÄrddisken och gör ungefÀr 30 gÄnger fÀrre diskoperationer:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MC: – Ja, arbetet med diskunderlaget i Clickhouse Ă€r vĂ€ldigt effektivt implementerat. För databaser kan man anvĂ€nda stora SATA-diskar och uppnĂ„ skrivhastigheter pĂ„ hundratusentals rader per sekund. Systemet stödjer sharding och replikering direkt ur lĂ„dan och Ă€r ganska enkelt att stĂ€lla in. Vi Ă€r mer Ă€n nöjda med dess drift under ett Ă„r.

För att optimera resurser kan Clickhouse installeras bredvid den befintliga huvuddatabasen och dÀrmed spara en hel del processor- och diskoperationstid. Vi har flyttat arkivet av mÀtningar till redan existerande Clickhouse-kluster:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Vi har avlastat den huvudsakliga MySQL-databasen sÄ mycket att vi kunde kombinera den pÄ en och samma maskin med Zabbix-servern och avstÄ frÄn en dedikerad server för MySQL.

Hur fungerar polling i Zabbix?

4 mÄnader sedan

MM: – Tja, kan vi glömma problemen med databasen?

MC: – Det stĂ€mmer! En annan uppgift vi behöver lösa Ă€r den lĂ„ngsamma datainsamlingen. Nu Ă€r alla vĂ„ra 15 proxyservrar överbelastade med SNMP-processer och polling. Och det finns inget annat alternativ Ă€n att sĂ€tta upp fler och fler servrar.

MM: – UtmĂ€rkt. Men berĂ€tta först hur polling fungerar i "Zabbix"?

MC: – Kort sagt finns det 20 typer av mĂ€tvĂ€rden och ett dussin sĂ€tt att fĂ„ dem. "Zabbix" kan samla in data antingen i lĂ€get "request – response" eller vĂ€nta pĂ„ nya data via "TrappergrĂ€nssnittet".

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Det Àr vÀrt att notera att i det ursprungliga "Zabbix" Àr den hÀr metoden (Trapper) den snabbaste.

Det finns proxyservrar för lastbalansering:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Proxyer kan utföra samma insamlingsfunktioner som "Zabbix-servern", genom att fÄ uppgifter frÄn den och skicka de insamlade mÀtvÀrdena direkt via Trapper-grÀnssnittet. Detta Àr det officiellt rekommenderade sÀttet att balansera lasten. Proxyer Àr ocksÄ anvÀndbara för att övervaka fjÀrrinfrastruktur som arbetar genom NAT eller en lÄngsam kanal:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MM: – Arkitekturen Ă€r tydlig. Vi mĂ„ste titta pĂ„ kĂ€llkoden...

NÄgra dagar senare

Sagan om hur nmap fping segrade

MM: – Det verkar som om jag har hittat nĂ„got.

MC: – BerĂ€tta!

MM: – Jag upptĂ€ckte att nĂ€r "Zabbix" gör tillgĂ€nglighetstester kontrollerar den högst 128 vĂ€rdar samtidigt. Jag försökte öka det hĂ€r talet till 500 och tog bort mellanpaketsintervallet i deras ping – vilket dubblerade prestandan. Men jag skulle vilja ha större siffror.

MC: – I min praktik mĂ„ste jag ibland kontrollera tillgĂ€ngligheten av tusentals vĂ€rdar, och jag har inte sett nĂ„got som Ă€r snabbare Ă€n nmap för det. Jag Ă€r sĂ€ker pĂ„ att det Ă€r det snabbaste sĂ€ttet. LĂ„t oss prova det! Vi mĂ„ste signifikant öka antalet vĂ€rdar per iteration.

MM: – Kontrollera fler Ă€n fem hundra? 600?

MC: – Minst ett par tusen.

MM: – Okej. Det viktigaste jag ville sĂ€ga: jag har funnit att det mesta av pollingen i "Zabbix" görs synkront. Vi mĂ„ste definitivt göra om det i asynkront lĂ€ge. DĂ„ kan vi radikalt öka antalet mĂ€tvĂ€rden som samlas in av pollers, speciellt om vi ökar antalet mĂ€tvĂ€rden per iteration.

MC: – Fantastiskt! Och nĂ€r?

MM: – Som vanligt, igĂ„r.

MC: – Vi jĂ€mförde bĂ„da versionerna av fping och nmap:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

PÄ ett stort antal vÀrdar visade sig nmap vara upp till fem gÄnger effektivare Àn vÀntat. Eftersom nmap bara kontrollerar tillgÀnglighet och svarstid flyttade vi förlustberÀkningarna till triggers och minskade avsevÀrt intervallen för tillgÀnglighetskontroll. Det optimala antalet vÀrdar för nmap fann vi vara runt 4000 per iteration. Nmap gjorde det möjligt för oss att minska CPU-kostnaderna för tillgÀnglighetskontroller med tre gÄnger och förkorta intervallet frÄn 120 sekunder till 10.

Optimering av polling

MM: – Sedan tog vi oss an pollarna. Framförallt var vi intresserade av att hĂ€mta SNMP och agenter. I "Zabbix" görs polling synkront och speciella Ă„tgĂ€rder har vidtagits för att öka systemets effektivitet. I synkront lĂ€ge orsakar otillgĂ€nglighet av vĂ€rdar en betydande nedgĂ„ng i pollingen. Det finns ett helt system av tillstĂ„nd och speciella processer – de sĂ„ kallade unreachable-pollarna, som endast arbetar med otillgĂ€ngliga vĂ€rdar:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Detta Àr en kommentar som visar tillstÄndsmatrisen, hela komplexiteten i tillstÄndsövergÄngarna som krÀvs för att systemet ska förbli effektivt. Dessutom Àr sjÀlva den synkrona pollingen ganska lÄngsam:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Det Àr dÀrför tusentals trÄdar av pollare pÄ ett dussin proxyservrar inte kunde samla in det önskade antalet uppgifter för oss. Den asynkrona implementeringen löste inte bara problemen med antalet trÄdar, utan förenklade ocksÄ tillstÄndssystemet för otillgÀngliga vÀrdar avsevÀrt, eftersom den maximala vÀntetiden vid vilket antal kontrollerade i en iterationspolling var 1 timeout:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Dessutom modifierade och utvecklade vi polling-systemet för SNMP-förfrÄgningar. Det Àr sÄ att de flesta inte kan svara pÄ flera SNMP-förfrÄgningar samtidigt. DÀrför gjorde vi ett hybridlÀge, dÀr SNMP-pollingen för samma vÀrd görs asynkront:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Detta görs för hela gruppen av vÀrdar. Detta lÀge Àr i slutÀndan inte lÄngsammare Àn helt asynkront, eftersom en förfrÄgan av 150 SNMP-vÀrden fortfarande Àr mycket snabbare Àn 1 timeout.

VÄra experiment visade att det optimala antalet förfrÄgningar per iteration Àr cirka 8000 vid SNMP-polling. Sammanfattningsvis har övergÄngen till asynkront lÀge möjliggjort att öka pollingens prestanda 200 gÄnger, i flera hundra gÄnger.

MC: De erhÄllna optimeringarna av polling har visat att vi inte bara kan bli av med alla proxyer, utan ocksÄ minska intervallen för mÄnga kontroller, och proxyer kommer att bli överflödiga som metod för lastfördelning.

För cirka tre mÄnader sedan

Ändra arkitekturen – öka lasten!

MM: NÄvÀl, Max, Àr det dags för produktion? Jag behöver en kraftfull server och en bra ingenjör.

MC: Okej, vi planerar det. Det Àr verkligen dags att komma vidare frÄn deadlocken pÄ 5 000 mÀtvÀrden per sekund.

Morgonen efter uppgraderingen

MC: Misha, vi uppdaterade, men till morgonen Ätergick vi tillbaka
 Gissa vilken hastighet vi lyckades uppnÄ?

MM: Cirka 20 tusen högst.

MC: Aha, 25! TyvÀrr Àr vi dÀr vi började.

MM: Vad hÀnde? Har ni gjort nÄgon diagnos?

MC: Ja, sjÀlvklart! HÀr Àr till exempel en intressant top:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MM: LÄt oss titta. Jag ser att vi försökte med ett enormt antal pollingtrÄdar:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Men vi har samtidigt inte kunnat utnyttja systemet ens till hÀlften:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Och den totala prestandan Àr ganska lÄg, runt 4 000 mÀtvÀrden per sekund:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Finns det nÄgot mer?

MC: Ja, strace av en av pollrarna:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MM: HÀr ser vi tydligt att pollingprocessen vÀntar pÄ "semaforer". Det Àr blockeringar:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MC: Oklart.

MM: Titta, det liknar en situation dĂ€r mĂ„nga trĂ„dar försöker arbeta med en resurs, som bara kan anvĂ€ndas av en Ă„t gĂ„ngen. DĂ„ kan de allt de kan göra – dela den hĂ€r resursen över tid:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Och den sammanlagda prestandan med en sÄdan resurs begrÀnsas av hastigheten av en kÀrna:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Det finns tvÄ sÀtt att lösa ett sÄdant problem.

Uppgradera maskinens hÄrdvara, gÄ till snabbare kÀrnor:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Eller Ă€ndra arkitektur och parallellt – lasten:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MC: För övrigt kommer vi att anvÀnda ett mindre antal kÀrnor pÄ testmaskinen Àn pÄ produktionsmaskinen, men de Àr cirka 1,5 gÄnger snabbare i klockfrekvens per kÀrna!

MM: FörstÄr du? Vi mÄste kolla serverkoden.

DatavÀgen i Zabbix-servern

MC: För att förstÄ, började vi analysera hur data överförs inom "Zabbix"-servern:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

En cool bild, eller hur? LÄt oss gÄ igenom den steg för steg för att mer eller mindre klargöra. Det finns trÄdar och tjÀnster som Àr ansvariga för att samla in data:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

De insamlade mÀtvÀrdena skickar de via en socket till Preprocessor manager, dÀr de sparas i en kö:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

"Preprocessor manager" vidarebefordrar data till sina arbetare, som utför instruktionerna för förbehandling och returnerar dem tillbaka via samma socket:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Efter detta sparar preprocessormanagern dem i historikkölen:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

DÀr hÀmtas de av historiesynkroniserare som utför flera funktioner: till exempel berÀkning av triggar, fyllning av vÀrdekölen och, viktigast av allt, lagring av mÀtvÀrden i historiklagret. Sammanfattningsvis Àr processen komplicerad och ganska förvirrande.

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MM: – Det första vi sĂ„g var att de flesta trĂ„dar konkurrerade om den sĂ„ kallade "konfigurationscache" (ett minnesomrĂ„de dĂ€r alla serverkonfigurationer lagras). SĂ€rskilt mĂ„nga lĂ„s görs av trĂ„dar som ansvarar för datainsamling:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server


eftersom konfigurationen lagrar inte bara mĂ€tvĂ€rden med deras parametrar, utan ocksĂ„ köer frĂ„n vilka pollare hĂ€mtar information om vad de ska göra hĂ€rnĂ€st. NĂ€r det finns mĂ„nga pollare, och en blockerar konfigurationen, vĂ€ntar de andra pĂ„ förfrĂ„gningar:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Pollare bör inte konfliktera

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

DÀrför var det första vi gjorde att dela upp kön i 4 delar och tillÄta pollarna att sÀkert blockera dessa köer, dessa delar samtidigt:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Detta eliminerade konkurrensen om konfigurationscache, och pollarnas arbets hastighet ökade avsevÀrt. Men sedan stötte vi pÄ problemet att preprocessormanagern började samla pÄ sig en kö av uppgifter:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Preprocessormanagern mÄste kunna prioritera

Detta hÀnde nÀr det saknades prestanda. DÄ var allt han kunde göra att samla in förfrÄgningar frÄn datainsamlingsprocesser och lagra dem i bufferten tills den tog hela minnet och kraschade:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

För att lösa detta problem lade vi till en andra socket som var speciellt avsedd för arbetare:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

SÄledes fick preprocessormanagern möjlighet att prioritera sitt arbete och i hÀndelse av bufferttillvÀxt fördröja insamlingen, vilket gav arbetarna möjlighet att ta den bufferten:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

DÀrefter upptÀckte vi att en av anledningarna till fördröjningen var arbetarna sjÀlva, eftersom de konkurrerade om en resurs som var helt oviktig för deras arbete. Detta problem formulerade vi som en buggfix, och i de nya versionerna av "Zabbix" Àr det redan löst:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Ökar antalet sockets – fĂ„r resultat

DÀrefter blev sjÀlva preprocessormanagern en flaskhals, eftersom detta Àr en trÄd. Den nÄdde kÀrnans hastighet och gav en maximal hastighet pÄ cirka 70 000 mÀtvÀrden per sekund:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

SÄ vi gjorde fyra, med fyra uppsÀttningar av sockets, arbetare:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Och det gjorde att vi kunde öka hastigheten till ungefÀr 130 000 mÀtningar:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Icke-linjÀriteten i tillvÀxten förklaras av att det uppstod konkurrens om cache-historiken. Fyra preprocessormanagers och history-synkroniserare tÀvlade om den. Vid den tidpunkten fick vi pÄ testmaskinen ungefÀr 130 000 mÀtningar per sekund, och utnyttjade den ungefÀr 95 % av processorn:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

För ungefÀr 2,5 mÄnader sedan

Att överge snmp-community ökade NVP:erna med en och en halv gÄng

MM: – Max, jag behöver en ny testmaskin! I den nuvarande fĂ„r vi inte plats lĂ€ngre.

MC: – Vad har vi just nu?

MM: – Just nu – 130k NVP:er och processorn "i hyllan".

MC: – Wow! Coolt! VĂ€nta, jag har tvĂ„ frĂ„gor. Enligt mina berĂ€kningar ligger vĂ„rt behov pĂ„ cirka 15-20 000 mĂ€tningar per sekund. Varför behöver vi mer?

MM: – Jag vill göra jobbet fĂ€rdigt. Jag vill se hur mycket vi kan fĂ„ ut av det hĂ€r systemet.

MC: – Men


MM: – Men det Ă€r vĂ€rdelöst för verksamheten.

MC: – FörstĂ„r. Och den andra frĂ„gan: kommer vi att kunna stödja det vi har nu pĂ„ egen hand, utan hjĂ€lp av utvecklaren?

MM: – Jag tror inte det. Att Ă€ndra hur konfigurationscachen fungerar Ă€r ett problem. Det berör Ă€ndringar i de flesta trĂ„dar och Ă€r ganska svĂ„rt att underhĂ„lla. Det kommer sannolikt att bli vĂ€ldigt tufft att stödja.

MC: – DĂ„ behöver vi nĂ„got alternativ.

MM: – Det finns ett alternativ. Vi kan gĂ„ över till snabba kĂ€rnor och överge det nya lĂ„sningssystemet. Vi fĂ„r fortfarande en prestanda pĂ„ 60-80 000 mĂ€tningar. Samtidigt kan vi behĂ„lla all annan kod. "Clickhouse" och asynkron polling kommer att fungera. Och det kommer att vara lĂ€tt att underhĂ„lla.

MC: – UtmĂ€rkt! Jag föreslĂ„r att vi stannar hĂ€r.

Efter optimering av serverdelen kunde vi Àntligen lansera den nya koden i produktion. Vi avstod frÄn vissa Àndringar för att gÄ över till en maskin med snabba kÀrnor och minimera antalet Àndringar i koden. Vi förenklade ocksÄ konfigurationen och avstod frÄn makron i datakomponenterna nÀr det var möjligt, eftersom de Àr en kÀlla till extra lÄsningar.

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Till exempel ledde övergivandet av det makro snmp-community som ofta förekommer i dokumentationen och exemplen i vÄrt fall till en ytterligare ökning av NVP:erna med cirka 1,5 gÄnger.

Efter tvÄ dagar i produktion

Vi tar bort popup-fönster för incidenthistorik

MC: – Misha, vi har anvĂ€nt systemet i tvĂ„ dagar, och allt fungerar. Men bara nĂ€r allt fungerar! Vi hade planerat arbete med att flytta en ganska stor del av nĂ€tverket, och vi kontrollerade Ă„terigen manuellt vad som fungerade och vad som inte gjorde.

MM: – Det kan inte vara sant! Vi har kontrollerat allt tio gĂ„nger. Servern hanterar till och med fullstĂ€ndig nĂ€tverksavbrott omedelbart.

MC: – Jag förstĂ„r allt: servern, databasen, top, austat, loggar – allt gĂ„r snabbt
 Men vi tittar pĂ„ webbgrĂ€nssnittet, och dĂ€r Ă€r CPU:n pĂ„ servern «i vilolĂ€ge» och detta:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MM: – FörstĂ„r. LĂ„t oss titta pĂ„ webbgrĂ€nssnittet. Vi upptĂ€ckte att i situationer med ett stort antal aktiva incidenter, började de flesta operativa widgets att arbeta mycket lĂ„ngsamt:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Orsaken till detta var generering av popup-fönster med incidenthistorik, som genereras för varje element i listan. DÀrför avstod vi frÄn att generera dessa fönster (kommenterade 5 rader i koden), och detta löste vÄra problem.

Laddningstiden för widgets, Àven vid fullstÀndig otillgÀnglighet, minskade frÄn flera minuter till acceptabla 10-15 sekunder för oss, och historik kan fortfarande granskas genom att klicka pÄ tidslinjen:

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Efter jobbet. För tvÄ mÄnader sedan

MC: – Misha, gĂ„r du? Vi mĂ„ste prata.

MM: – Jag tĂ€nkte inte göra det. Är det nĂ„got med «Zabbix» igen?

MC: – Nej, slappna av! Jag ville bara sĂ€ga: allt fungerar, tack! Jag bjuder pĂ„ öl.

Zabbix Àr effektiv

«Zabbix» Àr ett ganska mÄngsidigt och rikt system och funktion. Det gÄr bra att anvÀnda det för smÄ installationer «ur lÄdan», men med ökade behov mÄste det optimeras. För att lagra ett stort arkiv av metrik, anvÀnd ett lÀmpligt lagringssystem:

  • Du kan anvĂ€nda de inbyggda funktionerna i form av integration med «Elasticsearch» eller exportering av historik till textfiler (tillgĂ€ngligt frĂ„n fjĂ€rde versionen);
  • Du kan anvĂ€nda vĂ„r erfarenhet och integration med «ClickHouse».

För att radikalt öka hastigheten pÄ insamlingen av metrik, samla dem med asynkrona metoder och överför dem via trapper-grÀnssnittet till «Zabbix»-servern; eller sÄ kan du anvÀnda en patch för asynkronitet för Zabbix:s poller.

Zabbix Àr skrivet i C och Àr ganska effektivt. De specifika arkitekturproblem som finns gör det möjligt att ytterligare öka dess prestanda och, enligt vÄr erfarenhet, att fÄ mer Àn 100 000 metrik pÄ en enprocessor-maskin.

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Den dÀr patchen Zabbix

MM: – Jag vill lĂ€gga till ett par punkter. Hela den aktuella presentationen, alla tester och siffror Ă€r presenterade för den konfiguration som vi anvĂ€nder. FrĂ„n den fĂ„r vi just nu cirka 20 000 metrik per sekund. Om du försöker förstĂ„ om detta kommer att fungera för dig – kan du jĂ€mföra. Det som har presenterats idag finns pĂ„ GitHub som en patch: github.com/miklert/zabbix

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

Patchen inkluderar:

  • fullstĂ€ndig integration med ClickHouse (bĂ„de Zabbix-servern och frontend);
  • lösning av problem med preprocessormanagern;
  • asynkron polling.

Patchen Àr kompatibel med hela version 4, inklusive lts. Troligtvis kommer den att fungera med minimala Àndringar pÄ version 3.4.

Tack för uppmÀrksamheten.

FrÄgor

FrĂ„ga frĂ„n publiken (hĂ€danefter – A): – Goddag! Kan ni berĂ€tta om ni har planer för intensivt samarbete med Zabbix-teamet eller om de har med er, sĂ„ att det inte bara blir en patch, utan en normal funktionalitet i Zabbix?

MM: – Ja, vi kommer definitivt att committa delar av Ă€ndringarna. Vissa saker kommer att stanna i patchen.

A: – Tack sĂ„ mycket för den utmĂ€rkta presentationen! Kan ni berĂ€tta om stöd frĂ„n Zabbix kommer att finnas kvar efter att patchen har tillĂ€mpats och hur man sedan uppdaterar till högre versioner? Kommer det att vara möjligt att uppdatera Zabbix efter er patch till 4.2, 5.0?

MM: – NĂ€r det gĂ€ller stödet kan jag inte sĂ€ga. Om jag var teknisk support för Zabbix skulle jag förmodligen sĂ€ga nej, eftersom det Ă€r en tredjeparts kod. NĂ€r det gĂ€ller kodbasen 4.2 Ă€r vĂ„r stĂ„ndpunkt denna: "Vi kommer att följa med tiden och sjĂ€lva uppdatera till nĂ€sta version." SĂ„ under en tid kommer vi att publicera patchar för uppdaterade versioner. Jag sa redan i presentationen att antalet Ă€ndringar mellan versionerna hittills Ă€r ganska litet. Jag tror att övergĂ„ngen frĂ„n 3.4 till 4 tog oss, verkar det som, cirka 15 minuter. Det har Ă€ndrats nĂ„got, men inte sĂ€rskilt viktigt.

A: – SĂ„ ni planerar att stödja er patch och man kan tryggt installera den i produktion, och fĂ„ uppdateringar pĂ„ nĂ„got sĂ€tt framöver?

MM: – Vi rekommenderar det kraftigt. Det löser mĂ„nga av vĂ„ra problem.

MC: – Jag vill Ă€nnu en gĂ„ng betona att förĂ€ndringar som inte rör arkitekturen och som inte rör blockeringar eller köer – de Ă€r modulĂ€ra, de finns i separata moduler. Även vid smĂ„ förĂ€ndringar kan de stödjas ganska enkelt.

MM: – Om du Ă€r intresserad av detaljer, sĂ„ anvĂ€nder "ClickHouse" det sĂ„ kallade historikbiblioteket. Det Ă€r oberoende – en kopia av stödet för "Elastix", vilket betyder att det kan Ă€ndras i configuration. Polling Ă€ndrar bara pollarna. Vi tror att detta kommer att fungera lĂ€nge.

A: – Tack sĂ„ mycket. Kan du sĂ€ga om det finns nĂ„gon dokumentation för de Ă€ndringar som gjorts?

HighLoad++, Michail Makurov, Maxim Tjernetsov (Intersvyaz): Zabbix, 100kNVPS pÄ en server

MM: – Dokumentationen Ă€r en patch. Det Ă€r uppenbart att med införandet av "ClickHouse" och nya typer av pollare uppstĂ„r nya konfigurationsalternativ. PĂ„ lĂ€nken i den senaste sliden finns en kort beskrivning av hur man anvĂ€nder detta.

Om att byta ut fping mot nmap

A: – Hur genomförde ni detta? Kan ni ge konkreta exempel: har ni strappare och ett externt skript? Vad kontrollerar sĂ„ snabbt sĂ„ mĂ„nga vĂ€rdar? Hur fĂ„r ni tag pĂ„ dessa vĂ€rdar? MĂ„ste ni pĂ„ nĂ„got sĂ€tt mata nmap med dem, hĂ€mta dem nĂ„gonstans, spara dem, och sedan köra nĂ„got?

MM: – Coolt. Mycket bra frĂ„ga! KĂ€rnan Ă€r denna. Vi modifierade biblioteket (ICMP-ping, en del av "Zabbix") för ICMP-kontroller, dĂ€r antalet paket anges – en enhet (1), och koden försöker anvĂ€nda nmap. Det vill sĂ€ga, detta Ă€r Zabbix interna arbete, som blev det interna arbetet för pingaren. DĂ€rmed behövs ingen synkronisering eller anvĂ€ndning av trapper. Detta gjordes medvetet för att behĂ„lla systemet intakt och för att inte behöva sy ihop tvĂ„ system av databaser: vad som ska kontrolleras, laddas upp via pollern, och om vi inte har problem med uppladdningen
 Det Ă€r mycket enklare.

A: – Fungerar det ocksĂ„ för proxy?

MM: – Ja, men vi har inte testat det. Koden för pollingen Ă€r densamma i Zabbix och servern. Det borde fungera. Jag betonar igen: systemets prestanda Ă€r sĂ„dan att vi inte behöver proxy.

MC: – RĂ€tt svar pĂ„ frĂ„gan Ă€r: "Varför skulle ni ha proxy i ett sĂ„dant system?" Bara pĂ„ grund av NAT eller om ni ska övervaka genom nĂ„gon lĂ„ngsam kanal...

A: – AnvĂ€nder ni "Zabbix" som en alert-lösning, om jag förstod rĂ€tt. Eller har ni grafer (dĂ€r arkivlagret finns) flyttat till ett annat system, som Grafana? Eller anvĂ€nder ni inte den funktionen?

MM: – Jag vill betona en gĂ„ng till: vi har gjort en fullstĂ€ndig integration. Vi dumpade historik i "Clickhouse", men Ă€ndrade samtidigt PHP-frontenden. PHP-frontenden gĂ„r till "Clickhouse" och skapar alla diagram dĂ€rifrĂ„n. Ärligt talat har vi en del som bygger pĂ„ samma "Clickhouse", frĂ„n samma data frĂ„n "Zabbix", data för andra grafiska visningssystem.

MC: – I "Grafana" ocksĂ„.

Hur fattades beslutet och om resursfördelningen?

A: – BerĂ€tta lite om den interna processen. Hur fattades beslutet att resurser skulle avsĂ€ttas för en betydande omarbetning av produkten? Det medför ju faktiskt vissa risker. Och snĂ€lla, berĂ€tta i kontexten av att ni avser att stödja nya versioner: hur motiveras detta beslut frĂ„n ett managementperspektiv?

MM: – Tydligen har vi inte berĂ€ttat dramahistorien sĂ€rskilt bra. Vi befann oss i en situation dĂ€r nĂ„got behövde göras, och vi gick pĂ„ sĂ€tt och vis fram med tvĂ„ parallella team:

  • Ett team arbetade med att starta ett övervakningssystem med nya metoder: övervakning som tjĂ€nst, en standard uppsĂ€ttning av öppen kĂ€llkods-lösningar som vi kombinerar och sedan försöker Ă€ndra affĂ€rsprocessen för att arbeta med det nya övervakningssystemet.
  • Parallellt hade vi en entusiastisk programmerare som arbetade med detta (om sig sjĂ€lv). Det blev sĂ„ att han vann.

A: – Hur stor Ă€r teamet?

MC: – Det stĂ„r framför er.

A: – SĂ„ en passionerad person behövs alltid?

MM: – Jag vet inte vad en passionerad person Ă€r.

A: – I det hĂ€r fallet Ă€r det tydligen du. Tack sĂ„ mycket, ni Ă€r fantastiska.

MM: – Tack.

Om patchar för Zabbix

A: – För ett system som anvĂ€nder proxy (till exempel i vissa distribuerade system), Ă€r det möjligt att anpassa och patcha er lösning, sĂ€g, pollare, proxy och delvis preprocessor av Zabbix; och deras interaktion? Är det möjligt att optimera befintliga arbetsmetoder för ett system med flera proxys?

MM: – Jag vet att Zabbix-servern kompileras med hjĂ€lp av proxy (den kompilerar och ger kod). Vi har inte testat detta i produktion. Jag Ă€r osĂ€ker pĂ„ detta, men enligt min mening anvĂ€nds preprocessor-managern inte i proxyn. Uppgiften för proxyn Ă€r att ta en uppsĂ€ttning metrik frĂ„n Zabbix, spola dem (den skriver ocksĂ„ konfigurationen och en lokal databas) och ge tillbaka till Zabbix-servern. Preprocessing kommer att göras av servern senare, nĂ€r den fĂ„r det.

Intresset för proxy Àr förstÄeligt. Vi kommer att kontrollera detta. Det Àr ett intressant Àmne.

A: – IdĂ©n var att om man kan patcha pollare, kan man patcha dem pĂ„ proxy och anpassa interaktionen med servern, medan förprocessorn anpassas för dessa syften endast pĂ„ servern.

MM: – Jag tror att det Ă€r Ă€nnu enklare. Du tar koden, lĂ€gger pĂ„ en patch, konfigurerar den som du vill – samlar proxy-servrar (till exempel med ODBC) och distribuerar den patchade koden över systemen. DĂ€r det behövs – samlar du proxy, dĂ€r det behövs – server.

A: – Behöver man inte patcha överföringen av proxy till servern dessutom?

MC: – Nej, den Ă€r standard.

MM: – Egentligen lĂ€t en av idĂ©erna inte sĂ„. Vi har alltid strĂ€vat efter att upprĂ€tthĂ„lla balansen mellan att fĂ„ nya idĂ©er och mĂ€ngden förĂ€ndringar, samt enkelheten i underhĂ„llet.

Spela video

Lite reklam 🙂

Tack för att ni stannar kvar hos oss. Gillar ni vÄra artiklar? Vill ni se fler intressanta material? Stöd oss genom att göra en bestÀllning eller rekommendera oss till era vÀnner, moln-VPS för utvecklare frÄn $4,99, en unik motsvarighet till entry-level servrar som vi har skapat för er: Allt om VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps frÄn $19 eller hur man korrekt delar en server? (alternativ med RAID1 och RAID10 finns tillgÀngliga, upp till 24 kÀrnor och upp till 40GB DDR4).

Dell R730xd Ă€r tvĂ„ gĂ„nger billigare i datacentret Equinix Tier IV i Amsterdam? Bara hos oss 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB frĂ„n $199 i NederlĂ€nderna! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — frĂ„n $99! LĂ€s om Hur man bygger en företagsinfrastruktur med Dell R730xd E5-2650 v4-servrar som kostar 9000 euro för en brĂ„kdel?

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster