Vi kommer att titta pÄ Zabbix arbete med databasen TimescaleDB som backend. Vi visar hur man startar frÄn grunden och hur man migrerar frÄn PostgreSQL. Vi kommer ocksÄ att ge jÀmförande prestandatester av de tvÄ konfigurationerna.

HighLoad++ Sibirien 2019. Sal "Tomsk". 24 juni, 16:00. Texter och . NÀsta konferens HighLoad++ kommer att hÄllas den 6 och 7 april 2020 i Sankt Petersburg. Detaljer och biljetter .
Andrey Gushin (hĂ€danefter â AG): â Jag Ă€r ingenjör inom teknisk support för ZABBIX (hĂ€danefter â "Zabbix"), trĂ€nare. Jag har arbetat mer Ă€n 6 Ă„r inom teknisk support och har direkt erfarenhet av prestanda. Idag kommer jag att berĂ€tta om den prestanda som TimescaleDB kan erbjuda i jĂ€mförelse med vanlig PostgreSQL 10. Jag ger ocksĂ„ en viss introduktion â om hur det överhuvudtaget fungerar.
De största prestandautmaningarna: frÄn insamling till rensning av data
LÄt oss börja med att det finns vissa prestandautmaningar som varje övervakningssystem stöter pÄ. Den första prestandautmaningen Àr snabb insamling och bearbetning av data.

Ett bra övervakningssystem bör snabbt och i tid fÄ all information, bearbeta den i enlighet med triggeruttryck, det vill sÀga bearbeta den enligt vissa kriterier (detta varierar mellan olika system) och sedan spara den i databasen för framtida anvÀndning.

Den andra prestandautmaningen Àr att lagra historia. Att lagra data i databasen och samtidigt ha snabb och enkel tillgÄng till dessa mÀtvÀrden som samlats in under en viss tidsperiod. Det viktigaste Àr att det ska vara enkelt att fÄ tillgÄng till dessa uppgifter, anvÀnda dem i rapporter, diagram, triggertabeller, i nÄgot tröskelvÀrde, för meddelanden, osv.

Det tredje prestationsutmaningen Àr rensning av historik, det vill sÀga nÀr det kommer en dag dÄ du inte behöver lagra detaljerade mÀtningar som har samlats in under 5 Är (Àven mÄnader eller tvÄ mÄnader). Vissa nÀtverksnoder har tagits bort, eller vissa vÀrdar, mÀtningarna Àr redan onödiga eftersom de har blivit förÄldrade och inte lÀngre samlas in. Allt detta mÄste rensas bort sÄ att din databas inte vÀxer till en storlek. Och överlag Àr rensning av historik ofta en allvarlig prövning för lagringssystemet - det pÄverkar ofta prestandan mycket.
Hur löser man cache-problem?
Jag kommer nu att prata specifikt om "Zabbix". I "Zabbix" har den första och andra utmaningen lösts med hjÀlp av caching.

Insamling och bearbetning av data - vi anvÀnder RAM för att lagra all denna data. Nu kommer jag att berÀtta mer om dessa data.
Det finns ocksÄ viss caching pÄ databasnivÄ för huvudsakliga urval - för grafer och andra saker.
Caching pÄ sidan av sjÀlva Zabbix-servern: vi har ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Vad Àr detta?

ConfigurationCache Àr den huvudsakliga cachen dÀr vi lagrar mÀtningar, vÀrdar, datainslag, trigger; allt som behövs för att bearbeta preprocessing, samla data, frÄn vilka vÀrdar man ska samla och med vilken frekvens. Allt detta lagras i ConfigurationCache sÄ att vi inte behöver gÄ till databasen och skapa onödiga förfrÄgningar. Efter serverstart uppdaterar vi denna cache (skapar) och uppdaterar den periodiskt (beroende pÄ konfigurationsinstÀllningarna).

Caching i Zabbix. Datainsamling
HÀr Àr schemat ganska stort:

De viktigaste i schemat Àr dessa insamlare:

Detta Àr sjÀlva insamlingsprocesserna, olika "pollers" som ansvarar för olika typer av insamlingar. De samlar in data via icmp, ipmi, olika protokoll och skickar allt detta för preprocessing.
PreProcessing HistoryCache
Om vi har berÀknade datainslag (de som Àr bekanta med "Zabbix" vet), det vill sÀga berÀknade, aggregationsdata - hÀmtar vi dem direkt frÄn ValueCache. Jag kommer att berÀtta mer om hur den fylls senare. Alla dessa insamlare anvÀnder ConfigurationCache för att hÀmta sina uppgifter och vidarebefordrar sedan till preprocessing.

Preprocesseringen anvÀnder Àven ConfigurationCache för att hÀmta preprocesseringstegen och bearbetar dessa data pÄ olika sÀtt. FrÄn och med version 4.2 har vi flyttat det till en proxy. Detta Àr mycket praktiskt eftersom sjÀlva preprocesseringen Àr en ganska tung operation. Och om du har en mycket stor 'Zabbix', med ett stort antal datatelement och hög insamlingsfrekvens, sÄ underlÀttar det arbetet avsevÀrt.
DÀrför, efter att vi har bearbetat dessa data pÄ nÄgot sÀtt med hjÀlp av preprocessering, sparar vi dem i HistoryCache för att vidare bearbeta dem. HÀr slutar datainsamlingen. Vi gÄr vidare till huvudprocessen.
Arbete med History syncer

Huvudprocessen i 'Zabbix' (eftersom detta Àr en monolitisk arkitektur) Àr History syncer. Detta Àr huvudprocessen som sysslar med den atomÀra bearbetningen av varje datatelelement, det vill sÀga varje vÀrde:
- ett vÀrde kommer in (den tar det frÄn HistoryCache);
- kontrollerar i Configuration syncer: finns det nĂ„gra triggers för berĂ€kning â berĂ€knar dem;
om det finns â skapar hĂ€ndelser, skapar eskaleringar för att generera ett meddelande om det Ă€r nödvĂ€ndigt enligt konfigurationen; - skriver triggers för vidare bearbetning, aggregering; om du aggregerar för den senaste timmen och sĂ„ vidare, sparar detta vĂ€rde ValueCache, sĂ„ att du inte behöver gĂ„ tillbaka till historiktabellen; pĂ„ sĂ„ sĂ€tt fylls ValueCache med de nödvĂ€ndiga data som behövs för att berĂ€kna triggers, berĂ€knade element och sĂ„ vidare;
- sedan skriver History syncer all data till databasen;
- databasen skriver dem till disken â vid denna punkt avslutas bearbetningsprocessen.
Databaser. Cachning
PÄ databassidan, nÀr du vill titta pÄ grafer eller rapporter om hÀndelser, finns det olika caches. Men inom ramen för denna presentation kommer jag inte att gÄ in pÄ dem.
För MySQL finns Innodb_buffer_pool, och en mÀngd olika andra cacher som ocksÄ kan konfigureras.
Men dessa Àr huvudpunkterna:
- shared_buffers;
- effective_cache_size;
- shared_pool.

Jag har angivit för alla databaser att det finns specifika cacher som gör det möjligt att hÄlla i RAM de data som ofta behövs för förfrÄgningar. DÀr har de sina egna teknologier för detta.
Om databasens prestanda
Det finns en konkurrenssituation, vilket innebÀr att «Zabbix»-servern samlar in data och registrerar den. Vid omstart lÀser den ocksÄ frÄn historiken för att fylla ValueCache och sÄ vidare. HÀr kan ni ocksÄ ha skript och rapporter som anvÀnder «Zabbix»-API, som Àr byggt pÄ webbgrÀnssnittet. «Zabbix»-API gÄr in i databasen och hÀmtar nödvÀndig data för att skapa grafer, rapporter eller nÄgon lista över hÀndelser och senaste problem.

En annan mycket populÀr lösning för visualisering Àr Grafana, som anvÀnds av vÄra kunder. Den kan direkt ansluta bÄde via «Zabbix»-API och via databasen. Det skapar ocksÄ en viss konkurrens för att hÀmta data: en mer detaljerad och bra instÀllning av databasen krÀvs för att kunna ge snabba resultat och tester.

Rensning av historik. I Zabbix finns Housekeeper.
Det tredje samtalet som anvÀnds i «Zabbix» Àr rensning av historik med hjÀlp av Housekeeper. «Housekeeper» följer alla instÀllningar, det vill sÀga att vi i datatekniskan har angivit hur lÀnge som ska sparas (i dagar), hur mycket som ska sparas av trender och dynamik i förÀndringar.
Jag nÀmnde inte TrendCache, som vi berÀknar i realtid: data kommer in, vi aggregerar dem pÄ en timme (frÀmst dessa Àr siffror frÄn den senaste timmen), medelvÀrde/minimum och registrerar detta en gÄng i timmen i tabellen för dynamik i förÀndringar («Trender»). «Housekeeper» körs och tar bort data frÄn databasen med vanliga select-kommandon, vilket inte alltid Àr effektivt.
Hur gör man för att förstÄ att detta Àr ineffektivt? PÄ prestationsgraferna för interna processer kan man se en sÄdan bild:

Ert History syncer Àr stÀndigt upptaget (röd graf). Och den «orangea» grafen som gÄr ovanpÄ. Det Àr «Housekeeper», som körs och vÀntar pÄ databasen för att ta bort alla rader som den har angivit.
LĂ„t oss ta ett exempel pĂ„ Item ID: vi behöver ta bort de senaste 5 tusen; sjĂ€lvklart baserat pĂ„ index. Men vanligtvis Ă€r datasetet tillrĂ€ckligt stort â databasen lĂ€ser fortfarande detta frĂ„n disken och laddar upp i cache, vilket Ă€r en vĂ€ldigt kostsam operation för databasen. Beroende pĂ„ dess storlek kan detta orsaka vissa prestationsproblem.
Du kan enkelt stĂ€nga av "Housekeeper" â vi har det bekanta webbgrĂ€nssnittet. I Administration general (instĂ€llningar för "Housekeeper") stĂ€nger vi av intern housekeeping för intern historik och trender. DĂ€rför hanterar inte "Housekeeper" detta lĂ€ngre:

Vad kan man göra hÀrnÀst? Du har stÀngt av, dina diagram har stabiliserats⊠Vilka problem kan uppstÄ hÀrnÀst? Vad kan hjÀlpa?
Partitionering
Detta stÀlls vanligtvis in för varje relationsdatabas som jag har nÀmnt pÄ olika sÀtt. MySQL har sin egen teknologi. Men generellt sett Àr de mycket lika om man pratar om PostgreSQL 10 och MySQL. SjÀlvklart finns det mÄnga interna skillnader i hur detta Àr implementerat och hur det pÄverkar prestandan. Men totalt sett leder skapandet av en ny partition ofta ocksÄ till vissa problem.

Beroende pĂ„ din setup (hur mycket data som skapas pĂ„ en dag), anger man vanligtvis den minsta â det Ă€r 1 dag/partition, och för "trender", dynamiken av förĂ€ndringar â 1 mĂ„nad / ny partition. Detta kan Ă€ndras om du har en vĂ€ldigt stor setup.
LĂ„t mig direkt sĂ€ga nĂ„got om storlekarna pĂ„ setup: upp till 5 000 nya vĂ€rden per sekund (sĂ„ kallade nvps) rĂ€knas som en liten setup. Medium â frĂ„n 5 000 till 25 000 vĂ€rden per sekund. Allt över det Ă€r stora och mycket stora installationer som krĂ€ver mycket noggrann konfiguration av just databasen.
Vid mycket stora installationer Àr 1 dag kanske inte optimalt. Jag har personligen sett MySQL-partitioner pÄ 40 gigabyte per dag (och mer kan förekomma). Detta Àr en mycket stor datavolym som kan orsaka nÄgra problem. Det behöver minskas.
Varför behövs partitionering?
Vad ger partitionering, tror jag att alla vet â det Ă€r sektorisering av tabeller. Ofta Ă€r det separata filer pĂ„ disken och spĂ€nningsfrĂ„gor. Det vĂ€ljer mer optimalt en partition om det ingĂ„r i den vanliga partitioneringen.

För «Zabbix» anvÀnds det specifikt inom ett intervall, det vill sÀga vi anvÀnder en tidsstÀmpel (ett vanligt nummer, tiden sedan epoken började). Du stÀller in början av dagen / slutet av dagen, och detta fungerar som partition. Om du begÀr data frÄn tvÄ dagar tillbaka, hÀmtas allt detta frÄn databasen snabbare, eftersom endast en fil behöver laddas in i cachen och levereras (och inte en stor tabell).

MÄnga databaser snabbar ocksÄ upp insÀttningar (inlÀgg i en child-tabell). Jag pratar fortfarande abstrakt, men detta Àr ocksÄ möjligt. Partitionering hjÀlper ofta.
Elasticsearch för NoSQL
Nyligen, i version 3.4, implementerade vi en lösning för NoSQL. Vi lade till möjligheten att skriva till Elasticsearch. Du kan skriva vissa typer: vĂ€lja â antingen skriva siffror eller specifika tecken; vi har strĂ€ngtext, loggar kan skrivas till Elasticsearch⊠WebbgrĂ€nssnittet kommer ocksĂ„ att kommunicera med Elasticsearch. Detta fungerar utmĂ€rkt i vissa fall, men för tillfĂ€llet kan detta anvĂ€ndas.

TimescaleDB. Hypertabeller
För 4.4.2 observerade vi en sak, kring TimescaleDB. Vad Àr det? Det Àr en tillÀgg för «Postgres», vilket innebÀr att det har ett inhemskt PostgreSQL-grÀnssnitt. Dessutom tillÄter detta tillÀgg att arbeta mycket effektivare med tidsseriedata och ha automatisk partitionering. SÄ hÀr ser det ut:

Detta Ă€r en hypertabell â det Ă€r ett begrepp inom Timescale. Det Ă€r en hypertabell som du skapar, och i den finns det chunkar. Chunkar Ă€r partitioner, det Ă€r child-tabeller, om jag inte minns fel. Detta Ă€r verkligen effektivt.

TimescaleDB och PostgreSQL
Som tillverkarna av TimescaleDB försÀkrar, anvÀnder de en mer korrekt algoritm för att bearbeta förfrÄgningar, sÀrskilt insÀttningar, vilket möjliggör ungefÀr konstant prestanda vid ökande storlek pÄ dataset-inlÀgg. Det betyder att efter 200 miljoner rader börjar vanlig «Postgres» att kraftigt försÀmras och tappar prestanda bokstavligen till noll, medan «Timescale» möjliggör insÀttningar sÄ effektivt som möjligt oavsett datamÀngd.

Hur installerar man TimescaleDB? Det Àr enkelt!
Det finns beskrivningar i dokumentationen â det kan installeras frĂ„n paket för alla⊠Det beror pĂ„ de officiella paketen för «Postgres». Man kan kompilera manuellt. Det rĂ„kade bli sĂ„ att jag behövde kompilera för databasen.

PÄ "Zabbix" aktiverar vi bara Extention. Jag tror att de som har anvÀnt Extention i "PostgreSQL"... Du aktiverar bara Extention, skapar den för databasen "Zabbix" som du anvÀnder.
Och det sista steget...
TimescaleDB. Migration av historiktabeller
Du behöver skapa en hypertable. Det finns en speciell funktion för detta â Create hypertable. I den anger du som första parameter den tabell som behövs i denna databas (för vilken du vill skapa hypertabellen).

FĂ€ltet som ska skapas och chunk_time_interval (detta Ă€r tidsintervallet för chunkar (partitioner) som ska anvĂ€ndas). 86 400 â det Ă€r en dag.
Parameter migrate_data: om du sÀtter den till true, sÄ flyttar den alla aktuella data till förut skapade chunkar.
Jag anvĂ€nde sjĂ€lv migrate_data â det tar en hel del tid, beroende pĂ„ storleken pĂ„ din databas. Jag hade över en terabyte â skapandet tog mer Ă€n en timme. I vissa fall under testning tog jag bort historiska data för text (history_text) och strĂ€ng (history_str) för att inte flytta dem â jag var egentligen inte intresserad av dem.
Och den sista uppdateringen gör vi i vÄr db_extention: vi installerar timescaledb, sÄ att databasen och, speciellt vÄr "Zabbix", förstÄr att det finns en db_extention. Den aktiverar den och anvÀnder korrekt syntax och frÄgor till databasen, med de "funktioner" som Àr nödvÀndiga för TimescaleDB.
Serverkonfiguration
Jag anvÀnde tvÄ servrar. Den första servern Àr en ganska liten virtuell maskin, 20 processorer, 16 gigabyte RAM. Jag installerade "PostgreSQL" 10.8 pÄ den:

Operativsystemet var Debian, filsystemet â xfs. Jag gjorde minimala instĂ€llningar för att anvĂ€nda just denna databas, med undantag av vad som kommer att anvĂ€ndas av "Zabbix" sjĂ€lv. PĂ„ samma maskin var "Zabbix"-servern, PostgreSQL och belastningsagenterna installerade.

Jag anvĂ€nde 50 aktiva agenter som anvĂ€nder LoadableModule för att snabbt generera olika resultat. De genererade rader, nummer och sĂ„ vidare. Jag fyllde databasen med en stor mĂ€ngd data. Ursprungligen innehöll konfigurationen 5 000 datakElement per vĂ€rd, och varje datakElement hade en trigger â för att det skulle vara en riktig setup. Ibland krĂ€vs till och med mer Ă€n en trigger för anvĂ€ndning.

Uppdateringsintervallet, sjÀlva belastningen justerade jag genom att inte bara anvÀnda 50 agenter (jag lade till fler) utan ocksÄ med hjÀlp av dynamiska datadelar och sÀnkte uppdateringsintervallet till 4 sekunder.
Prestandatest. PostgreSQL: 36 tusen NVP:er
Den första starten, första installationen hade jag pĂ„ ren PostgreSQL 10 pĂ„ denna hĂ„rdvara (35 tusen vĂ€rden per sekund). Som man kan se pĂ„ skĂ€rmen tar datainförseln brĂ„kdelar av en sekund â allt fungerar bra och snabbt, SSD-enheter (200 gigabyte). Det enda som Ă€r att 20 GB fylls snabbt.

Det kommer att finnas mÄnga sÄdana grafer framöver. Detta Àr den standardprestandaöversikten för Zabbix-servern.

Den första grafen â antalet vĂ€rden per sekund (blĂ„, högst upp till vĂ€nster), 35 tusen vĂ€rden i detta fall. Detta (uppe i mitten) Ă€r belastningen pĂ„ processerna för insamling, och detta (uppe till höger) â belastningen pĂ„ sjĂ€lva interna processerna: history syncers och housekeeper, som hĂ€r (nere i mitten) utfördes under en viss tid.
Denna graf (nere i mitten) visar anvĂ€ndningen av ValueCache â hur mĂ„nga trĂ€ffar ValueCache har för triggers (flera tusen vĂ€rden per sekund). En annan viktig graf â den fjĂ€rde (nere till vĂ€nster), som visar anvĂ€ndningen av HistoryCache, som jag nĂ€mnde, som Ă€r en buffer före införsel i databasen.
Prestandatest. PostgreSQL: 50 tusen NVP:er
DÀrefter ökade jag belastningen till 50 tusen vÀrden per sekund pÄ samma hÄrdvara. Vid insamling med Housekeeper skrevs 10 tusen vÀrden in pÄ 2-3 sekunder med berÀkningar. Det som faktiskt visas pÄ nÀsta skÀrmdump:

Housekeeper börjat störa arbetet, men i stort sett ligger belastningen pÄ history syncers fortfarande pÄ 60 % (den tredje grafen, uppe till höger). HistoryCache började aktivera och fyllas under Housekeepers arbete (nere till vÀnster). Den var omkring en halv gigabyte, fylldes med 20%.

Prestandatest. PostgreSQL: 80 tusen NVP:er
Jag ökade sedan till 80 tusen vÀrden per sekund:

Det handlade om cirka 400 000 datapunkter och 280 000 triggers. Införandet, som ni ser, var redan ganska hög med belastningen av history-syncers (det fanns 30 av dem). Jag ökade dĂ€refter olika parametrar: history-syncers, cache⊠PĂ„ den hĂ€r hĂ„rdvaran började belastningen av history-syncers öka till max, nĂ€stan 'i taket' â dĂ€rför gick HistoryCache till mycket hög belastning:

Under hela denna tid har jag övervakat alla systemparametrar (hur CPU:n anvĂ€nds, RAM-minnet) och upptĂ€ckte att diskutnyttjandet var maximalt â jag hade uppnĂ„tt maximal kapacitet pĂ„ denna disk pĂ„ denna hĂ„rdvara, pĂ„ denna virtuella maskin. 'Postgres' började dumpa data ganska aktivt vid denna intensitet, och disken hann inte med att skriva eller lĂ€saâŠ

Jag tog en annan server som redan hade 48 processorer och 128 gigabyte RAM-minne:

Jag 'tunade' ocksĂ„ den â installerade 60 History syncers och uppnĂ„dde acceptabel prestanda. Egentligen Ă€r vi inte 'i taket', men det Ă€r nog redan grĂ€nsen för prestandan dĂ€r man verkligen behöver ta nĂ„got steg.
Prestandatest. TimescaleDB: 80 000 NVPs
Min huvuduppgift var att anvÀnda TimescaleDB. PÄ varje graf syns ett fall:

Dessa fall Ă€r just datamigreringen. Efter detta har profilen för belastningen av history-syncers i 'Zabbix'-servern, som ni ser, förĂ€ndrats kraftigt. Den möjliggör nĂ€stan tre gĂ„nger snabbare infogning av data och anvĂ€nder mindre HistoryCache â dĂ€rmed kommer ni att fĂ„ data i tid. Ă
terigen, 80 000 vĂ€rden per sekund â det Ă€r ett ganska högt rate (naturligtvis inte för 'Yandex'). Ăverlag Ă€r detta en ganska stor setup, med en server.
Prestandatest av PostgreSQL: 120 000 NVPs
Sedan ökade jag antalet datapunkter till en halv miljon och fick ett berÀknat vÀrde av 125 000 per sekund:

Och fick sÄdana hÀr grafer:

I princip Àr detta en fungerande setup, den kan fungera ganska lÀnge. Men eftersom jag hade en disk pÄ endast 1,5 terabyte förbrukade jag den pÄ ett par dagar. Det viktigaste Àr att nya partitioner skapades pÄ TimescaleDB samtidigt, och det pÄverkade prestandan helt osynligt, vilket inte gÄr att sÀga om MySQL.
Vanligtvis skapas partitioner pÄ natten eftersom det blockerar all insÀttning och arbete med tabeller, vilket kan leda till degradering av tjÀnsten. I det hÀr fallet Àr det inte sÄ! Huvuduppgiften var att kontrollera möjligheterna med TimescaleDB. Resultatet blev: 120 000 vÀrden per sekund.
Det finns ocksÄ exempel i "communityn":

En person aktiverade ocksÄ TimescaleDB och belastningen frÄn io.weight sjönk pÄ processorn; och anvÀndningen av interna processkomponenter minskade ocksÄ tack vare aktiveringen av TimescaleDB. Och det Àr vanliga hÄrddiskar, det vill sÀga en vanlig virtuell maskin pÄ vanliga diskar (inte SSD)!
För vissa smÄ setup:ar som Àr begrÀnsade av diskens prestanda, tycker jag att TimescaleDB Àr en mycket bra lösning. Det lÄter er fortsÀtta arbeta tills ni migrerar till snabbare hÄrdvara för databasen.
Jag bjuder in er alla till vĂ„ra evenemang: Conference â i Moskva, Summit â i Riga. AnvĂ€nd vĂ„ra kanaler â "Telegram", forum, IRC. Om ni har nĂ„gra frĂ„gor â kom gĂ€rna till vĂ„r disk, vi kan prata om allt.
FrÄgor frÄn publiken
FrĂ„ga frĂ„n publiken (nedan â A): â Om TimescaleDB Ă€r sĂ„ enkelt att konfigurera, och ger en sĂ„dan prestandaökning, kanske det Ă€r vĂ€rt att anvĂ€nda som bĂ€sta praxis för att konfigurera "Zabbix" med "Postgres"? Finns det nĂ„gra fallgropar eller nackdelar med denna lösning, eller om jag har bestĂ€mt mig för att anvĂ€nda "Zabbix", kan jag dĂ„ lugnt ta "Postgres", installera "Timescale" dĂ€r direkt, anvĂ€nda det och inte tĂ€nka pĂ„ nĂ„gra problem?

AG: â Ja, jag skulle sĂ€ga att det Ă€r en bra rekommendation: att anvĂ€nda "Postgres" direkt med TimescaleDB-tillĂ€gget. Som jag redan har sagt, har jag hört mĂ„nga goda omdömen, trots att denna "funktion" Ă€r experimentell. Men tester visar faktiskt att det Ă€r en utmĂ€rkt lösning (med TimescaleDB), och jag tror att den kommer att utvecklas! Vi följer hur detta tillĂ€gg utvecklas och kommer att justera det som behövs.
Under utvecklingen lutade vi oss till och med pÄ en av deras kÀnda "funktioner": dÀr kunde man arbeta med chunks pÄ ett lite annat sÀtt. Men sedan tog de bort det i nÀsta version, och vi tvingades sluta förlita oss pÄ den koden. Jag skulle rekommendera att anvÀnda denna lösning pÄ mÄnga setup:ar. Om du anvÀnder MySQL⊠För medelstora setup:ar fungerar vilken lösning som helst ganska bra.
A: â PĂ„ de senaste graferna frĂ„n communityn fanns det en graf med "Housekeeper":

Han fortsatte att arbeta. Vad gör "Housekeeper" i fallet med TimescaleDB?
AG: â Jag kan inte sĂ€ga exakt just nu â jag ska kolla koden och ge en mer detaljerad förklaring. Han anvĂ€nder förfrĂ„gningar exakt frĂ„n TimescaleDB inte för att ta bort chunks, utan han aggregerar pĂ„ nĂ„got sĂ€tt. Jag Ă€r inte redo att svara pĂ„ den tekniska frĂ„gan Ă€n. Vi kommer att klargöra det pĂ„ mĂ€ssan idag eller imorgon.
A: â Jag har en liknande frĂ„ga â om prestandan vid borttagning av data i "Timescale".
A (svar frĂ„n publiken): â NĂ€r du tar bort data frĂ„n tabellen, om du gör det genom delete, sĂ„ mĂ„ste du gĂ„ igenom tabellen â ta bort, rensa, mĂ€rka allt för framtida vakuum. I "Timescale", eftersom du har chunks, kan du droppa. Rent konkret sĂ€ger du bara till filen som ligger i big data: "Ta bort!"
"Timescale" förstĂ„r helt enkelt att den chunken inte lĂ€ngre finns. Och eftersom den integreras i frĂ„geplaneraren fĂ„ngar den upp dina villkor i select-satsen eller andra operationer och förstĂ„r direkt att den chunken inte lĂ€ngre existerar â "Jag gĂ„r inte dit lĂ€ngre!" (data saknas). SĂ„ Ă€r det! Det vill sĂ€ga att tabellscanningen ersĂ€tts med borttagning av en binĂ€r fil, vilket gör det snabbt.
A: â Vi har redan berört Ă€mnet icke-SQL. SĂ„vitt jag förstĂ„r behöver "Zabbix" inte modifiera data sĂ€rskilt mycket, utan allt detta Ă€r nĂ„got som ett logg. Kan man anvĂ€nda specialiserade databaser som inte kan förĂ€ndra sina data, men som samtidigt mycket snabbare lagrar, ackumulerar och ger â Clickhouse, till exempel nĂ„got kafkaliknande? .. Kafka Ă€r ju ocksĂ„ en logg! Kan de integreras pĂ„ nĂ„got sĂ€tt?
AG: â Export kan göras. Vi har en viss "funktion" frĂ„n version 3.4: du kan skriva alla historiska filer, hĂ€ndelser och allt annat till filer; och sedan skickar du det med nĂ„gon typ av processor till vilken annan databas som helst. Faktiskt Ă€r det mĂ„nga som gör om det och skriver direkt till databasen. Ăgonblickligt skriver histori-synkronisatorerna allt detta till filer, roterar dessa filer med mera, och detta kan du överföra till "Clickhouse". Jag kan inte sĂ€ga nĂ„got om planerna, men det Ă€r möjligt att vidare stöd för NoSQL-lösningar (som "Clickhouse") kommer att fortsĂ€tta.
A: â SĂ„ det gĂ„r verkligen att helt bli av med PostgreSQL?
AG: â SjĂ€lvklart, den mest utmanande delen i "Zabbix" Ă€r historiska tabeller som skapar flest problem, och hĂ€ndelser. I det hĂ€r fallet, om du inte lagrar hĂ€ndelser för lĂ€nge och istĂ€llet lagrar historik med trender i nĂ„got annat snabbt lagringsutrymme, sĂ„ bör det inte bli nĂ„gra problem, tror jag.
A: â Kan du uppskatta hur mycket snabbare allt skulle fungera om man gĂ„r över till "ClickHouse", till exempel?
AG: â Jag har inte testat. Jag tror att man Ă„tminstone kan nĂ„ samma siffror ganska enkelt, med tanke pĂ„ att "ClickHouse" har sitt eget grĂ€nssnitt, men kan inte sĂ€ga det definitivt. BĂ€ttre att testa. Det beror helt pĂ„ konfigurationen: hur mĂ„nga vĂ€rdar ni har och sĂ„ vidare. Införsel Ă€r en sak, men man mĂ„ste ocksĂ„ hĂ€mta dessa data â med Grafana eller nĂ„got annat.
A: â SĂ„ det handlar om en jĂ€mlik kamp, inte ett stort övertag hos dessa snabba databaser?
AG: â Jag tror att vi nĂ€r vi integrerar kommer att fĂ„ mer exakta tester.
A: â Men vart tog den gamla goda RRD vĂ€gen? Vad fick er att gĂ„ över till SQL-databaser? Ursprungligen samlades ju alla metrik i RRD.
AG: â I "Zabbix" fanns RRD kanske i en mycket gammal version. Det har alltid funnits SQL-databaser â den klassiska metoden. Den klassiska metoden Ă€r MySQL, PostgreSQL (som faktiskt funnits lĂ€nge nu). Vi har ett gemensamt grĂ€nssnitt för SQL-databaser och RRD har vi knappt anvĂ€nt.


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, , en unik motsvarighet till entry-level servrar som vi har skapat för er: (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 i NederlĂ€nderna! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â frĂ„n $99! LĂ€s om
KĂ€lla: habr.com
