VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

VictoriaMetrics — en hurtig og skalerbar database til lagring og behandling af data i form af tidsserier (en optagelse udgør tid og et sæt af værdier, der svarer til dette tidspunkt, for eksempel opnået gennem periodiske forespørgsler af sensorernes tilstand eller indsamling af målinger).


Afspil video

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Mit navn er Kolobaev Pavel. DevOps, SRE, LeroyMerlin, alt som kode – det handler alt sammen om os: om mig og andre medarbejdere hos LeroyMerlin.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

https://bit.ly/3jf1fIK

Der er en sky baseret på OpenStack. Her er et lille link til teknologiradar.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Det er bygget på hardware fra Kubernetes, samt alle tilknyttede tjenester til OpenStack og logning.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Skemaet var således, da vi udviklede det. Da vi udviklede alt dette, havde vi en Prometheus-operator, der opbevarede data inden for selve K8s-klyngen. Den finder automatisk det, der skal scrapes, og lægger det for sig selv, groft sagt.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Alle data skal vi flytte ud af Kubernetes-klyngen, fordi hvis noget går galt, skal vi forstå, hvad der er sket og hvor.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Den første løsning – vi bruger federation, når vi har en ekstern Prometheus, når vi tilgår klyngen Kubernetes gennem federation-mekanismen.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Men der opstår små problemer. I vores tilfælde startede problemerne, da vi havde 250.000 målinger, og da der blev 400.000 målinger, indså vi, at vi ikke kunne arbejde på denne måde. Vi øgede scrape_timeout til 25 sekunder.

Hvorfor måtte vi gøre dette? Prometheus begynder at tælle timeout-tiden fra det øjeblik, dataene indsamles. Og det betyder ikke noget, at dataene stadig strømmer. Hvis dataene ikke er blevet indsamlet, og sessionen ikke lukkes via http i den angivne tidsperiode, betragtes sessionen som mislykket, og dataene kommer ikke ind i selve Prometheus.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Alle er bekendt med de grafer, vi får, når nogle data mangler. Graferne er ujævne, og det er ikke acceptabelt for os.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Den næste mulighed – det er sharding baseret på to forskellige Prometheus gennem den samme federation-mekanisme.

For eksempel bare tage dem og shardere dem efter navn. Det kan også bruges, men vi besluttede at tage et skridt videre.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi bliver nu nødt til at håndtere disse shards på en eller anden måde. Vi kan tage promxy, som går ind i shardområdet og multiplerer data. Den fungerer med to shards som et enkelt adgangspunkt. Det kan realiseres gennem promxy, men er stadig for kompliceret.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Den første mulighed – vi ønsker at afstå fra federation-mekanismen, fordi den er meget langsom.

Udviklerne af Prometheus siger tydeligt: „Folk, brug andre TimescaleDB, fordi vi ikke vil støtte langvarig opbevaring af målinger.“ Det er ikke deres opgave. VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi noterer på papir, at vi faktisk har brug for en ekstern eksport, så vi ikke opbevarer alt på ét sted.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Den anden ulempe er hukommelsesforbruget. Ja, jeg forstår, at mange vil sige, at et par gigabyte hukommelse i 2020 er billigere, men det er stadigvæk.

I øjeblikket har vi et udviklings- og produktionsmiljø. I udviklingen er der omkring 9 gigabyte for 350.000 målinger. I produktion er der lidt over 14 gigabyte for 780.000 målinger. Samtidig har vi kun 30 minutters retention-tid. Det er ikke godt. Og jeg vil nu forklare hvorfor.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi laver beregninger, dvs. med halvanden million målinger, som vi allerede næsten er ved at nå, har vi under designfasen beregnet 35-37 gigabyte hukommelse. Men allerede ved 4 millioner målinger kræves der omkring 90 gigabyte hukommelse. Dvs. dette er blevet beregnet ud fra den formel, som udviklerne af Prometheus giver. Vi har set på korrelationen og indset, at vi ikke ønsker at betale et par millioner for en server bare til overvågning.

Vi får ikke bare flere maskiner, vi overvåger også de virtuelle maskiner. Derfor, jo flere virtuelle maskiner, jo flere målinger af forskellige arter osv. Vi vil have en specifik vækst af vores klynge i forhold til målinger.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Med diskpladsen er der ikke så meget galt, men vi ville gerne se en forbedring. Vi har samlet 120 gigabyte over 15 dage, hvoraf 100 er komprimerede data, 20 er ukomprimerede data, men man ønsker altid mindre.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Derfor skriver vi også et punkt ned – der er et stort forbrug af ressourcer, som vi gerne vil spare, fordi vi ikke ønsker, at vores overvågningsklynge bruger flere ressourcer end vores klynge, der håndterer OpenStack.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Der er en anden ulempe ved Prometheus, som vi har identificeret, og det er et eller andet begrænsning på hukommelsen. Med Prometheus er det meget værre, fordi der faktisk ikke er sådanne indstillinger. At bruge begrænsninger i Docker er heller ikke en løsning. Hvis din RAF falder og der er 20-30 gigabyte, vil det tage meget lang tid at komme op igen.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Det er endnu en grund til, at Prometheus ikke er passende for os, dvs. man kan ikke begrænse hukommelsesforbruget.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Man kunne gå tilbage til denne ordning. Denne ordning er nødvendig for at organisere et HA-kluster. Vi ønsker, at vores målinger altid skal være tilgængelige, selv hvis serveren, der gemmer disse målinger, går ned. Derfor er vi nødt til at bygge en sådan ordning.

Denne ordning betyder, at vi vil have duplikater af shards og dermed også duplikation af de ressourcer, der forbruges. Den kan næsten skaleres horisontalt, men forbruget af ressourcer vil stadig være enormt.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Ulemperne i den rækkefølge, som vi har skrevet dem ned:

  • Der er behov for at eksportere målinger udad.
  • Høj ressourceforbrug.
  • Kan ikke begrænse hukommelsesforbruget.
  • Kompleks og ressourcekrævende implementering af HA.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi har besluttet os for at gå væk fra Prometheus som datalager.

Vi har også defineret yderligere krav, som vi har brug for. Det er:

  • Støtte til promql, fordi der allerede er skrevet meget til Prometheus: forespørgsler, alarmer.
  • Og videre har vi Grafana, som også er skrevet til Prometheus som backend. Vi vil helst ikke genoptage dashboards.
  • Vi ønsker at opbygge en korrekt HA-arkitektur.
  • Vi ønsker at reducere forbruget af enhver art ressourcer.
  • Der er en lille detalje. Vi kan ikke bruge diverse cloud-metric indsamling systemer. Vi ved ikke, hvad der vil flyve ind i disse målinger endnu. Og da der kan komme alt muligt ind, må vi begrænse os til lokal hosting.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Valget var begrænset. Vi samlede alt, hvad vi havde erfaring med. Vi så på Prometheus' integrationsside, læste en masse artikler, så hvad der egentlig er. Og vi valgte VictoriaMetrics som erstatning for Prometheus.

Hvorfor? Fordi:

  • Den understøtter promql.
  • Den har en modulær arkitektur.
  • Den kræver ingen ændringer i Grafana.
  • Og vigtigst af alt – vi vil måske levere opbevaring af målinger internt i vores virksomhed som en service, så vi ser allerede i retning af begrænsninger, så brugerne kan bruge alle ressourcerne fra klyngen i et begrænset omfang, da der er en chance for, at det vil være multitenancy.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi laver den første sammenligning. Vi tager den samme Prometheus inden for klyngen, hvor en ekstern Prometheus forbindes til. Vi tilføjer via remoteWrite VictoriaMetrics.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Jeg vil straks nævne, at vi her har oplevet en lille stigning i CPU-forbruget fra VictoriaMetrics. På VictoriaMetrics wiki står der, hvilke parametre der passer bedst. Vi har testet dem. De reducerede CPU-forbruget meget effektivt.

I vores tilfælde er hukommelsesforbruget fra Prometheus, som kører i Kubernetes-klyngen, ikke steget betydeligt.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi sammenligner to datakilder med de samme data. I Prometheus ser vi stadig alle de manglende data. I VictoriaMetrics ser alt fint ud.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Testresultaterne for diskplads. I Prometheus fik vi i alt 120 gigabyte. I VictoriaMetrics får vi allerede 4 gigabyte om dagen. Der er en lidt anderledes mekanisme end hvad vi er vant til at se i Prometheus. Det betyder, at dataene allerede bliver godt komprimeret inden for en dag og på en halv time. De er allerede godt komprimeret inden for en dag og på en halv time, selvom der senere vil være en sammensmeltning af data. I sidste ende har vi sparet på diskplads.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi sparer også på hukommelsesressourcer. På tidspunktet for testene var Prometheus installeret på en virtuel maskine – 8 kerner, 24 gigabyte. Prometheus tog stort set alt. Det faldt under OOM Killer. Der var kun 900.000 aktive metrics blevet indlæst. Det er omkring 25.000-27.000 metrics i sekundet.

VictoriaMetrics blev kørende på en to-kernet virtuel maskine med 8 gigabyte RAM. Vi fik VictoriaMetrics til at fungere godt ved at justere nogle indstillinger på den 8-gigabyte maskine. I sidste ende holdt vi os inden for 7 gigabyte, samtidig med at vi opnåede en hurtigere dataoverførsel, dvs. metrics, end Prometheus.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

CPU-forbruget er blevet meget bedre i forhold til Prometheus. Her bruger Prometheus 2,5 kerner, mens VictoriaMetrics kun bruger 0,25 kerner. Ved opstart – 0,5 kerner. Mens der er en sammensmeltning, når den når op på en kerne, men det sker ekstremt sjældent.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

I vores tilfælde valgte vi VictoriaMetrics af åbenlyse grunde, vi ønskede at spare penge, og det lykkedes.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi udelader straks to punkter – det er udtrækning af metrics og høj ressourceforbrug. Og vi skal stadig løse to punkter, som vi har tilbage.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Her vil jeg straks nævne, at vi betragter VictoriaMetrics som et metrics-lager. Men da vi sandsynligvis vil tilbyde VictoriaMetrics som lager for hele Leroy, er vi nødt til at begrænse dem, der vil bruge denne klynge, så de ikke ødelægger den.

Der er en fantastisk parameter, der gør det muligt at begrænse efter tid, datamængde og udførelsestid.

Der er også en fremragende mulighed, der giver os mulighed for at begrænse hukommelsesforbruget, hvilket gør det muligt for os at finde den balance, der sikrer en normal driftshastighed og hensigtsmæssigt ressourceforbrug.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Endnu et minus, således at vi kan strege det punkt – man kan ikke begrænse hukommelsesforbruget.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

I de første iterationer testede vi VictoriaMetrics Single Node. Dernæst går vi videre til VictoriaMetrics Cluster Version.

Her har vi frihed til at fordele forskellige tjenester i VictoriaMetrics afhængigt af, hvad de kører på, og hvilke ressourcer de forbruger. Det er en meget fleksibel og praktisk løsning. Vi har selv anvendt det.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

De grundlæggende komponenter i VictoriaMetrics Cluster Version er vmstorage. Der kan være N antal. I vores tilfælde har vi indtil videre 2.

Og der er vminsert. Det er en proxy-server, der gør det muligt for os at: udføre sharding mellem alle storages, som vi har fortalt den om, og den muliggør også replikering, således at du får både sharding og replikation.

Vminsert understøtter OpenTSDB, Graphite, InfluxDB-protokoller og remoteWrite fra Prometheus.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Der er også vmselect. Dens primære opgave er at gå til vmstorage, hente data derfra, deduplikere disse data og returnere dem til klienten.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Der er også en fantastisk ting som vmagent. Vi holder virkelig af den. Den gør det muligt at konfigurere på samme måde som Prometheus og gøre alt præcist som Prometheus. Det vil sige, at den indsamler målinger fra forskellige enheder, tjenester og sender dem til vminsert. Herefter afhænger det hele af dig.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

En anden fantastisk service er vmalert, som gør det muligt at bruge VictoriaMetrics som backend, modtage data fra vminsert og sende de behandlede data til vmselect. Den behandler selv alerter og regler. I tilfælde af alerter modtager vi alerter gennem alertmanager.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Der er en komponent, wmauth. Den vil muligvis blive brugt af os, eller måske ikke (vi har ikke besluttet os for dette endnu) som et autorisationssystem ved multitenancy-versionerne af klyngen. Den understøtter remoteWrite til Prometheus og kan autorisere baseret på URL, nærmere bestemt den anden del af den, hvor du kan eller ikke kan skrive.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Der er også vmbackup, vmrestore. Det er i bund og grund gendannelse og backup af alle data. Den kan håndtere S3, GCS, fil.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Den første iteration af vores klynge blev gennemført under lockdown. På det tidspunkt havde vi ikke en replika, så vores iteration bestod af to forskellige og uafhængige klynger, hvor vi fik data gennem remoteWrite.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Jeg vil understrege, at da vi skiftede fra VictoriaMetrics Single Node til VictoriaMetrics Cluster Version, forblev vi stadig inden for de samme ressourceforbrug, dvs. primært hukommelse. Vores data blev fordelt omkring på denne måde, dvs. ressourceforbruget.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Her blev der allerede tilføjet en replika. Vi samlede det hele i en relativt stor klynge. Alle vores data både sharder og replikeres.

Hele klyngen har N indgangspunkt, dvs. Prometheus kan tilføje data gennem HAPROXY. Her har vi dette indgangspunkt. Gennem dette indgangspunkt kan man få adgang til Grafana.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

I vores tilfælde er HAPROXY den eneste port, der proxy'er select, insert og andre tjenester ind i denne klynge. Vi kunne ikke lave én adresse, vi blev nødt til at lave flere indgange, fordi de virtuelle maskiner, der kører VictoriaMetrics-klyngen, ligger i forskellige zoner hos en cloud-udbyder, dvs. ikke inden i vores cloud, men udenfor.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi har alerting. Vi bruger det. Vi bruger alertmanager fra Prometheus. Som leveringskanal til alerter bruger vi Opsgenie og Telegram. I Telegram kom der nogle fra dev, måske noget fra prod, men mere statistisk information, der er nyttig for ingeniørerne. Opsgenie er kritisk. Dette omfatter opkald og incident management.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Det evige spørgsmål: 'Hvem monitorerer monitoreringen?'. I vores tilfælde overvåger monitoreringen sig selv, fordi vi bruger vmagent på hver node. Og da vores noder er fordelt på forskellige datacentre hos én udbyder, har hvert datacenter sin egen kanal, de er uafhængige, og selv hvis der opstår split brain, vil vi stadig modtage alerter. Ja, de vil være flere, men det er bedre at få flere alerter end ingen.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi afslutter vores liste med implementeringen af HA.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Og jeg vil gerne fremhæve erfaringen med at interagere med VictoriaMetrics-fællesskabet. Det har været meget positivt. Folkene er imødekommende. De forsøger at forstå hver sag, der bliver præsenteret.

Jeg har oprettet issues på GitHub. De blev løst meget hurtigt. Der er et par issues, der ikke er helt afsluttet, men jeg kan allerede se på koden, at der arbejdes i den retning.

Den primære udfordring for mig under iterationerne var, at hvis jeg slukkede en node, kunne vminsert ikke forstå i de første 30 sekunder, at backend'en ikke var til stede. Dette er nu løst. Og på blot et sekund eller to hentes dataene nu fra alle de resterende noder, og forespørgslen stopper med at vente på den manglende node.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

Vi ønskede på et tidspunkt fra VictoriaMetrics, at det skulle være VictoriaMetrics operatoren. Vi har endelig fået den. Vi er nu i aktiv opbygning af et lag over VictoriaMetrics operatoren for at tage alle de præ-beregning regler osv. fra Prometheus, fordi vi bruger reglerne, som følger med Prometheus operatoren, ret aktivt.

Der er forslag til forbedringer af den klyngebaserede implementering. Jeg har præsenteret dem ovenfor.

Og jeg ønsker også downsampling meget. I vores tilfælde er downsampling udelukkende nødvendigt for at se trends. Groft sagt vil jeg kun have én metrik i løbet af dagen. Disse trends skal være for et år, tre, fem, ti år. Og én værdi af metrikken er helt tilstrækkelig.
VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

  • Vi har erfaret smerte, ligesom nogle af vores kolleger, når vi har brugt Prometheus.
  • Vi har valgt VictoriaMetrics til os selv.
  • Den skalerer ganske godt både vertikalt og horisontalt.
  • Vi kan fordele forskellige komponenter over forskellige mængder noder i klyngen, begrænse dem efter hukommelsesforbrug, tilføje mere hukommelse osv.

Vi vil bruge VictoriaMetrics, fordi vi virkelig kan lide den. Det var hvad der var, og hvad der er blevet til.

VictoriaMetrics og overvågning af private skyer. Pavel Kolobaev

https://t.me/VictoriaMetrics_ru1

Et par qr-koder på VictoriaMetrics chatten, mine kontaktdetaljer, teknologiradar LeroyMerlin.

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