{"id":52115,"date":"2019-11-01T00:00:00","date_gmt":"2019-10-31T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury"},"modified":"2020-02-18T13:59:47","modified_gmt":"2020-02-18T10:59:47","slug":"monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","title":{"rendered":"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I dag p\u00e5 vores projekt, bortset fra monolitisk kode, fungerer der dusinvis af mikrotjenester. Hver enkelt kr\u00e6ver overv\u00e5gning. At g\u00f8re dette i s\u00e5 store m\u00e6ngder er problematisk for DevOps-ingeni\u00f8rer. Vi har udviklet et overv\u00e5gningssystem, der fungerer som en tjeneste for udviklere. De kan selv skrive m\u00e5linger til overv\u00e5gningssystemet, bruge dem, bygge dashboards baseret p\u00e5 dem og tilknytte alarmer, der aktiveres ved t\u00e6rskelv\u00e6rdier. DevOps-ingeni\u00f8rerne har kun ansvar for infrastrukturen og dokumentationen. <\/p>\n<p>Dette indl\u00e6g er en transskription af mit foredrag fra vores <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/tomicro\">sektion<\/a><\/noindex> p\u00e5 RIT++. Mange har bedt os om at lave tekstversioner af opl\u00e6ggene derfra. Hvis du var til konferencen eller s\u00e5 videoen, vil du ikke finde noget nyt. Til alle andre - velkommen under kat. Jeg vil fort\u00e6lle, hvordan vi kom til dette system, hvordan det fungerer, og hvordan vi planl\u00e6gger at opdatere det. <\/p>\n<p><img decoding=\"async\" alt=\"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/000b8fdc8fb16aa76ce545ff2aa4e767.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Fortiden: skemaer og planer <\/h3>\n<p>\nHvordan kom vi frem til det nuv\u00e6rende overv\u00e5gningssystem? For at besvare dette sp\u00f8rgsm\u00e5l skal vi tage tilbage til 2015. S\u00e5dan s\u00e5 det ud dengang: <\/p>\n<p><img decoding=\"async\" alt=\"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/d955f9bcdb5f5a5a54720c77113ca85d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi havde omkring 24 noder, der var ansvarlige for overv\u00e5gningen. Her er der en hel bunke forskellige cron-jobs, scripts og d\u00e6moner, der p\u00e5 en eller anden m\u00e5de overv\u00e5ger noget, sender beskeder, udf\u00f8rer funktioner. Vi mente, at jo l\u00e6ngere vi kom, desto mindre levedygtig ville et s\u00e5dan system v\u00e6re. Det gav ikke mening at videreudvikle det: det var for volumin\u00f8st. <br \/>\nVi besluttede at v\u00e6lge de overv\u00e5gningselementer, som vi ville beholde og udvikle, og dem vi ville opgive. Det endte med at v\u00e6re 19. Kun grafitter, aggregatorer og Grafana som dashboard blev tilbage. Men hvordan vil det nye system se ud? S\u00e5dan her: <\/p>\n<p><img decoding=\"async\" alt=\"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/57d220113d0b76c05874b5d774bff8af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi har et lager af m\u00e5linger: det er grafitter, der vil v\u00e6re baseret p\u00e5 hurtige SSD-diske, og det er bestemte aggregatorer for m\u00e5linger. Dern\u00e6st - Grafana til at vise dashboards og Moira til alarmering. Vi \u00f8nskede ogs\u00e5 at udvikle et system til at finde anomalier. <\/p>\n<h3>Standard: Overv\u00e5gning 2.0<\/h3>\n<p>\nS\u00e5dan s\u00e5 planerne ud i 2015. Men vi skulle ikke kun forberede infrastrukturen og selve tjenesten, men ogs\u00e5 dokumentationen til den. Vi udviklede et internt standard, som vi kaldte overv\u00e5gning 2.0. Hvilke krav var der til systemet? <\/p>\n<ul>\n<li>konstant tilg\u00e6ngelighed; <\/li>\n<li>intervaller for opbevaring af m\u00e5linger = 10 sekunder; <\/li>\n<li>struktureret opbevaring af metrics og dashboards; <\/li>\n<li>SLA &gt; 99,99% <\/li>\n<li>indsamling af events-metrics via UDP (!). <\/li>\n<\/ul>\n<p>\nVi havde brug for UDP, da vi har et stort flow af trafik og events, der genererer metrics. Hvis vi skulle sende dem alle til Graphite p\u00e5 \u00e9n gang, ville lageret kollapse. Vi valgte ogs\u00e5 niveau 1 pr\u00e6fikser for alle metrics. <\/p>\n<p><img decoding=\"async\" alt=\"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/d24c4474b19b532a48cef4d4376287ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHver af pr\u00e6fiksene har en s\u00e6rlig egenskab. Der er metrics for servere, netv\u00e6rk, containere, ressourcer, applikationer og s\u00e5 videre. Vi har implementeret en klar, striks, typet filtrering, hvor vi accepterer niveau 1 metrics, mens de andre blot droppes. S\u00e5dan planlagde vi dette system i 2015. Hvordan ser det ud nu? <\/p>\n<h3>Nutiden: interaktionsskema for monitoreringskomponenter<\/h3>\n<p>\nF\u00f8rst og fremmest overv\u00e5ger vi applikationer: vores PHP-kode, applikationer og mikrotjenester \u2014 med andre ord alt, hvad vores udviklere skriver. Alle applikationer sender metrics til aggregatoren Brubeck via UDP (statsd, omskrevet i C). Det viste sig at v\u00e6re den hurtigste i de syntetiske tests. Og den sender allerede aggregerede metrics til Graphite via TCP. <\/p>\n<p>Den har en type metrics kaldet timere. Det er en meget praktisk ting. For eksempel, n\u00e5r en bruger forbinder sig til tjenesten, sender du en metric med response time til Brubeck. En million svar er kommet ind, men aggregatoren har kun givet 10 metrics. Du har antallet af ankomne brugere, maksimal, minimal og gennemsnitlig svartid, median og 4 percentiler. Dataene sendes derefter til Graphite, og vi ser dem alle live. <\/p>\n<p>Vi har ogs\u00e5 aggregation for metrics til hardware, software, systemmetrikker og vores gamle overv\u00e5gningssystem Munin (som vi brugte indtil 2015). Alt dette indsamles gennem C-demonen CollectD (som har en hel bunke forskellige plugins indbygget, den kan foresp\u00f8rge alle ressourcer p\u00e5 hostsystemet, hvor den er installeret, blot angiv i konfigurationen, hvor data skal skrives) og sender data til Graphite. Den underst\u00f8tter ogs\u00e5 Python- og shell-script plugins, s\u00e5 du kan skrive dine egne tilpassede l\u00f8sninger: CollectD vil indsamle disse data fra en lokal eller ekstern v\u00e6rt (lad os antage, at der er Curl) og sende dem til Graphite. <\/p>\n<p>Derefter sender vi alle de metrics, vi har indsamlet, til Carbon-c-relay. Dette er Carbon Relay-l\u00f8sningen fra Graphite, forbedret med C. Det er en router, der samler alle de metrics, vi sender fra vores aggregater og omdirigerer dem til noderne. I fasen for omdirigering kontrollerer den ogs\u00e5 validiteten af metrics. For det f\u00f8rste skal de overholde det schema med pr\u00e6fikser, som jeg viste tidligere, og for det andet v\u00e6re valide for Graphite. Ellers bliver de droppet. <\/p>\n<p>Derefter sender Carbon-c-relay metrics til Graphite-klyngen. Vi bruger Carbon-cache som vores prim\u00e6re metrics-lager, omskrevet i Go. Go-carbon overg\u00e5r Carbon-cache i ydeevne p\u00e5 grund af dets multithreading. Det modtager data og skriver dem til diske ved hj\u00e6lp af whisper-pakken (den standard, der er skrevet i Python). For at l\u00e6se data fra vores lagre bruger vi Graphite API. Det fungerer hurtigere end den standard Graphite WEB. Hvad sker der med dataene bagefter? <\/p>\n<p>De g\u00e5r til Grafana. Som vores prim\u00e6re datakilde bruger vi vores Graphite-klynger, plus vi har Grafana som webgr\u00e6nseflade til visning af metrics og opbygning af dashboards. For hver af deres tjenester opretter udviklerne deres egne dashboards. Derefter opbygger de grafer, der viser de metrics, de skriver fra deres applikationer. Udover Grafana har vi ogs\u00e5 SLAM. Dette er en Python-d\u00e6mon, der beregner SLA baseret p\u00e5 data fra Graphite. Som jeg allerede har n\u00e6vnt, har vi flere dusin mikrotjenester, hver med deres egne krav. Med SLAM g\u00e5r vi ind i dokumentationen og sammenligner den med det, der er i Graphite, og vurderer, hvor godt kravene stemmer overens med tilg\u00e6ngeligheden af vores tjenester. <\/p>\n<p>Lad os g\u00e5 videre: alerting. Dette er organiseret ved hj\u00e6lp af et st\u00e6rkt system \u2014 Moira. Den er uafh\u00e6ngig, fordi den har sin egen Graphite under motorhjelmen. Den er udviklet af folkene fra SKB \"Kontur\", skrevet i Python og Go, og er helt open source. Moira modtager hele det samme flow, der g\u00e5r til Graphite. Hvis dit lager af en eller anden grund skulle stoppe med at fungere, s\u00e5 vil din alerting stadig fungere.<\/p>\n<p>Vi har implementeret Moira i Kubernetes, hvor den bruger et Redis-serverkluster som sin prim\u00e6re database. Resultatet er et fejltolerant system. Det sammenligner metrics str\u00f8mmen med en liste over triggere: hvis der ikke er nogen omtaler i den, droppes metric. P\u00e5 den m\u00e5de kan den h\u00e5ndtere gigabytes af metrics pr. minut. <\/p>\n<p>Derudover har vi tilknyttet et corporate LDAP, som g\u00f8r det muligt for hver bruger af det corporate system at oprette notifikationer baseret p\u00e5 eksisterende (eller nyoprettede) triggere. Da Moira indeholder Graphite, underst\u00f8tter den alle dens funktioner. Derfor kopierer du f\u00f8rst en linje ind i Grafana. Du ser, hvordan dataene vises p\u00e5 graferne. Derefter kopierer du den samme linje ind i Moira, s\u00e6tter den op med gr\u00e6nser, og modtager alerts som output. Du har ikke brug for nogen specielle f\u00e6rdigheder for at g\u00f8re alt dette. Moira kan sende alerts via SMS, e-mail, Jira, Slack... Den underst\u00f8tter ogs\u00e5 udf\u00f8relse af brugerdefinerede scripts. N\u00e5r den udl\u00f8ser en trigger og er tilmeldt et brugerdefineret script eller bin\u00e6r, k\u00f8rer den det og sender JSON til stdin til denne bin\u00e6r. Din program skal derfor kunne parse den. Hvad du vil g\u00f8re med denne JSON, er op til dig. Vil du sende den til Telegram, eller \u00e5bne opgaver i Jira, g\u00f8r hvad du vil. <\/p>\n<p>Vi bruger ogs\u00e5 vores egen udvikling til alerts \u2014 Imagotag. Vi har tilpasset et panel, der normalt bruges til elektroniske prisskilt i butikker, til vores behov. Vi har trukket triggere fra Moira op p\u00e5 det. Her fremg\u00e5r, hvilken tilstand de er i, og hvorn\u00e5r de fandt sted. Nogle af udviklerne har fravalgt notifikationer i Slack og e-mail til fordel for dette panel. <\/p>\n<p><img decoding=\"async\" alt=\"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/bcf454c96adaa0cff81f5e56db5b715c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOg da vi er et progressivt firma, har vi ogs\u00e5 overv\u00e5get Kubernetes i dette system. Vi har inkluderet det i systemet via Heapster, som vi installerede i klyngen, som indsamler data og sender dem til Graphite. Resultatet ser s\u00e5ledes ud: <\/p>\n<p><img decoding=\"async\" alt=\"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/cca0f2f9f590fc84609d48e52ebd0d21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Overv\u00e5gningskomponenter<\/h3>\n<p>Her er en liste over links til de komponenter, vi har brugt til denne opgave. Alle er open-source. <\/p>\n<h4>Graphite:<\/h4>\n<p><\/p>\n<ul>\n<li>go-carbon: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lomik\/go-carbon\">github.com\/lomik\/go-carbon<\/a><\/noindex><\/li>\n<li>whisper: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/graphite-project\/whisper\">github.com\/graphite-project\/whisper<\/a><\/noindex> <\/li>\n<li>graphite-api: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/brutasse\/graphite-api\">github.com\/brutasse\/graphite-api<\/a><\/noindex> <\/li>\n<\/ul>\n<h4>Carbon-c-relay: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grobian\/carbon-c-relay\">github.com\/grobian\/carbon-c-relay<\/a><\/noindex> <\/p>\n<h4>Brubeck: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">github.com\/github\/brubeck<\/a><\/noindex> <\/p>\n<h4>Collectd:<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/collectd.org\/\">collectd.org<\/a><\/noindex><\/p>\n<h4>Moira: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moira-alert\">github.com\/moira-alert<\/a><\/noindex> <\/p>\n<h4>Grafana: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">grafana.com<\/a><\/noindex> <\/p>\n<h4>Heapster: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/heapster\">github.com\/kubernetes\/heapster<\/a><\/noindex><\/p>\n<h3>Statistik<\/h3>\n<p>\nOg her er nogle tal om, hvordan systemet fungerer hos os. <\/p>\n<h4>Aggregator (brubeck)<\/h4>\n<p>\nAntal metrikker: ~ 300 000 \/ sek<br \/>\nFrekvens for sending af metrikker til Graphite: 30 sek<br \/>\nServerressourceforbrug: ~ 6% CPU (dette g\u00e6lder for fuldgyldige servere); ~ 1Gb RAM; ~ 3 Mbps LAN<\/p>\n<h4>Graphite (go-carbon)<\/h4>\n<p>\nAntal metrikker: ~ 1 600 000 \/ min<br \/>\nOpdateringsfrekvens for metrikker: 30 sek<br \/>\nOpbevaringsskema for metrikker: 30sek 35d, 5min 90d, 10min 365d (giver indblik i, hvad der sker med tjenesten over lang tid) <br \/>\nServerressourceforbrug: ~ 10% CPU; ~ 20Gb RAM; ~ 30 Mbps LAN<\/p>\n<h3>Fleksibilitet<\/h3>\n<p>\nVi v\u00e6rds\u00e6tter fleksibiliteten i vores overv\u00e5gningstjeneste hos Avito. Hvorfor er det blevet s\u00e5dan? For det f\u00f8rste er dets bestanddele udskiftelige: b\u00e5de selve komponenterne samt deres versioner. For det andet \u2014 vedligeholdeligheden. Da hele projektet er bygget p\u00e5 open source, kan du selv redigere koden, lave \u00e6ndringer og implementere funktioner, der ikke er tilg\u00e6ngelige ud af boksen. Der anvendes ret almindelige stakke, hovedsageligt Go og Python, s\u00e5 det er relativt nemt at g\u00f8re. <\/p>\n<p>Her er et eksempel p\u00e5 et reelt problem, der opstod. En metrik i Graphite er en fil. Den har et navn. Filnavnet = metrikens navn. Og der er en sti til det. Filnavne i Linux er begr\u00e6nset til 255 tegn. Og vi har (som \"interne kunder\") folk fra databasedepartementet. De siger til os: \"Vi vil overv\u00e5ge vores SQL-foresp\u00f8rgsler. Og de er ikke 255 tegn, men 8 MB hver. Vi vil have dem vist i Grafana, se parametrene for denne foresp\u00f8rgsel, og endnu bedre, vi vil se toppen af s\u00e5danne foresp\u00f8rgsler. Det ville v\u00e6re fantastisk, hvis det kunne vises i realtid. Og det ville v\u00e6re helt fantastisk at f\u00e5 dem med i alerting.\" <\/p>\n<p><img decoding=\"async\" alt=\"Overv\u00e5gning som en service: modul\u00e6rt system til mikrotjenestearkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/e1136c7fd0b6156c0c3fd49bab54737e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Eksemplet p\u00e5 SQL-foresp\u00f8rgslen er taget som eksempel fra <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/9.6\/queries-with\">siden postgrespro.ru<\/a><\/noindex> <\/i><\/p>\n<p>Vi opretter en Redis-server og bruger vores Collectd-plugins, der henter data fra Postgres og sender metrics til Graphite. Men vi \u00e6ndrer metricsnavnet til hashes. Denne hash sender vi samtidig til Redis som n\u00f8gle, og hele SQL-sp\u00f8rgsm\u00e5let som v\u00e6rdi. Det, der er tilbage, er at f\u00e5 Grafana til at hente informationen fra Redis. Vi \u00e5bner Graphite API, da det er hovedgr\u00e6nsefladen for interaktion mellem alle overv\u00e5gningskomponenter og Graphite, og vi tilf\u00f8jer en ny funktion, der hedder aliasByHash() \u2014 fra Grafana f\u00e5r vi metricsnavnet og bruger det i foresp\u00f8rgslen til Redis som n\u00f8gle, hvorved vi modtager n\u00f8glens v\u00e6rdi, som er vores \u201cSQL-sp\u00f8rgsm\u00e5l\u201d. Dermed har vi f\u00e5et SQL-sp\u00f8rgsm\u00e5let vist i Grafana, hvilket ellers ikke kunne vises, sammen med statistikkerne for det (calls, rows, total_time, \u2026). <\/p>\n<h3>Resum\u00e9 <\/h3>\n<p>\n<b>Tilg\u00e6ngelighed.<\/b> Vores overv\u00e5gningstjeneste er tilg\u00e6ngelig 24\/7 fra enhver applikation og enhver kode. Hvis du har adgang til lagerpladserne, kan du skrive data til tjenesten. Sproget er ligegyldigt, l\u00f8sningerne er ligegyldige. Du skal blot vide, hvordan man \u00e5bner en socket, sender m\u00e5lingen og lukker socketen. <\/p>\n<p><b>P\u00e5lidelighed.<\/b> Alle komponenter er fejlstore og h\u00e5ndterer vores belastninger godt. <\/p>\n<p><b>Lav adgangsbarriere.<\/b> For at bruge dette system skal du ikke l\u00e6re programmeringssprog eller foresp\u00f8rgsler i Grafana. Bare \u00e5bn din applikation, indtast socketen, der sender m\u00e5linger til Graphite, lukker den, \u00e5bner Grafana, opretter dashboards der og overv\u00e5ger adf\u00e6rden af dine m\u00e5linger, mens du modtager meddelelser gennem Moira.<\/p>\n<p><b>Selvst\u00e6ndighed.<\/b> Alt dette kan g\u00f8res selvst\u00e6ndigt, uden hj\u00e6lp fra DevOps-ingeni\u00f8rer. Og det er overkill, fordi du kan overv\u00e5ge dit projekt lige nu, uden at skulle sp\u00f8rge nogen - hverken for at starte arbejdet eller for \u00e6ndringer. <\/p>\n<h3>Hvad str\u00e6ber vi efter? <\/h3>\n<p>\nAlt det nedenfor er ikke blot abstrakte tanker, men det, vi allerede har taget de f\u00f8rste skridt hen imod. <\/p>\n<ol>\n<li>Anomalidetektor. Vi \u00f8nsker at udvikle en tjeneste, der vil g\u00e5 ind i vores Graphite-lagre og kontrollere hver m\u00e5ling efter forskellige algoritmer. Der er allerede algoritmer, vi \u00f8nsker at overv\u00e5ge, vi har data, og vi ved, hvordan vi skal arbejde med dem.\n<\/li>\n<li>Metadata. Vi har mange tjenester, som \u00e6ndrer sig over tid, ligesom de mennesker, der arbejder med dem. At holde dokumentationen manuel er ikke en mulighed. Derfor integreres metadata nu i vores mikrotjenester. Her st\u00e5r der, hvem der har udviklet den, hvilke sprog den interagerer med, SLA-krav, og hvor og til hvem notifikationer skal sendes. Ved deployment af tjenesten oprettes alle data entiteter selvst\u00e6ndigt. Resultatet er, at du f\u00e5r to links \u2013 et til triggers og et andet til dashboards i Grafana.\n<\/li>\n<li>Overv\u00e5gning i hvert hjem. Vi mener, at alle udviklere b\u00f8r bruge et s\u00e5dant system. P\u00e5 den m\u00e5de ved du altid, hvor din trafik er, hvad der sker med den, hvor den falder, og hvor dens svage punkter er. Hvis der for eksempel sker noget, der overbelaster din tjeneste, vil du ikke finde ud af det under et opkald fra en manager, men fra et alert, og med det samme kan du \u00e5bne de friske logs og se, hvad der er sket.\n<\/li>\n<li>H\u00f8j ydeevne. Vores projekt vokser konstant, og i dag behandles der cirka 2.000.000 metrics v\u00e6rdier per minut. For et \u00e5r siden var dette tal 500.000. Og v\u00e6ksten forts\u00e6tter, hvilket betyder, at Graphite (whisper) snart vil begynde at belaste disk subsystemet meget. Som jeg allerede har n\u00e6vnt, er dette overv\u00e5gningssystem ret universelt p\u00e5 grund af udskifteligheden af komponenterne. Nogen vedligeholder specifikt Graphite og udvider konstant deres infrastruktur, men vi har besluttet at g\u00e5 en anden vej: at bruge <noindex><a rel=\"nofollow\" href=\"https:\/\/clickhouse.yandex\/\">ClickHouse<\/a><\/noindex> som lager for vores metrics. Denne overgang er n\u00e6sten afsluttet, og snart vil jeg fort\u00e6lle mere om, hvordan det blev gjort: hvilke udfordringer der var, og hvordan de blev overvundet, hvordan migreringsprocessen forl\u00f8b, samt beskrive de valgte omsluttende komponenter og deres konfigurationer. \n<\/li>\n<\/ol>\n<p>\nTak for opm\u00e6rksomheden! Stil dine sp\u00f8rgsm\u00e5l om emnet, jeg vil fors\u00f8ge at svare her eller i de n\u00e6ste indl\u00e6g. M\u00e5ske har nogen erfaring med at opbygge et lignende overv\u00e5gningssystem eller overgangen til Clickhouse i en tilsvarende situation \u2013 del venligst det i kommentarerne.<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/335410\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52115","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:59:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Overv\u00e5gning som service: modul\u00e6rt system til mikroservicearkitektur | ProHoster","description":"I dag fungerer der p\u00e5 vores projekt, udover den monolitiske kode, titalls mikrotjenester. Hver af dem kr\u00e6ver overv\u00e5gning. At g\u00f8re dette i s\u00e5 stort omfang med DevOps-ingeni\u00f8rernes kr\u00e6fter er problematisk.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster","og:description":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T21:00:00+00:00","article:modified_time":"2020-02-18T10:59:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52115","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 02:30:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:49:49","updated":"2026-01-24 02:30:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/52115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=52115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/52115\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=52115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=52115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=52115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}