Prestazzjoni għolja u partizzjoni nattiva: Zabbix b'appoġġ TimescaleDB
Zabbix hija sistema ta’ monitoraġġ. Bħal kull sistema oħra, tiffaċċja tliet problemi ewlenin tas-sistemi kollha ta 'monitoraġġ: il-ġbir u l-ipproċessar tad-dejta, il-ħażna tal-istorja, u t-tindif tagħha.
L-istadji tar-riċeviment, l-ipproċessar u r-reġistrazzjoni tad-dejta jieħdu ż-żmien. Mhux ħafna, iżda għal sistema kbira dan jista 'jirriżulta f'dewmien kbir. Il-problema tal-ħażna hija kwistjoni ta' aċċess għad-dejta. Jintużaw għal rapporti, kontrolli u triggers. Il-latenzi fl-aċċess għad-dejta jaffettwaw ukoll il-prestazzjoni. Meta d-databases jikbru, id-data irrilevanti trid titħassar. It-tneħħija hija operazzjoni diffiċli li tiekol ukoll xi riżorsi.
Problemi ta 'dewmien waqt il-ġbir u l-ħażna f'Zabbix huma solvuti permezz ta' caching: diversi tipi ta 'caches, caching fid-database. Biex issolvi t-tielet problema, il-caching mhuwiex adattat, għalhekk Zabbix uża TimescaleDB. Huwa ser jgħidlek dwar dan Andrey Gushchin - inġinier ta' appoġġ tekniku Zabbix SIA. Andrey ilu jappoġġa lil Zabbix għal aktar minn 6 snin u għandu esperjenza diretta fil-prestazzjoni.
Kif jaħdem TimescaleDB, liema prestazzjoni jista 'jagħti meta mqabbel ma' PostgreSQL regolari? Liema rwol għandu Zabbix għad-database TimescaleDB? Kif tibda mill-bidu u kif temigra minn PostgreSQL u liema konfigurazzjoni għandha prestazzjoni aħjar? Dwar dan kollu taħt il-qatgħa.
Sfidi tal-Produttività
Kull sistema ta' monitoraġġ tiffaċċja sfidi speċifiċi ta' prestazzjoni. Se nitkellem dwar tlieta minnhom: il-ġbir u l-ipproċessar tad-dejta, il-ħażna, u l-ikklerjar tal-istorja.
Ġbir u pproċessar ta' data mgħaġġla. Sistema ta' monitoraġġ tajba għandha tirċievi malajr id-dejta kollha u tipproċessaha skont espressjonijiet tal-iskattar - skont il-kriterji tagħha. Wara l-ipproċessar, is-sistema għandha wkoll issalva malajr din id-dejta fid-database għal użu aktar tard.
Ħażna tal-istorja. Sistema ta' monitoraġġ tajba għandha taħżen l-istorja f'database u tipprovdi aċċess faċli għall-metriċi. L-istorja hija meħtieġa biex tintuża f'rapporti, graffs, triggers, limiti, u oġġetti ta' data ta' twissija kkalkulati.
Storja tal-ikklerjar. Xi drabi jasal ġurnata meta ma jkollokx bżonn taħżen il-metriċi. Għaliex għandek bżonn dejta li nġabret 5 snin ilu, xahar jew tnejn: xi nodi tħassru, xi hosts jew metriċi m'għadhomx meħtieġa minħabba li huma skaduti u m'għadhomx miġbura. Sistema ta’ monitoraġġ tajba għandha taħżen data storika u tħassarha minn żmien għal żmien sabiex id-database ma tikberx.
It-tindif tad-data skaduta hija kwistjoni kritika li taffettwa bil-kbir il-prestazzjoni tad-database.
Caching f'Zabbix
F'Zabbix, l-ewwel u t-tieni sejħiet jiġu solvuti bl-użu tal-caching. RAM tintuża biex tiġbor u tipproċessa d-data. Għall-ħażna - storja fi triggers, graphs u elementi ta 'data kkalkulati. Fuq in-naħa tad-database hemm xi caching għal selezzjonijiet bażiċi, pereżempju, graphs.
Il-caching fuq in-naħa tas-server Zabbix innifsu huwa:
ConfigurationCache;
ValueCache;
HistoryCache;
TrendsCache.
Ejja nikkunsidrawhom f'aktar dettall.
ConfigurationCache
Din hija l-cache prinċipali fejn naħżnu metriċi, hosts, oġġetti tad-dejta, triggers - dak kollu li neħtieġu għall-PreProcessing u għall-ġbir tad-dejta.
Dan kollu jinħażen f'ConfigurationCache sabiex ma jinħolqux mistoqsijiet bla bżonn fid-database. Wara li jibda s-server, aħna naġġornaw din il-cache, noħolqu u naġġornaw perjodikament il-konfigurazzjonijiet.
Ġbir tad-dejta
Id-dijagramma hija pjuttost kbira, iżda l-ħaġa prinċipali fiha hija kolletturi. Dawn huma diversi "pollers" - proċessi ta 'assemblaġġ. Huma responsabbli għal tipi differenti ta 'assemblaġġ: jiġbru data permezz ta' SNMP, IPMI, u jittrasferixxuha kollha għal PreProcessing.
Il-kolletturi huma deskritti b'mod oranġjo.
Zabbix ikkalkula oġġetti aggregati li huma meħtieġa biex jiġbru l-kontrolli. Jekk ikollnahom, aħna nġibu d-dejta għalihom direttament mill-ValueCache.
HistoryCache tal-Ipproċessar minn qabel
Il-kolletturi kollha jużaw ConfigurationCache biex jirċievu impjiegi. Imbagħad jittrasferixxuhom għal PreProcessing.
PreProcessing juża ConfigurationCache biex jirċievi passi PreProcessing. Jipproċessa din id-dejta b'diversi modi.
Wara li tipproċessa d-dejta bl-użu ta 'PreProcessing, aħna nissejvjaha fi HistoryCache għall-ipproċessar. Dan itemm il-ġbir tad-data u ngħaddu għall-proċess ewlieni f'Zabbix - syncer tal-istorja, peress li hija arkitettura monolitika.
Nota: PreProcessing hija operazzjoni pjuttost diffiċli. Bil-v 4.2 ġie mċaqlaq għal prokura. Jekk għandek Zabbix kbir ħafna b'numru kbir ta 'elementi ta' data u frekwenza ta 'ġbir, allura dan jagħmel ix-xogħol ħafna aktar faċli.
ValueCache, storja u tendenzi cache
History syncer huwa l-proċess ewlieni li jipproċessa atomikament kull element tad-dejta, jiġifieri kull valur.
Is-sinkronizzar tal-istorja jieħu valuri minn HistoryCache u jiċċekkja l-Konfigurazzjoni għall-preżenza ta’ triggers għall-kalkoli. Jekk jeżistu, tikkalkula.
Storja syncer toħloq avveniment, eskalazzjoni biex toħloq twissijiet jekk meħtieġ mill-konfigurazzjoni, u rekords. Jekk ikun hemm triggers għall-ipproċessar sussegwenti, allura jaħżen dan il-valur f'ValueCache sabiex ma jaċċessax it-tabella tal-istorja. Dan huwa kif ValueCache huwa mimli b'dejta li hija meħtieġa biex jiġu kkalkulati triggers u elementi kkalkulati.
History syncer jikteb id-data kollha fid-database, u jikteb fuq disk. Il-proċess tal-ipproċessar jispiċċa hawn.
Caching fid-database
Fuq in-naħa tad-database hemm diversi caches meta trid tara graffs jew rapporti dwar avvenimenti:
Innodb_buffer_pool fuq in-naħa MySQL;
shared_buffers fuq in-naħa PostgreSQL;
effective_cache_size fuq in-naħa tal-Oracle;
shared_pool fuq in-naħa DB2.
Hemm ħafna caches oħra, iżda dawn huma dawk ewlenin għad-databases kollha. Huma jippermettu li taħżen data fir-RAM li ħafna drabi hija meħtieġa għall-mistoqsijiet. Huma għandhom it-teknoloġiji tagħhom stess għal dan.
Il-prestazzjoni tad-database hija kritika
Is-server Zabbix kontinwament jiġbor data u jiktebha. Meta terġa 'tinbeda, jaqra wkoll mill-istorja biex timla l-ValueCache. Juża skripts u rapporti Zabbix API, li hija mibnija fuq interface tal-Web. Zabbix API jaċċessa d-database u jirkupra d-dejta meħtieġa għal graffs, rapporti, listi ta 'avvenimenti u l-aħħar kwistjonijiet.
Għall-viżwalizzazzjoni - grafana. Din hija soluzzjoni popolari fost l-utenti tagħna. Jista 'jibgħat talbiet direttament permezz tal-API Zabbix u għad-database, u joħloq ċerta kompetizzjoni biex tirċievi dejta. Għalhekk, irfinar aħjar u aħjar tad-database huwa meħtieġ biex taqbel mal-kunsinna mgħaġġla tar-riżultati u l-ittestjar.
housekeeper
It-tielet sfida ta 'prestazzjoni f'Zabbix hija l-ikklerjar tal-istorja bl-użu ta' Housekeeper. Isegwi s-settings kollha - l-elementi tad-dejta jindikaw kemm idum jaħżen id-dinamika tal-bidliet (xejriet) fi ġranet.
Aħna nikkalkulaw TrendsCache fuq il-fly. Meta tasal id-dejta, aħna naggregawha għal siegħa u nirreġistrawha f'tabelli għad-dinamika tal-bidliet tax-xejra.
Housekeeper jibda u jħassar informazzjoni mid-database billi juża s-soltu "jagħżel". Dan mhux dejjem effettiv, kif jidher mill-grafiċi tal-prestazzjoni tal-proċessi interni.
Il-grafika ħamra turi li s-sinkronizzazzjoni tal-Istorja hija okkupata kontinwament. Il-grafika oranġjo fin-naħa ta 'fuq hija Housekeeper, li qed taħdem kontinwament. Huwa jistenna li d-database tħassar ir-ringieli kollha li speċifika.
Meta għandek tiddiżattiva Housekeeper? Pereżempju, hemm "ID tal-Oġġett" u għandek bżonn tħassar l-aħħar 5 elf ringiela f'ċertu żmien. Naturalment, dan iseħħ bl-indiċi. Iżda ġeneralment id-dataset huwa kbir ħafna, u d-database xorta taqra mid-disk u tpoġġiha fil-cache. Din hija dejjem operazzjoni għalja ħafna għad-database u, skont id-daqs tad-database, tista 'twassal għal problemi ta' prestazzjoni.
Housekeeper huwa faċli biex tiddiżattiva. Fl-interface tal-Web hemm setting f'"Amministrazzjoni ġenerali" għal Housekeeper. Aħna tiddiżattiva Housekeeping intern għall-istorja tax-xejriet interni u m'għadhiex tamministraha.
Housekeeper kien mitfi, il-graffs livellati - x'problemi jista 'jkun hemm f'dan il-każ u x'jista' jgħin biex issolvi t-tielet sfida tal-prestazzjoni?
Partitioning - qsim jew qsim
Tipikament, il-qsim huwa kkonfigurat b'mod differenti fuq kull database relazzjonali li elenkajt. Kull wieħed għandu t-teknoloġija tiegħu stess, iżda huma simili b'mod ġenerali. Il-ħolqien ta 'partizzjoni ġdida ħafna drabi jwassal għal ċerti problemi.
Tipikament, il-ħitan huma kkonfigurati skont is-"setup" - l-ammont ta 'dejta li tinħoloq f'ġurnata waħda. Bħala regola, il-qsim jinħareġ f'ġurnata waħda, dan huwa l-minimu. Għal xejriet ta 'lott ġdid - xahar 1.
Il-valuri jistgħu jinbidlu jekk is-"setup" hija kbira ħafna. Jekk "setup" żgħir huwa sa 5 nvps (valuri ġodda kull sekonda), waħda medja hija minn 000 sa 5, allura waħda kbira hija 'l fuq minn 000 nvps. Dawn huma installazzjonijiet kbar u kbar ħafna li jeħtieġu konfigurazzjoni bir-reqqa tad-database.
Fuq installazzjonijiet kbar ħafna, perjodu ta 'ġurnata jista' ma jkunx l-aħjar. Rajt diviżorji MySQL ta '40 GB jew aktar kuljum. Dan huwa ammont kbir ħafna ta 'dejta li jista' jikkawża problemi u jeħtieġ li jitnaqqas.
X'jagħti partitioning?
Tabelli tal-qsim. Ħafna drabi dawn huma fajls separati fuq disk. Il-pjan tal-mistoqsija jagħżel partizzjoni waħda bl-aħjar mod. Normalment il-qsim jintuża skont il-firxa - dan jgħodd ukoll għal Zabbix. Aħna nużaw "timestamp" hemm - żmien mill-bidu tal-era. Dawn huma numri ordinarji għalina. Issettja l-bidu u t-tmiem tal-ġurnata - din hija partizzjoni.
Tneħħija ta 'malajr - DELETE. Tiġi magħżula fajl/sottotabella waħda, aktar milli għażla ta' ringieli għat-tħassir.
Tħaffef b'mod sinifikanti l-irkupru tad-dataSELECT - juża partizzjoni waħda jew aktar, aktar milli t-tabella kollha. Jekk qed taċċessa dejta li għandha jumejn, din tiġi rkuprata mid-database aktar malajr għaliex għandek bżonn biss li tgħabbi fajl wieħed fil-cache u tirritornah, mhux tabella kbira.
Ħafna drabi ħafna databases huma wkoll aċċellerati INSERT — inserzjonijiet fit-tabella tat-tfal.
TimecaleDB
Għal v 4.2, ġibna l-attenzjoni tagħna fuq TimescaleDB. Din hija estensjoni għal PostgreSQL b'interface nattiva. L-estensjoni taħdem b'mod effettiv mad-dejta tas-serje tal-ħin, mingħajr ma titlef il-benefiċċji tad-databases relazzjonali. TimescaleDB wkoll diviżorji awtomatikament.
TimescaleDB għandu kunċett ipertabella (hypertable) li inti toħloq. Fih biċċiet - diviżorji. Il-biċċiet huma frammenti hypertable ġestiti awtomatikament li ma jaffettwawx frammenti oħra. Kull biċċa għandha l-firxa tal-ħin tagħha stess.
TimescaleDB vs PostgreSQL
TimescaleDB jaħdem b'mod tassew effiċjenti. Il-manifatturi tal-estensjoni jsostnu li jużaw algoritmu tal-ipproċessar tat-talbiet aktar korrett, b'mod partikolari, inserts. Hekk kif id-daqs tal-inserzjoni tas-sett tad-dejta jikber, l-algoritmu jżomm prestazzjoni kostanti.
Wara 200 miljun ringieli, PostgreSQL normalment jibda jonqos b'mod sinifikanti u jitlef il-prestazzjoni għal 0. TimescaleDB jippermettilek li daħħal "inserts" b'mod effiċjenti għal kwalunkwe ammont ta 'dejta.
Installazzjoni
L-installazzjoni ta' TimescaleDB hija pjuttost faċli għal kwalunkwe pakkett. IN dokumentazzjoni kollox huwa deskritt fid-dettall - jiddependi fuq il-pakketti uffiċjali PostgreSQL. TimescaleDB jista' jinbena u jinġabar ukoll manwalment.
Il-funzjoni għandha tliet parametri. L-ewwel - tabella fid-database, li għalih għandek bżonn toħloq hypertable. It-tieni - qasam, skond liema għandek bżonn toħloq chunk_time_interval — intervall ta' biċċiet ta' diviżorji li għandhom jintużaw. Fil-każ tiegħi, l-intervall huwa ġurnata waħda - 86.
It-tielet parametru - migrate_data. Jekk tissettja true, imbagħad id-data kurrenti kollha tiġi trasferita għal biċċiet maħluqa minn qabel. Jien użajtha jien migrate_data. Kelli madwar 1 TB, li ħadet aktar minn siegħa. Anke f'xi każijiet, waqt l-ittestjar, ħassejt dejta storika ta 'tipi ta' karattri li ma kinux meħtieġa għall-ħażna, sabiex ma tittrasferihomx.
L-aħħar pass - UPDATE: fi db_extension poġġi timescaledbsabiex id-database tifhem li din l-estensjoni teżisti. Zabbix jattivaha u juża b'mod korrett is-sintassi u l-mistoqsijiet għad-database - dawk il-karatteristiċi li huma meħtieġa għal TimescaleDB.
Konfigurazzjoni tal-ħardwer
Jien użajt żewġ servers. L-ewwel - Magna VMware. Huwa pjuttost żgħir: 20 Intel® Xeon® CPU E5-2630 v 4 @ 2.20GHz proċessuri, 16 GB RAM u 200 GB SSD.
Installajt PostgreSQL 10.8 fuqha b'Debian 10.8-1.pgdg90+1 OS u xfs file system. I kkonfigurat kollox minimament biex nuża din id-database partikolari, nieqes dak li se juża Zabbix innifsu.
Fuq l-istess magna kien hemm server Zabbix, PostgreSQL u aġenti tat-tagħbija. Kelli 50 aġent attiv li kienu qed jużaw LoadableModulebiex jiġġenera malajr ħafna riżultati differenti: numri, kordi. Imliet id-database b'ħafna dejta.
Inizjalment il-konfigurazzjoni li tinsab 5 element data għal kull host. Kważi kull element kien fih grillu biex jagħmilha simili għal installazzjonijiet reali. F'xi każijiet kien hemm aktar minn grillu wieħed. Għal node tan-netwerk wieħed kien hemm 3-000 jqajjem.
Intervall tal-Aġġornament tal-Oġġett tad-Data − 4-7 sekonda. Irregolajt it-tagħbija nnifisha billi uża mhux biss 50 aġent, iżda żidt aktar. Ukoll, bl-użu ta 'elementi tad-dejta, aġġustajt dinamikament it-tagħbija u naqqas l-intervall ta' aġġornament għal 4 s.
PostgreSQL. 35 nvps
L-ewwel ġirja tiegħi fuq dan il-hardware kienet fuq PostgreSQL pur - 35 elf valuri kull sekonda. Kif tistgħu taraw, id-dħul tad-data jieħu frazzjonijiet ta 'sekonda - kollox huwa tajjeb u veloċi. L-unika ħaġa hija li disk SSD ta '200 GB timla malajr.
Dan huwa dashboard standard tal-prestazzjoni tas-server Zabbix.
L-ewwel grafika blu hija n-numru ta 'valuri kull sekonda. It-tieni graff fuq il-lemin huwa t-tagħbija tal-proċessi tal-bini. It-tielet huwa t-tagħbija tal-proċessi tal-bini interni: syncers tal-istorja u Housekeeper, li ilu għaddej hawn għal żmien pjuttost twil.
Ir-raba' graff turi l-użu ta' HistoryCache. Dan huwa tip ta 'buffer qabel ma jiddaħħal fid-database. Il-ħames grafika ħadra turi l-użu tal-ValueCache, jiġifieri, kemm ValueCache hits għal triggers - dan huwa diversi eluf ta 'valuri kull sekonda.
PostgreSQL. 50 nvps
Imbagħad żidt it-tagħbija għal 50 elf valuri kull sekonda fuq l-istess hardware.
Meta tgħabbi minn Housekeeper, id-dħul ta '10 elf valuri ħadet 2-3 sekondi.
Housekeeper diġà qed tibda tinterferixxi max-xogħol.
It-tielet graff turi li, b'mod ġenerali, it-tagħbija fuq in-nassaba u s-synchchers tal-istorja għadha f'60%. Fir-raba 'graff, HistoryCache diġà qed jibda jimla b'mod pjuttost attiv waqt l-operazzjoni Housekeeper. Huwa 20% sħiħ, li huwa madwar 0,5 GB.
PostgreSQL. 80 nvps
Imbagħad żidt it-tagħbija għal 80 elf valuri kull sekonda. Dan huwa madwar 400 elf element tad-data u 280 elf triggers.
L-ispiża tat-tagħbija ta 'tletin syncher tal-istorja hija diġà pjuttost għolja.
Żidt ukoll diversi parametri: syncers tal-istorja, caches.
Fuq il-ħardwer tiegħi, it-tagħbija tas-syncers tal-istorja żdiedet għall-massimu. HistoryCache malajr mimlija bid-data - data għall-ipproċessar kienet akkumulata fil-buffer.
Dan iż-żmien kollu osservajt kif intużaw il-proċessur, ir-RAM u parametri oħra tas-sistema, u sibt li l-użu tad-disk kien fil-massimu tiegħu.
Ksibt l-użu kapaċitajiet massimi tad-disk fuq dan il-hardware u fuq din il-magna virtwali. B'intensità bħal din, PostgreSQL beda jlaħlaħ id-dejta b'mod pjuttost attiv, u d-disk ma kellux aktar ħin biex jikteb u jaqra.
It-tieni server
Ħadt server ieħor, li diġà kellu 48 proċessur u 128 GB RAM. I rranġat - issettjah għal 60 history syncer, u ksibt prestazzjoni aċċettabbli.
Fil-fatt, dan huwa diġà l-limitu tal-produttività fejn hemm bżonn li ssir xi ħaġa.
TimescaleDB. 80 nvps
Il-kompitu ewlieni tiegħi huwa li nittestja l-kapaċitajiet ta 'TimescaleDB kontra t-tagħbija ta' Zabbix. 80 elf valuri kull sekonda hija ħafna, il-frekwenza tal-ġbir tal-metriċi (ħlief għal Yandex, ovvjament) u "setup" pjuttost kbir.
Hemm dip f'kull graff - din hija preċiżament il-migrazzjoni tad-dejta. Wara fallimenti fis-server Zabbix, il-profil tat-tagħbija tas-syncer tal-istorja nbidel ħafna - niżel tliet darbiet.
TimescaleDB jippermettilek li ddaħħal id-dejta kważi 3 darbiet aktar malajr u tuża inqas HistoryCache.
Għaldaqstant, int ser tirċievi d-dejta fil-ħin.
TimescaleDB. 120 nvps
Imbagħad żidt in-numru ta 'elementi tad-dejta għal elf 500. Il-kompitu ewlieni kien li tittestja l-kapaċitajiet ta 'TimescaleDB - irċevejt valur ikkalkulat ta' 125 elf valuri kull sekonda.
Din hija "setup" tax-xogħol li tista 'taħdem għal żmien twil. Imma peress li d-disk tiegħi kien biss 1,5 TB, imlieha fi ftit jiem.
L-iktar ħaġa importanti hija li fl-istess ħin inħolqu diviżorji ġodda TimescaleDB.
Dan huwa kompletament innotabbli għall-prestazzjoni. Meta jinħolqu diviżorji fil-MySQL, pereżempju, kollox huwa differenti. Dan normalment jiġri bil-lejl minħabba li jimblokka l-inserzjoni ġenerali, jaħdem ma 'tabelli u jista' joħloq degradazzjoni tas-servizz. Dan mhux il-każ ma' TimescaleDB.
Bħala eżempju, se nuri graff wieħed minn ħafna fil-komunità. Fl-istampa, TimescaleDB hija attivata, li grazzi għaliha naqset it-tagħbija fuq l-użu ta 'io.weight fuq il-proċessur. L-użu ta 'elementi ta' proċess intern naqas ukoll. Barra minn hekk, din hija magna virtwali ordinarja fuq diski pancake ordinarji, mhux SSD.
Sejbiet
TimescaleDB hija soluzzjoni tajba għal "setup" żgħir, li għandhom impatt fuq il-prestazzjoni tad-disk. Dan jippermettilek tkompli taħdem tajjeb sakemm id-database tiġi emigrata għall-ħardwer malajr kemm jista 'jkun.
TimescaleDB huwa faċli biex jiġi kkonfigurat, jagħti gwadann fil-prestazzjoni, jaħdem tajjeb ma' Zabbix u għandu vantaġġi fuq PostgreSQL.
Jekk tuża PostgreSQL u ma tippjanax li tibdelha, nirrakkomanda uża PostgreSQL bl-estensjoni TimescaleDB flimkien ma' Zabbix. Din is-soluzzjoni taħdem b'mod effettiv sa "setup" medju.
Meta ngħidu "prestazzjoni għolja" irridu nfissru HighLoad ++. Mhux se jkollok wisq biex tistenna biex titgħallem dwar it-teknoloġiji u l-prattiki li jippermettu lis-servizzi jaqdu miljuni ta’ utenti. Lista rapporti għas-7 u t-8 ta’ Novembru diġà kkumpilajna, imma hawn laqgħat jista' jiġi ssuġġerit aktar.
Abbona għal tagħna newsletter и telegramma, li fiha niżvelaw il-karatteristiċi tal-konferenza li jmiss, u nsiru nafu kif niksbu l-aħjar minnha.