{"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\/sv\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","title":{"rendered":"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Idag p\u00e5 v\u00e5rt projekt fungerar, f\u00f6rutom monolitiskt kod, dussintals mikrotj\u00e4nster. Varje mikrotj\u00e4nst kr\u00e4ver \u00f6vervakning. Att hantera detta i s\u00e5dan skala av DevOps-ingenj\u00f6rer \u00e4r problematiskt. Vi har utvecklat ett \u00f6vervakningssystem som fungerar som en tj\u00e4nst f\u00f6r utvecklarna. De kan sj\u00e4lva skriva m\u00e4tv\u00e4rden i \u00f6vervakningssystemet, anv\u00e4nda dem, bygga dashboards baserat p\u00e5 dem och koppla dem till larm som triggas vid uppn\u00e5dda tr\u00f6skelv\u00e4rden. Fr\u00e5n DevOps-ingenj\u00f6rerna beh\u00f6vs endast infrastruktur och dokumentation. <\/p>\n<p>Detta inl\u00e4gg \u00e4r en transkribering av mitt tal fr\u00e5n v\u00e5r <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/tomicro\">session<\/a><\/noindex> p\u00e5 RIT++. M\u00e5nga har bett oss att g\u00f6ra skriftliga versioner av presentationerna d\u00e4rifr\u00e5n. Om du var p\u00e5 konferensen eller tittade p\u00e5 videon, hittade du inget nytt. Och f\u00f6r alla andra - v\u00e4lkomna under kat. Jag kommer att ber\u00e4tta hur vi kom fram till detta system, hur det fungerar och hur vi planerar att uppdatera det. <\/p>\n<p><img decoding=\"async\" alt=\"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur\" 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>Det f\u00f6rflutna: scheman och planer <\/h3>\n<p>\nHur kom vi fram till det befintliga \u00f6vervakningssystemet? F\u00f6r att svara p\u00e5 denna fr\u00e5ga beh\u00f6ver vi g\u00e5 tillbaka till 2015. S\u00e5 h\u00e4r s\u00e5g det ut d\u00e5: <\/p>\n<p><img decoding=\"async\" alt=\"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/d955f9bcdb5f5a5a54720c77113ca85d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi hade cirka 24 noder som ansvarade f\u00f6r \u00f6vervakningen. H\u00e4r fanns en hel h\u00f6g med olika cron-jobb, skript och demoner som p\u00e5 n\u00e5got s\u00e4tt \u00f6vervakade saker, skickade meddelanden och utf\u00f6rde funktioner. Vi t\u00e4nkte att ju l\u00e4ngre bort vi kom, desto mindre livskraftig skulle ett s\u00e5dant system vara. Det fanns ingen mening att utveckla det: det var f\u00f6r otympligt. <br \/>\nVi best\u00e4mde oss f\u00f6r att v\u00e4lja ut vilka \u00f6vervakningselement vi skulle beh\u00e5lla och vidareutveckla, och vilka vi skulle \u00f6verge. Det blev 19 stycken. Endast Grafite, aggregerare och Grafana som dashboard blev kvar. Men hur skulle det nya systemet se ut? S\u00e5 h\u00e4r: <\/p>\n<p><img decoding=\"async\" alt=\"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/57d220113d0b76c05874b5d774bff8af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi har ett m\u00e4tv\u00e4rdesf\u00f6rr\u00e5d: det \u00e4r Grafiter som kommer att baseras p\u00e5 snabba SSD-diskar, och det finns vissa aggregerare f\u00f6r m\u00e4tv\u00e4rden. Vidare - Grafana f\u00f6r att visa dashboards och Moira f\u00f6r larm. Dessutom ville vi utveckla ett system f\u00f6r att uppt\u00e4cka anomalier. <\/p>\n<h3>Standard: \u00d6vervakning 2.0<\/h3>\n<p>\nS\u00e5 h\u00e4r s\u00e5g planerna ut 2015. Men vi beh\u00f6vde f\u00f6rbereda inte bara infrastrukturen och sj\u00e4lva tj\u00e4nsten, utan ocks\u00e5 dokumentationen f\u00f6r den. Vi utvecklade en f\u00f6retagsstandard som vi kallade \u00f6vervakning 2.0. Vilka krav st\u00e4lldes p\u00e5 systemet? <\/p>\n<ul>\n<li>konstant tillg\u00e4nglighet; <\/li>\n<li>intervall f\u00f6r m\u00e4tv\u00e4rdeslagring = 10 sekunder; <\/li>\n<li>strukturerad lagring av m\u00e4tningar och instrumentpaneler; <\/li>\n<li>SLA &gt; 99,99% <\/li>\n<li>insamling av h\u00e4ndelsebaserade m\u00e4tningar via UDP (!). <\/li>\n<\/ul>\n<p>\nVi beh\u00f6vde UDP, eftersom vi har en stor trafikm\u00e4ngd och h\u00e4ndelser som genererar m\u00e4tningar. Om vi skriver alla p\u00e5 en g\u00e5ng till Graphite, s\u00e5 kommer lagringen att krascha. Vi valde \u00e4ven f\u00f6rnamn f\u00f6r alla m\u00e4tningar. <\/p>\n<p><img decoding=\"async\" alt=\"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/d24c4474b19b532a48cef4d4376287ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVarje f\u00f6rnamn representerar en viss egenskap. Det finns m\u00e4tningar f\u00f6r servrar, n\u00e4tverk, containrar, resurser, applikationer osv. Vi har implementerat en tydlig, strikt, typiserad filtrering d\u00e4r vi accepterar m\u00e4tningar av f\u00f6rsta niv\u00e5, medan resten helt enkelt sl\u00e4pps. S\u00e5 h\u00e4r planerade vi detta system 2015. Vad \u00e4r l\u00e4get idag? <\/p>\n<h3>Nutid: interaktionsschema f\u00f6r \u00f6vervakningskomponenter<\/h3>\n<p>\nF\u00f6rst och fr\u00e4mst \u00f6vervakar vi applikationer: v\u00e5r PHP-kod, applikationer och mikrotj\u00e4nster - kort sagt, allt som v\u00e5ra utvecklare skriver. Alla applikationer skickar m\u00e4tningar via UDP till aggregatorkomponenten Brubeck (statsd, omkodad i C). Det visade sig vara den snabbaste utifr\u00e5n syntetiska tester. Den skickar redan aggregerade m\u00e4tningar till Graphite via TCP. <\/p>\n<p>Den har en typ av m\u00e4tning som kallas timers. Det \u00e4r en mycket praktisk funktion. Till exempel, f\u00f6r varje anv\u00e4ndaranslutning till tj\u00e4nsten skickar du en m\u00e4tning till Brubeck med svarstid. En miljon svar kom in, men aggregatoren gav endast 10 m\u00e4tningar. Du har antalet inkommande kunder, maximal, minimal och genomsnittlig svarstid, medianen och 4 percentiler. Sedan \u00f6verf\u00f6rs data till Graphite och vi ser dem alla i realtid. <\/p>\n<p>Vi har ocks\u00e5 aggregering f\u00f6r m\u00e4tv\u00e4rden g\u00e4llande h\u00e5rdvara, mjukvara, systemmetrik och v\u00e5rt gamla \u00f6vervakningssystem Munin (som vi anv\u00e4nde fram till 2015). Allt detta samlar vi in genom CollectD, som \u00e4r en demon skriven i C, som har en m\u00e4ngd olika plugins inbyggda. Den kan fr\u00e5ga alla resurser p\u00e5 host-systemet d\u00e4r den \u00e4r installerad. Du beh\u00f6ver bara ange i konfigurationen vart datan ska skrivas, och skriver sedan data till Graphite genom den. Den st\u00f6der \u00e4ven Python- och shell-skript, s\u00e5 du kan skapa egna anpassade l\u00f6sningar: CollectD kommer att samla dessa data fr\u00e5n en lokal eller fj\u00e4rransluten v\u00e4rd (l\u00e5t oss s\u00e4ga att det finns Curl) och skicka dem till Graphite. <\/p>\n<p>Sedan skickar vi alla insamlade m\u00e4tv\u00e4rden till Carbon-c-relay. Det h\u00e4r \u00e4r en Carbon Relay-l\u00f6sning fr\u00e5n Graphite som \u00e4r modifierad p\u00e5 C. Det \u00e4r en router som samlar alla m\u00e4tv\u00e4rden vi skickar fr\u00e5n v\u00e5ra aggregat och dirigerar dem till noderna. Under dirigeringssteget kontrollerar den ocks\u00e5 giltigheten hos m\u00e4tv\u00e4rdena. F\u00f6r det f\u00f6rsta m\u00e5ste de motsvara det schema med prefix som jag visade tidigare, och f\u00f6r det andra m\u00e5ste de vara giltiga f\u00f6r Graphite. Annars kommer de att sl\u00e4ppas. <\/p>\n<p>Sedan skickar Carbon-c-relay m\u00e4tv\u00e4rdena till Graphite-klustret. Vi anv\u00e4nder Carbon-cache, omskriven i Go, som v\u00e5r prim\u00e4ra lagringsl\u00f6sning f\u00f6r m\u00e4tv\u00e4rden. Go-carbon \u00f6vertr\u00e4ffar Carbon-cache avsev\u00e4rt i prestanda p\u00e5 grund av sin flertr\u00e5dade arkitektur. Den tar emot data och skriver dem till diskar med hj\u00e4lp av whisper-paketet (standard, skrivet i Python). F\u00f6r att l\u00e4sa data fr\u00e5n v\u00e5ra lagringar anv\u00e4nder vi Graphite API. Det fungerar mycket snabbare \u00e4n standard Graphite WEB. Vad h\u00e4nder med data efter det? <\/p>\n<p>De g\u00e5r till Grafana. F\u00f6r den prim\u00e4ra datak\u00e4llan anv\u00e4nder vi v\u00e5ra Graphite-kluster, och vi har ocks\u00e5 Grafana som webbgr\u00e4nssnitt f\u00f6r att visa m\u00e4tv\u00e4rden och bygga dashboards. Utvecklarna skapar sina egna dashboards f\u00f6r varje tj\u00e4nst. Sedan bygger de grafer baserat p\u00e5 m\u00e4tv\u00e4rdena de registrerar fr\u00e5n sina applikationer. F\u00f6rutom Grafana har vi ocks\u00e5 SLAM. Detta \u00e4r en Python-demon som ber\u00e4knar SLA baserat p\u00e5 data fr\u00e5n Graphite. Som jag n\u00e4mnde tidigare har vi flera dussin mikrotj\u00e4nster, var och en med sina egna krav. Med SLAM g\u00e5r vi igenom dokumentationen och j\u00e4mf\u00f6r den med det som finns i Graphite och utv\u00e4rderar hur v\u00e4l kraven motsvarar tillg\u00e4ngligheten av v\u00e5ra tj\u00e4nster. <\/p>\n<p>Vidare till alerting. Det organiseras med hj\u00e4lp av ett kraftfullt system \u2014 Moira. Den \u00e4r oberoende eftersom den har sin egen Graphite under huven. Den utvecklades av teamet bakom SKB 'Kontur', skriven i Python och Go, och \u00e4r helt \u00f6ppen k\u00e4llkod. Moira f\u00e5r samma datastream som g\u00e5r till Graphite. Om din lagring d\u00f6r av n\u00e5gon anledning kommer din alerting att forts\u00e4tta fungera.<\/p>\n<p>Moira har vi distribuerat i Kubernetes, och den anv\u00e4nder en kluster av Redis-servrar som sin prim\u00e4ra databas. Resultatet \u00e4r ett felbest\u00e4ndigt system. Den j\u00e4mf\u00f6r str\u00f6mmen av m\u00e4tdata med en lista av triggers: om det inte finns n\u00e5gra omn\u00e4mnanden, sl\u00e4pper den m\u00e4tningen. P\u00e5 s\u00e5 s\u00e4tt kan den bearbeta gigabyte av m\u00e4tdata per minut. <\/p>\n<p>Vi har ocks\u00e5 kopplat f\u00f6retagets LDAP till den, vilket g\u00f6r att varje anv\u00e4ndare i det f\u00f6retagsamma systemet kan skapa notifikationer f\u00f6r befintliga (eller nyss skapade) triggers. Eftersom Moira inneh\u00e5ller Graphite, st\u00f6djer den alla dess funktioner. S\u00e5 f\u00f6rst tar du en rad och kopierar den till Grafana. Titta p\u00e5 hur data visas i graferna. Sedan tar du samma rad och kopierar den till Moira. Du s\u00e4tter p\u00e5 den limiter och f\u00e5r alerting som resultat. F\u00f6r att g\u00f6ra allt detta beh\u00f6ver du inga speciella kunskaper. Moira kan alertas via sms, e-post, i Jira, Slack... Den st\u00f6der ocks\u00e5 att k\u00f6ra anpassade skript. N\u00e4r den f\u00e5r en trigger, och den \u00e4r prenumererad p\u00e5 ett anpassat skript eller bin\u00e4r, k\u00f6r den det och skickar JSON till stdin f\u00f6r den bin\u00e4ra filen. Ditt program m\u00e5ste d\u00e4rf\u00f6r kunna parsa det. Vad du g\u00f6r med denna JSON, avg\u00f6r du sj\u00e4lv. Vill du skicka det till Telegram, vill du \u00f6ppna uppgifter i Jira, g\u00f6r vad som helst. <\/p>\n<p>Vi anv\u00e4nder ocks\u00e5 v\u00e5r egen utveckling f\u00f6r alerting \u2014 Imagotag. Vi har anpassat en panel, som vanligtvis anv\u00e4nds f\u00f6r elektroniska prislappar i butiker, f\u00f6r v\u00e5ra \u00e4ndam\u00e5l. Vi har lagt till triggers fr\u00e5n Moira p\u00e5 den. D\u00e4r anges i vilket tillst\u00e5nd de \u00e4r och n\u00e4r de intr\u00e4ffade. En del av utvecklarna har \u00f6vergett notifikationer i Slack och e-post till f\u00f6rm\u00e5n f\u00f6r den h\u00e4r panelen. <\/p>\n<p><img decoding=\"async\" alt=\"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/bcf454c96adaa0cff81f5e56db5b715c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEftersom vi \u00e4r ett progressivt f\u00f6retag, har vi ocks\u00e5 \u00f6vervakat Kubernetes i detta system. Vi inkluderade det i systemet via Heapster, som vi installerade i klustret, det samlar in data och skickar dem till Graphite. S\u00e5 h\u00e4r ser schemat ut: <\/p>\n<p><img decoding=\"async\" alt=\"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/cca0f2f9f590fc84609d48e52ebd0d21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00d6vervakningskomponenter<\/h3>\n<p>H\u00e4r \u00e4r en lista med l\u00e4nkar till de komponenter vi anv\u00e4nde f\u00f6r denna uppgift. Alla \u00e4r 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>\nH\u00e4r \u00e4r lite siffror om hur v\u00e5rt system fungerar. <\/p>\n<h4>Aggregator (brubeck)<\/h4>\n<p>\nAntal metoder: ~ 300 000 \/ sek<br \/>\nIntervall f\u00f6r att skicka metoder till Graphite: 30 sek<br \/>\nAnv\u00e4ndning av serverresurser: ~ 6% CPU (g\u00e4ller fullfj\u00e4drade servrar); ~ 1Gb RAM; ~ 3 Mbps LAN<\/p>\n<h4>Graphite (go-carbon)<\/h4>\n<p>\nAntal metoder: ~ 1 600 000 \/ min<br \/>\nUppdateringsintervall f\u00f6r metoder: 30 sek<br \/>\nMetodlagringsschema: 30sek 35d, 5min 90d, 10min 365d (ger insikt i vad som h\u00e4nder med tj\u00e4nsten \u00f6ver en l\u00e4ngre tidsperiod) <br \/>\nAnv\u00e4ndning av serverresurser: ~ 10% CPU; ~ 20Gb RAM; ~ 30 Mbps LAN<\/p>\n<h3>Flexibilitet<\/h3>\n<p>\nVi p\u00e5 Avito v\u00e4rderar flexibiliteten i v\u00e5r \u00f6vervakningstj\u00e4nst. Varf\u00f6r blev det s\u00e5? F\u00f6r det f\u00f6rsta \u00e4r dess komponenter utbytbara: b\u00e5de sj\u00e4lva komponenterna och deras versioner. F\u00f6r det andra - underh\u00e5llbarheten. Eftersom hela projektet \u00e4r byggt p\u00e5 \u00f6ppen k\u00e4llkod kan du sj\u00e4lv \u00e4ndra koden, g\u00f6ra \u00e4ndringar och implementera funktioner som inte \u00e4r tillg\u00e4ngliga fr\u00e5n b\u00f6rjan. Det anv\u00e4nds ganska vanliga stackar, fr\u00e4mst Go och Python, s\u00e5 detta g\u00f6rs ganska enkelt. <\/p>\n<p>H\u00e4r \u00e4r ett exempel p\u00e5 ett verkligt uppkommet problem. En metod i Graphite \u00e4r en fil. Den har ett namn. Filnamnet = metodens namn. Och det finns en v\u00e4g till den. Filnamn i Linux \u00e4r begr\u00e4nsade till 255 tecken. Och vi har (som 'interna best\u00e4llare') killar fr\u00e5n databavdelningen. De s\u00e4ger till oss: 'Vi vill \u00f6vervaka v\u00e5ra SQL-fr\u00e5gor. Och de \u00e4r inte 255 tecken, utan 8 MB vardera. Vi vill visa dem i Grafana, se parametrarna f\u00f6r den h\u00e4r fr\u00e5gan, och \u00e4nnu b\u00e4ttre, vi vill se topplistan \u00f6ver s\u00e5dana fr\u00e5gor. Det skulle vara bra om det kunde visas i realtid. Och riktigt coolt skulle vara om vi kunde trycka dem in i varningssystemet.' <\/p>\n<p><img decoding=\"async\" alt=\"\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur\" src=\"\/wp-content\/uploads\/2019\/11\/e1136c7fd0b6156c0c3fd49bab54737e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Exempel p\u00e5 SQL-fr\u00e5gan h\u00e4mtas som exempel fr\u00e5n <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/9.6\/queries-with\">webbplatsen postgrespro.ru<\/a><\/noindex> <\/i><\/p>\n<p>Vi s\u00e4tter upp en Redis-server och v\u00e5ra Collectd-plugins, som g\u00e5r in i Postgres och h\u00e4mtar alla data, och skickar m\u00e4tv\u00e4rden till Graphite. Men vi byter namn p\u00e5 m\u00e4tv\u00e4rdena till hash-v\u00e4rden. Samma hash skickas \u00e4ven till Redis som nyckel, medan hela SQL-fr\u00e5gan anv\u00e4nds som v\u00e4rde. Nu \u00e5terst\u00e5r det bara att se till att Grafana kan h\u00e4mta denna information fr\u00e5n Redis. Vi \u00f6ppnar Graphite API, eftersom det \u00e4r det prim\u00e4ra gr\u00e4nssnittet f\u00f6r interaktion mellan alla \u00f6vervakningskomponenter och Graphite, och vi l\u00e4gger till en ny funktion som kallas aliasByHash() \u2013 vi f\u00e5r namnet p\u00e5 m\u00e4tv\u00e4rdet fr\u00e5n Grafana, och anv\u00e4nder det i f\u00f6rfr\u00e5gan till Redis som nyckel, och f\u00e5r tillbaka v\u00e4rdet av nyckeln, som \u00e4r v\u00e5r \"SQL-fr\u00e5ga\". P\u00e5 s\u00e5 s\u00e4tt har vi lyckats f\u00e5 fram en visning av SQL-fr\u00e5gan i Grafana, vilket tidigare inte gick att visa, tillsammans med statistik f\u00f6r den (anrop, rader, total_tid, \u2026). <\/p>\n<h3>Sammanfattning <\/h3>\n<p>\n<b>Tillg\u00e4nglighet.<\/b> V\u00e5r \u00f6vervakningstj\u00e4nst \u00e4r tillg\u00e4nglig dygnet runt fr\u00e5n vilken applikation eller kod som helst. Om du har tillg\u00e5ng till lagren kan du skriva data till tj\u00e4nsten. Spr\u00e5ket spelar ingen roll, l\u00f6sningar \u00e4r oviktiga. Du beh\u00f6ver bara veta hur man \u00f6ppnar en socket, skickar m\u00e4tv\u00e4rdet dit och st\u00e4nger socketen. <\/p>\n<p><b>Tillf\u00f6rlitlighet.<\/b> Alla komponenter \u00e4r felfria och klarar v\u00e5ra belastningar bra. <\/p>\n<p><b>L\u00e5gt intr\u00e4desbarri\u00e4r.<\/b> F\u00f6r att anv\u00e4nda detta system beh\u00f6ver du inte l\u00e4ra dig programmeringsspr\u00e5k eller fr\u00e5gor i Grafana. Du \u00f6ppnar bara din applikation, skriver in en socket som ska skicka m\u00e4tv\u00e4rden till Graphite, st\u00e4nger den, \u00f6ppnar Grafana, skapar dashboards d\u00e4r och observerar dina m\u00e4tv\u00e4rden, och f\u00e5r notifieringar via Moira.<\/p>\n<p><b>Sj\u00e4lvst\u00e4ndighet.<\/b> Allt detta g\u00e5r att g\u00f6ra sj\u00e4lv, utan hj\u00e4lp av DevOps-ingenj\u00f6rer. Och detta \u00e4r \u00f6verfl\u00f6digt, eftersom du kan \u00f6vervaka ditt projekt just nu, utan att beh\u00f6va be n\u00e5gon \u2014 varken f\u00f6r att b\u00f6rja arbeta eller f\u00f6r \u00e4ndringar. <\/p>\n<h3>Vad str\u00e4var vi efter? <\/h3>\n<p>\nAllt som n\u00e4mns nedan \u00e4r inte bara abstrakta tankar, utan det \u00e4r saker som vi redan har tagit \u00e5tminstone de f\u00f6rsta stegen emot. <\/p>\n<ol>\n<li>Anomalidetektor. Vi vill utveckla en tj\u00e4nst som g\u00e5r in i v\u00e5ra Graphite-lager och kontrollerar varje m\u00e4tv\u00e4rde enligt olika algoritmer. Vi har redan algoritmer som vi vill granska, vi har data, och vi vet hur vi ska arbeta med dem.\n<\/li>\n<li>Metadata. Vi har m\u00e5nga tj\u00e4nster som f\u00f6r\u00e4ndras \u00f6ver tid, precis som de personer som arbetar med dem. Att st\u00e4ndigt hantera dokumentationen manuellt \u00e4r ingen h\u00e5llbar l\u00f6sning. D\u00e4rf\u00f6r integreras metadata i v\u00e5ra mikrotj\u00e4nster. Det specificeras vem som utvecklade den, vilka spr\u00e5k den interagerar med, SLA-krav, samt vart och till vem notifikationer ska skickas. Vid distribution av tj\u00e4nsten skapas alla datainstanser automatiskt. Resultatet blir tv\u00e5 l\u00e4nkar - en till triggers och en till dashboards i Grafana.\n<\/li>\n<li>\u00d6vervakning i varje hem. Vi anser att alla utvecklare b\u00f6r anv\u00e4nda ett s\u00e5dant system. D\u00e5 f\u00f6rst\u00e5r du alltid var din trafik befinner sig, vad som h\u00e4nder med den, var den faller och var den har svaga punkter. Om n\u00e5got intr\u00e4ffar som p\u00e5verkar din tj\u00e4nst, f\u00e5r du veta det genom en alert snarare \u00e4n ett telefonsamtal fr\u00e5n en chef, och kan direkt \u00f6ppna f\u00e4rska loggar f\u00f6r att se vad som h\u00e4nde.\n<\/li>\n<li>H\u00f6g prestanda. V\u00e5rt projekt v\u00e4xer st\u00e4ndigt och idag bearbetar det omkring 2 000 000 datapunkter per minut. F\u00f6r ett \u00e5r sedan var detta nummer 500 000. Och tillv\u00e4xten forts\u00e4tter, vilket inneb\u00e4r att Graphite (whisper) snart kommer att belasta v\u00e5rt diskystem mycket h\u00e5rt. Som jag n\u00e4mnde tidigare \u00e4r detta \u00f6vervakningssystem ganska m\u00e5ngsidigt tack vare komponenternas utbytbarhet. Vissa underh\u00e5ller och expanderar sin infrastruktur speciellt f\u00f6r Graphite, men vi har valt en annan v\u00e4g: att anv\u00e4nda <noindex><a rel=\"nofollow\" href=\"https:\/\/clickhouse.yandex\/\">ClickHouse<\/a><\/noindex> som lagringsl\u00f6sning f\u00f6r v\u00e5ra m\u00e4tv\u00e4rden. Denna \u00f6verg\u00e5ng \u00e4r n\u00e4stan klar, och snart kommer jag att ber\u00e4tta mer detaljerat om hur det gick till: vilka sv\u00e5righeter vi st\u00f6tte p\u00e5 och hur vi \u00f6vervann dem, hur migrationsprocessen gick till, samt beskriva de komponenter vi valde som omgivning och deras konfigurationer. \n<\/li>\n<\/ol>\n<p>\nTack f\u00f6r uppm\u00e4rksamheten! St\u00e4ll g\u00e4rna dina fr\u00e5gor om \u00e4mnet, s\u00e5 ska jag f\u00f6rs\u00f6ka svara h\u00e4r eller i kommande inl\u00e4gg. Kanske har n\u00e5gon erfarenhet av att bygga ett liknande \u00f6vervakningssystem eller att migrera till Clickhouse i en liknande situation \u2013 dela g\u00e4rna med er i kommentarerna.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47\u00d6vervakning som tj\u00e4nst: modul\u00e4rt system f\u00f6r mikrotj\u00e4nstarkitektur | ProHoster","description":"Idag, i v\u00e5rt projekt, fungerar det, f\u00f6rutom den monolitiska koden, dussintals mikrotj\u00e4nster. Varje tj\u00e4nst kr\u00e4ver \u00f6vervakning. Att g\u00f6ra detta i s\u00e5dan omfattning med DevOps-ingenj\u00f6rer \u00e4r problematiskt.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/52115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=52115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/52115\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=52115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=52115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=52115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}