{"id":32723,"date":"2019-10-31T21:48:35","date_gmt":"2019-10-31T18:48:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada\/"},"modified":"2019-10-31T21:48:35","modified_gmt":"2019-10-31T18:48:35","slug":"yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","title":{"rendered":"Yuri Bushmelev \"Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar\" \u2014 en sammanfattning av presentationen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Loggar \u00e4r en viktig del av systemet, vilket g\u00f6r det m\u00f6jligt att f\u00f6rst\u00e5 om det fungerar (eller inte fungerar) som f\u00f6rv\u00e4ntat. I en mikroservice-arkitektur blir hanteringen av loggar en separat disciplin av specialolympiaden. Vi m\u00e5ste l\u00f6sa en m\u00e4ngd fr\u00e5gor:<\/p>\n<p><\/p>\n<ul>\n<li>hur man skriver loggar fr\u00e5n applikationen;<\/li>\n<li>vart loggar ska skrivas;<\/li>\n<li>hur man levererar loggar f\u00f6r lagring och behandling;<\/li>\n<li>hur man hanterar och lagrar loggar.<\/li>\n<\/ul>\n<p><\/p>\n<p>Anv\u00e4ndningen av popul\u00e4ra containrar idag l\u00e4gger till ett extra lager av komplexitet p\u00e5 l\u00f6sa problem.<\/p>\n<p><\/p>\n<p>Det handlar just om tolkningen av Yuri Bushmelevs rapport \"Gr\u00e4skartans problematik inom insamling och leverans av loggar\" <\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"NAeedJv-S3I\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/NAeedJv-S3I\/hqdefault.jpg\" alt=\"Spela video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Den som \u00e4r intresserad, v\u00e4nligen l\u00e4s vidare.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Jag heter Yuriy Bushmelev. Jag arbetar p\u00e5 Lazada. Idag ska jag ber\u00e4tta hur vi har gjort v\u00e5ra loggar, hur vi har samlat dem och vad vi skriver i dem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/ece6053b1027ab3681022049ddcd79ea.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vart kommer vi ifr\u00e5n? Vem \u00e4r vi? Lazada \u00e4r den st\u00f6rsta onlinebutiken i sex l\u00e4nder i Syd\u00f6stra Asien. Dessa l\u00e4nder \u00e4r spridda \u00f6ver v\u00e5ra datacenter. Totalt har vi nu 4 datacenter. Varf\u00f6r \u00e4r det viktigt? F\u00f6r vissa l\u00f6sningar berodde p\u00e5 att det finns mycket svaga l\u00e4nkar mellan datacentren. Vi har en mikroservice-arkitektur. Jag blev f\u00f6rv\u00e5nad \u00f6ver att uppt\u00e4cka att vi redan har 80 mikroservicer. N\u00e4r jag b\u00f6rjade med loggfr\u00e5gan fanns det bara 20. Dessutom har vi en ganska stor m\u00e4ngd PHP-leverans som vi ocks\u00e5 m\u00e5ste leva med. Allt detta genererar f\u00f6r n\u00e4rvarande mer \u00e4n 6 miljoner meddelanden per minut i systemet totalt. N\u00e4sta kommer jag att visa hur vi hanterar detta och varf\u00f6r det \u00e4r s\u00e5.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/0ba5fcee5064865e836cefd47c40d246.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Med dessa 6 miljoner meddelanden m\u00e5ste vi p\u00e5 n\u00e5got s\u00e4tt hantera dem. Vad ska vi g\u00f6ra med dem? 6 miljoner meddelanden som m\u00e5ste:<\/p>\n<p><\/p>\n<ul>\n<li>skickas fr\u00e5n applikationen<\/li>\n<li>mottas f\u00f6r leverans<\/li>\n<li>levereras f\u00f6r analys och lagring.<\/li>\n<li>analysera<\/li>\n<li>p\u00e5 n\u00e5got s\u00e4tt lagra.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/a449062193c4b1757a61f5c92e270a74.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e4r det fanns tre miljoner meddelanden hade jag ungef\u00e4r en s\u00e5dan h\u00e4r uppsyn. Eftersom vi b\u00f6rjade med sm\u00e5 summor. Det \u00e4r klart att apploggar skrivs dit. Till exempel kunde inte ansluta till databasen, kunde ansluta till databasen men kunde inte l\u00e4sa n\u00e5got. Men f\u00f6rutom detta skriver varje mikrotj\u00e4nst ocks\u00e5 en access-logg. Varje f\u00f6rfr\u00e5gan som kommer till mikrotj\u00e4nsten hamnar i loggen. Varf\u00f6r g\u00f6r vi detta? Utvecklarna vill ha m\u00f6jlighet att sp\u00e5ra. I varje access-logg finns ett f\u00e4lt som heter traceid, vilket g\u00f6r att ett speciellt gr\u00e4nssnitt kan bryta ner hela kedjan och vackert visa sp\u00e5ret. Sp\u00e5ret visar hur f\u00f6rfr\u00e5gan har passerat, och det hj\u00e4lper v\u00e5ra utvecklare att snabbt hantera alla ok\u00e4nda problem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/e13a2d37ce57e894d023ad405a2b5200.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur lever man med detta? Nu ska jag kort g\u00e5 igenom alternativen \u2014 hur detta problem i allm\u00e4nhet l\u00f6ses. Hur man l\u00f6ser uppgiften med insamling, \u00f6verf\u00f6ring och lagring av loggar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/60af5e5db804770295741995adb37d90.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur skriver man fr\u00e5n applikationen? Det \u00e4r klart att det finns olika s\u00e4tt. I synnerhet finns det b\u00e4sta praxis, som de trendiga personerna ber\u00e4ttar f\u00f6r oss. Det finns old school i tv\u00e5 versioner, som farbr\u00f6derna ber\u00e4ttade. Det finns andra metoder. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/deab57e4ac0472a8591c0fad9e9f2910.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samma sak g\u00e4ller insamling av loggar. Alternativen f\u00f6r att l\u00f6sa just denna del \u00e4r inte s\u00e5 m\u00e5nga. Det finns lite fler \u00e4n tidigare, men fortfarande inte s\u00e5 m\u00e5nga. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/8a6004aaeb931332983a975d0fa5c1d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men n\u00e4r det kommer till leverans och efterf\u00f6ljande analys \u2014 antalet variationer b\u00f6rjar skjuta i h\u00f6jden. Jag kommer inte att beskriva varje alternativ just nu. Jag tror att de viktigaste alternativen \u00e4r k\u00e4nda f\u00f6r alla som har intresserat sig f\u00f6r \u00e4mnet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/6a0b64c7e58bc59f56aaddd27112ec51.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jag ska visa hur vi gjorde detta p\u00e5 Lazada och hur allt faktiskt b\u00f6rjade. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/20f3aa5ceea8b28733ce5399bc30f5b5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r ett \u00e5r sedan kom jag till Lazada, och jag blev skickad till ett projekt om loggar. Det var ungef\u00e4r s\u00e5 h\u00e4r. Loggen fr\u00e5n applikationen skrevs till stdout och stderr. Alla gjorde det p\u00e5 det trendiga s\u00e4ttet. Men senare sk\u00f6ts det ut fr\u00e5n standardstr\u00f6mmarna, och sedan skulle infrastruktursspecialisterna l\u00f6sa det. Mellan infrastruktursspecialister och utvecklare finns det ocks\u00e5 release-specialister som sa: \"eh... okej, l\u00e5t oss bara sl\u00e5 in dem i en fil med shell, och s\u00e5 \u00e4r det klart\". Och eftersom allt detta \u00e4r i en container, s\u00e5 blev det inkapslat direkt i sj\u00e4lva containern, mappades in i katalogen och lades dit. Jag tror att det \u00e4r ganska uppenbart f\u00f6r alla vad som blev resultatet av detta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/d92e02c18a4c683c9389321e4d5412df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss titta lite l\u00e4ngre fram. Hur vi levererade dessa loggar. N\u00e5gon valde td-agent, som egentligen \u00e4r fluentd, men inte riktigt fluentd. Jag f\u00f6rstod aldrig relationen mellan dessa tv\u00e5 projekt, men de verkar handla om samma sak. Och denna fluentd, skriven i Ruby, l\u00e4ste loggfiler, parserade dem till JSON med n\u00e5gon slags regex. Sedan skickade den dem till Kafka. Faktum \u00e4r att vi hade 4 separata \u00e4mnen i Kafka f\u00f6r varje API. Varf\u00f6r 4? F\u00f6r att det finns live, det finns staging, och eftersom det finns stdout och stderr. Utvecklarna skapar dem, och infrastructure-teamen m\u00e5ste skapa dem i Kafka. Dessutom kontrollerades Kafka av en annan avdelning. D\u00e4rf\u00f6r beh\u00f6vde vi skapa en ticket f\u00f6r att de skulle skapa 4 \u00e4mnen f\u00f6r varje API. Alla gl\u00f6mde detta. Det var verkligen kaos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/3130f9ebfda22713cffacf10db45ca89.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad gjorde vi sedan med detta? Vi skickade det till Kafka. Sedan fl\u00f6g h\u00e4lften av loggarna till Logstash. Den andra h\u00e4lften av loggarna delades. En del fl\u00f6g till en Graylog, en del till en annan Graylog. S\u00e5 i slut\u00e4ndan fl\u00f6g allt detta till en Elasticsearch-kluster. S\u00e5 hela detta kaos hamnade slutligen d\u00e4r. Man ska inte g\u00f6ra s\u00e5!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/98bf4811c102fc12fcd1114c25886b69.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00e5 h\u00e4r ser det ut om man ser p\u00e5 det fr\u00e5n ovan. Man ska inte g\u00f6ra s\u00e5! H\u00e4r \u00e4r problemen direkt markerade med siffror. Det finns faktiskt fler, men 6 \u2014 det \u00e4r verkligen problematiska, med vilka man m\u00e5ste g\u00f6ra n\u00e5got. Jag kommer att ber\u00e4tta mer om dem separat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/69f7682e6677bdda3068d6dea4db7732.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r (1,2,3) skriver vi filer och, d\u00e4rmed, finns det tre fallgropar direkt. <\/p>\n<p><\/p>\n<p>F\u00f6rsta (1) \u2014 vi m\u00e5ste skriva dem n\u00e5gonstans. Man skulle inte alltid vilja ge API:et m\u00f6jligheten att skriva direkt i filen. Det \u00e4r \u00f6nskv\u00e4rt att API:et \u00e4r isolerat i en container, och \u00e4nnu b\u00e4ttre \u2013 att den \u00e4r read-only. Jag \u00e4r systemadministrat\u00f6r, s\u00e5 jag har en lite alternativ syn p\u00e5 dessa saker.<\/p>\n<p><\/p>\n<p>Den andra punkten (2,3) - vi tar emot m\u00e5nga f\u00f6rfr\u00e5gningar i API:et. API:et skriver mycket data till fil. Filerna v\u00e4xer. Vi m\u00e5ste rotera dem. F\u00f6r annars kommer vi inte att ha tillr\u00e4ckligt med diskutrymme. Att rotera dem \u00e4r d\u00e5ligt, eftersom de g\u00f6rs med en omdirigering via shell till en katalog. Vi kan inte rotera det. Vi kan inte s\u00e4ga till applikationen att den ska \u00f6ppna omdeskriptorerna. F\u00f6r utvecklarna skulle se p\u00e5 dig som om du var idiot: \"Vilka deskriptorer? Vi skriver \u00f6verhuvudtaget till stdout.\" Infrastrukturteknikerna gjorde copytruncate i logrotate, som helt enkelt g\u00f6r en kopia av filen och trunkerar den ursprungliga. D\u00e4rf\u00f6r brukar det bli brist p\u00e5 diskutrymme mellan dessa kopieringsprocesser.<\/p>\n<p><\/p>\n<p>(4) Vi hade olika format i olika API:er. De skiljde sig lite \u00e5t, men vi beh\u00f6vde skriva olika regexp. Eftersom allt kontrollerades av Puppet, fanns det en stor bunt klasser med sina egna problem. Dessutom kunde td-agent \u00e4ta mycket minne ibland, h\u00e4nga sig, och han kunde helt enkelt l\u00e5tsas som om han arbetade, utan att g\u00f6ra n\u00e5got. Utifr\u00e5n var det om\u00f6jligt att f\u00f6rst\u00e5 att han inte gjorde n\u00e5got. I b\u00e4sta fall skulle han krascha, och n\u00e5gon skulle senare starta om honom. Mer exakt, ett larm skulle dyka upp, och n\u00e5gon skulle g\u00e5 och starta om det manuellt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/424cda2b60e9e5669b7ef2b34ca74e48.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>(6) Och den mest kaotiska delen var elasticsearch. F\u00f6r det var en gammal version. F\u00f6r vi hade inte dedikerade masters vid den tiden. Vi hade heterogena loggar, vars f\u00e4lt kunde \u00f6verlappa. Olika loggar fr\u00e5n olika applikationer kunde skrivas med samma f\u00e4ltnamn, men inneh\u00e5llet kunde vara olika. Det vill s\u00e4ga, en logg kommer med ett Integer i f\u00e4ltet, till exempel, level. En annan logg kommer med en String i f\u00e4ltet level. I avsaknad av statisk mapping f\u00e5r vi n\u00e5got fantastiskt. Om ett meddelande som \u00e4r en str\u00e4ng kommer f\u00f6rst efter indexrotationen i elasticsearch, d\u00e5 fungerar allt normalt. Men om det f\u00f6rst kommer med ett Integer, s\u00e5 kommer alla efterf\u00f6ljande meddelanden som kommer med en String helt enkelt att avvisas. F\u00f6r att f\u00e4lttypen st\u00e4mmer inte \u00f6verens.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/bc869f827bed326792857113191bb028.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi b\u00f6rjade st\u00e4lla oss dessa fr\u00e5gor. Vi best\u00e4mde oss f\u00f6r att inte leta efter skulden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/a071a4b38462f249339c988c35463639.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men vi m\u00e5ste g\u00f6ra n\u00e5got! En uppenbar sak \u00e4r att vi beh\u00f6ver uppr\u00e4tta standarder. Vi hade redan vissa standarder. Vissa inf\u00f6rde vi lite senare. Lyckligtvis hade vi redan godk\u00e4nt ett gemensamt loggformat f\u00f6r alla API:er vid det tillf\u00e4llet. Det \u00e4r specificerat direkt i standarderna f\u00f6r tj\u00e4nsternas interaktion. D\u00e4rf\u00f6r, de som vill ta emot loggar m\u00e5ste skriva dem i detta format. Om n\u00e5gon inte skriver loggar i detta format, kan vi inte ge n\u00e5gra garantier. <\/p>\n<p><\/p>\n<p>Vidare skulle vi vilja inf\u00f6ra en enhetlig standard f\u00f6r s\u00e4tt att skriva, leverera och samla loggar. Det handlar om vart man ska skriva dem och hur man ska leverera dem. Den idealiska situationen \u00e4r n\u00e4r samma bibliotek anv\u00e4nds i projekten. H\u00e4r finns ett separat loggningsbibliotek f\u00f6r Go, ett annat f\u00f6r PHP. Alla vi har \u2014 de m\u00e5ste anv\u00e4nda dem. F\u00f6r n\u00e4rvarande skulle jag s\u00e4ga att vi n\u00e5r cirka 80 % av detta. Men vissa forts\u00e4tter att \u00e4ta kaktusar.<\/p>\n<p><\/p>\n<p>Och just d\u00e4r (p\u00e5 bilden) b\u00f6rjar 'SLA f\u00f6r leverans av loggar' knappt att framtr\u00e4da. Det finns \u00e4nnu inte, men vi jobbar p\u00e5 det. F\u00f6r det \u00e4r mycket praktiskt n\u00e4r infrastrukturen s\u00e4ger att om ni skriver i ett visst format p\u00e5 en viss plats och inte mer \u00e4n N meddelanden per sekund, s\u00e5 kommer vi med viss sannolikhet att leverera det dit. Det tar bort mycket huvudv\u00e4rk. Om SLA finns, \u00e4r det helt fantastiskt!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/a887aceac13135afe90bb5f5a5ec1d26.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur b\u00f6rjade vi l\u00f6sa problemet? Den st\u00f6rsta fallgropen var med td-agent. Det var oklart vart v\u00e5ra loggar f\u00f6rsvann. Levereras de? Samlas de? Var \u00e4r de ens? D\u00e4rf\u00f6r beslutades det i f\u00f6rsta hand att byta ut td-agent. Jag har sammanst\u00e4llt n\u00e5gra alternativ till vad vi kan byta ut det mot.<\/p>\n<p><\/p>\n<p>Fluentd. F\u00f6r det f\u00f6rsta, jag har st\u00f6tt p\u00e5 det p\u00e5 mitt tidigare jobb, och det f\u00f6ll ocks\u00e5 periodiskt d\u00e4r. F\u00f6r det andra, det \u00e4r samma sak, men b\u00e4ttre anpassat. <\/p>\n<p><\/p>\n<p>Filebeat. Vad gjorde det bekv\u00e4mt f\u00f6r oss? Eftersom det \u00e4r gjort i Go, och vi har stor expertis i Go. S\u00e5ledes, om det beh\u00f6vs, kunde vi anpassa det till v\u00e5ra behov. D\u00e4rf\u00f6r valde vi inte det. F\u00f6r att det inte ens skulle finnas frestelse att b\u00f6rja skriva om det. <\/p>\n<p><\/p>\n<p>Ett uppenbart beslut f\u00f6r systemadministrat\u00f6ren \u00e4r olika systemloggar i s\u00e5dan m\u00e4ngd (syslog-ng\/rsyslog\/nxlog).<\/p>\n<p><\/p>\n<p>Eller skriva n\u00e5got eget, men det avf\u00e4rdade vi, liksom filebeat. Om man ska skriva n\u00e5got, \u00e4r det b\u00e4ttre att skriva n\u00e5got anv\u00e4ndbart f\u00f6r verksamheten. F\u00f6r att leverera loggar \u00e4r det b\u00e4ttre att v\u00e4lja n\u00e5got f\u00e4rdigt.<\/p>\n<p><\/p>\n<p>S\u00e5 valet kom i praktiken att st\u00e5 mellan syslog-ng och rsyslog. Jag lutade mig mot rsyslog helt enkelt f\u00f6r att vi redan hade klasser f\u00f6r rsyslog i Puppet, och jag hittade ingen uppenbar skillnad mellan dem. Det \u00e4r syslog h\u00e4r ocks\u00e5. Ja, n\u00e5gon har s\u00e4mre dokumentation, n\u00e5gon annan har b\u00e4ttre. Den ena kan s\u00e5, den andra p\u00e5 ett annat s\u00e4tt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/a88116711b547fa5b2b34daf72cc4220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lite om rsyslog. F\u00f6r det f\u00f6rsta \u00e4r det superbra eftersom den har m\u00e5nga moduler. Den har ett m\u00e4nniskov\u00e4nligt RainerScript (ett modernt konfigurationsspr\u00e5k). En fantastisk bonus \u00e4r att vi kunde simulera beteendet hos td-agent med inbyggda medel, och inget f\u00f6r\u00e4ndrades f\u00f6r applikationerna. Det vill s\u00e4ga att vi byter ut td-agent mot rsyslog, utan att r\u00f6ra resten. Och f\u00e5r omedelbart fungerande leverans. Dessutom, mmnormalize \u2014 det \u00e4r en fantastisk grej i rsyslog. Den till\u00e5ter att parsa loggar, men inte med Grok och regexp. Den g\u00f6r en abstrakt syntaxtr\u00e4d. Den parserar loggar ungef\u00e4r som en kompilator parserar k\u00e4llkoden. Detta g\u00f6r att det g\u00e5r v\u00e4ldigt snabbt, anv\u00e4nder lite CPU, och \u00e4r helt enkelt en riktigt cool grej. Det finns massor av andra f\u00f6rdelar. Jag kommer inte att stanna vid dem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/ca811be9f9ff318fb8c8bbf3dc45a038.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rsyslog har ocks\u00e5 en massa nackdelar. De \u00e4r ungef\u00e4r desamma som f\u00f6rdelarna. De st\u00f6rsta problemen \u00e4r att man m\u00e5ste veta hur man konfigurerar det, och man m\u00e5ste v\u00e4lja version.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/034f588e0834b1d4e4873d9c3dbd0873.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi best\u00e4mde oss f\u00f6r att skriva loggar i en unix-socket. Och inte i \/dev\/log, f\u00f6r d\u00e4r har vi en r\u00f6ra av systemloggar, d\u00e4r journald \u00e4r med i denna pipeline. S\u00e5 l\u00e5t oss skriva till en anpassad socket. Vi kopplar den till ett separat ruleset. Vi ska inte blanda ihop n\u00e5got. Allt blir transparent och tydligt. S\u00e5 gjorde vi. Katalogen med dessa sockets \u00e4r standardiserad och passeras till alla containrar. Containrarna kan se den socket de beh\u00f6ver, \u00f6ppna och skriva till den. <\/p>\n<p><\/p>\n<p>Varf\u00f6r inte en fil? F\u00f6r att alla har l\u00e4st <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">artikeln om Badushchka<\/a><\/noindex>, som f\u00f6rs\u00f6kte passera en fil till docker, och uppt\u00e4ckte att efter en omstart av rsyslog f\u00f6r\u00e4ndras filbeskrivaren, och docker f\u00f6rlorar den filen. Den h\u00e5ller n\u00e5got annat \u00f6ppet, men inte den socket dit vi skriver. Vi best\u00e4mde oss f\u00f6r att vi skulle l\u00f6sa detta problem, och samtidigt \u00e5ka runt blockeringen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/78db15581a68ce16d11f5ebe7e6fe04e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rsyslog utf\u00f6r \u00e5tg\u00e4rderna som anges p\u00e5 sliden och skickar loggarna antingen till relay eller till Kafka. Kafka motsvarar det gamla s\u00e4ttet. Relay \u2014 jag f\u00f6rs\u00f6kte anv\u00e4nda ren rsyslog f\u00f6r loggleverans. Utan meddelandek\u00f6, med vanliga medel fr\u00e5n rsyslog. I princip fungerar det.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/e61a25005ecbdc86d9de3215ee6fb97e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men det finns nyanser med hur man sedan stoppar dem i denna del (Logstash\/Graylog\/ES). Denna del (rsyslog-rsyslog) anv\u00e4nds mellan datacenter. H\u00e4r \u00e4r en komprimerad tcp-l\u00e4nk som sparar bandbredd och \u00f6kar sannolikheten att vi f\u00e5r loggar fr\u00e5n ett annat datacenter under f\u00f6rh\u00e5llanden n\u00e4r kanalen \u00e4r \u00f6verbelastad. F\u00f6r vi har Indonesien, d\u00e4r allt \u00e4r d\u00e5ligt. D\u00e4r \u00e4r detta ett st\u00e4ndigt problem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/7509ba360be2db4dec0c8679225d285f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi funderade p\u00e5 hur vi faktiskt kan \u00f6vervaka med vilken sannolikhet loggarna vi skrivit fr\u00e5n applikationen n\u00e5r fram till slutet. Vi besl\u00f6t oss f\u00f6r att inf\u00f6ra metrik. Rsyslog har sin egen statistikinsamlingsmodul som har olika r\u00e4knare. Till exempel kan den visa storleken p\u00e5 k\u00f6n, eller hur m\u00e5nga meddelanden som kommit in vid en viss \u00e5tg\u00e4rd. Av dessa kan man f\u00e5 fram n\u00e5got. Dessutom har den anpassade r\u00e4knare som kan konfigureras, och den kommer att visa exempelvis antalet meddelanden som ett visst API skrivit. Vidare skrev jag rsyslog_exporter i Python, och vi skickade allt detta till Prometheus och byggde grafer. Vi hade g\u00e4rna velat ha Graylog-metrik, men vi har inte hunnit konfigurera dem \u00e4nnu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/ef9bd61fc43e056b4a56240c85e7fd20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vilka problem uppstod? Problem uppstod d\u00e5 vi ov\u00e4ntat uppt\u00e4ckte att v\u00e5ra Live API skickade 50 000 meddelanden per sekund. Det \u00e4r bara Live API utan staging. Och Graylog visar oss bara 12 000 meddelanden per sekund. Och d\u00e5 uppstod den rimliga fr\u00e5gan, var \u00e4r resten? Fr\u00e5n detta drog vi slutsatsen att Graylog helt enkelt inte klarade av det. Vi kollade, och faktiskt, Graylog med Elasticsearch hanterade inte denna belastning.<\/p>\n<p><\/p>\n<p>Vidare, andra insikter som vi gjorde under processen.<\/p>\n<p><\/p>\n<p>Inl\u00e4gg i socket blockeras. Hur h\u00e4nde detta? N\u00e4r jag anv\u00e4nde rsyslog f\u00f6r leverans, s\u00e5 brast kanalen mellan datacentren vid ett tillf\u00e4lle. Leveransen stannade p\u00e5 ett st\u00e4lle, leveransen stannade p\u00e5 ett annat st\u00e4lle. Allt detta n\u00e5dde maskinen med API:erna, som skriver i rsyslog-socket. D\u00e4r fylldes k\u00f6n. Sedan fylldes k\u00f6n f\u00f6r skrivning till unix socket, som som standard har 128 paket. Och n\u00e4sta write() i applikationen blockeras. N\u00e4r vi tittade i biblioteket som vi anv\u00e4nder i v\u00e5ra Go-applikationer stod det att skrivning till socket sker i icke-blockerande l\u00e4ge. Vi var \u00f6vertygade om att ingenting blockeras. Eftersom vi l\u00e4ste. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">artikeln om Badushchka<\/a><\/noindex>, som skrev om detta. Men det finns en punkt. Rundt detta anrop var det ocks\u00e5 en o\u00e4ndlig slinga d\u00e4r vi st\u00e4ndigt f\u00f6rs\u00f6kte trycka meddelandet i socketen. Det m\u00e4rkte vi inte. Vi fick skriva om biblioteket. Sedan dess har det f\u00f6r\u00e4ndrats flera g\u00e5nger, men nu har vi blivit av med l\u00e5sningar i alla delsystem. D\u00e4rf\u00f6r kan vi stoppa rsyslog utan att n\u00e5got kommer att falla.<\/p>\n<p><\/p>\n<p>Vi m\u00e5ste \u00f6vervaka storleken p\u00e5 k\u00f6erna, vilket hj\u00e4lper oss att undvika dessa problem. F\u00f6r det f\u00f6rsta kan vi \u00f6vervaka n\u00e4r vi b\u00f6rjar f\u00f6rlora meddelanden. F\u00f6r det andra kan vi \u00f6vervaka att vi har problem med leveransen i allm\u00e4nhet.<\/p>\n<p><\/p>\n<p>Och ytterligare ett obehagligt problem \u2013 f\u00f6rst\u00e4rkning med 10 g\u00e5nger i mikrotj\u00e4narkitekturen \u2013 det \u00e4r extremt enkelt. Vi har inte s\u00e5 m\u00e5nga inkommande f\u00f6rfr\u00e5gningar, men p\u00e5 grund av grafen som dessa meddelanden senare l\u00f6per p\u00e5, p\u00e5 grund av access-loggar, \u00f6kar vi verkligen belastningen p\u00e5 loggarna med ungef\u00e4r tio g\u00e5nger. Jag har tyv\u00e4rr inte haft tid att r\u00e4kna ut de exakta siffrorna, men mikrotj\u00e4nster \u00e4r s\u00e5. Det \u00e4r n\u00e5got man m\u00e5ste ha i \u00e5tanke. Just nu \u00e4r loggsamlingssystemet det mest belastade i Lazada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/d76c6d91613ff77c41b8985cee83218f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur l\u00f6ser man problemet med elasticsearch? Om man snabbt beh\u00f6ver f\u00e5 loggar p\u00e5 ett st\u00e4lle, s\u00e5 att man inte beh\u00f6ver springa runt p\u00e5 alla maskiner och samla dem d\u00e4r, anv\u00e4nd en filbaserad lagring. Det fungerar garanterat. Det g\u00f6rs fr\u00e5n vilken server som helst. Man beh\u00f6ver bara stoppa dit diskar och s\u00e4tta upp syslog. Efter det har ni garanterat alla loggar p\u00e5 ett st\u00e4lle. Sedan kan man i lugn och ro konfigurera elasticsearch, graylog eller n\u00e5got annat. Men ni kommer redan att ha alla loggar, och dessutom kan ni lagra dem s\u00e5 l\u00e4nge lagringskapaciteten r\u00e4cker.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/571297f25de76958769f3a4b9bfbf5b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vid tiden f\u00f6r min presentation s\u00e5g schemat ut s\u00e5 h\u00e4r. Vi har praktiskt taget slutat skriva till fil. Nu kommer vi f\u00f6rmodligen att st\u00e4nga av de sista resterna. P\u00e5 de lokala maskiner d\u00e4r API:erna k\u00f6rs kommer vi att sluta skriva till filer. F\u00f6r det f\u00f6rsta finns det en filbaserad lagringsl\u00f6sning som fungerar mycket bra. F\u00f6r det andra tar det slut p\u00e5 utrymme p\u00e5 dessa maskiner st\u00e4ndigt, och vi beh\u00f6ver \u00f6vervaka det hela tiden.<\/p>\n<p><\/p>\n<p>Den h\u00e4r delen med Logstash och Graylog \u00e4r verkligen besv\u00e4rlig. D\u00e4rf\u00f6r m\u00e5ste vi bli av med den. Vi m\u00e5ste v\u00e4lja n\u00e5got av det.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/4a285577708aa1c55c16a72364fa8072.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi har best\u00e4mt oss f\u00f6r att avveckla Logstash och Kibana. F\u00f6r vi har en s\u00e4kerhetsavdelning. Vad har det med saken att g\u00f6ra? Sambandet \u00e4r att Kibana utan X-Pack och utan Shield inte till\u00e5ter \u00e5tkomstkontroll f\u00f6r loggar. D\u00e4rf\u00f6r valde vi Graylog. Det \u00e4r inte min favorit, men det fungerar. Vi k\u00f6pte ny h\u00e5rdvara, installerade en ny version av Graylog och flyttade alla loggar med strikta format till en separat Graylog. Vi har l\u00f6st problemet med olika typer av identiska f\u00e4lt organisatoriskt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/91b9fdada2648ae1caec05169b11926a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad ing\u00e5r egentligen i den nya Graylog? Vi skrev helt enkelt allt i Docker. Vi tog en massa servrar, distribuerade tre instanser av Kafka, 7 servrar av Graylog version 2.3 (eftersom vi ville ha Elasticsearch version 5). Allt detta k\u00f6rdes p\u00e5 RAID med HDD. Vi s\u00e5g en indexeringshastighet p\u00e5 upp till 100 000 meddelanden per sekund. Vi s\u00e5g siffran att 140 terabyte data per vecka. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/05f9b3c06739548f092bbe271bf8fc54.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och s\u00e5 kom motg\u00e5ngarna igen! Vi har tv\u00e5 utf\u00f6rs\u00e4ljningar p\u00e5 g\u00e5ng. Vi har flyttat \u00f6ver 6 miljoner meddelanden. V\u00e5r Graylog hinner inte med. Vi m\u00e5ste p\u00e5 n\u00e5got s\u00e4tt \u00f6verleva igen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/424aa2febc2fd903aabee4aeabb64010.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi \u00f6verlevde p\u00e5 f\u00f6ljande s\u00e4tt. Vi lade till n\u00e5gra fler servrar och SSD. F\u00f6r tillf\u00e4llet lever vi p\u00e5 det h\u00e4r s\u00e4ttet. Nu bearbetar vi redan 160 000 meddelanden per sekund. Vi har inte n\u00e5tt gr\u00e4nsen \u00e4n, s\u00e5 det \u00e4r oklart hur mycket vi verkligen kan dra fr\u00e5n detta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/17d84fa7de5403551e55f42345e62a1a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00e5 h\u00e4r ser v\u00e5ra framtidsplaner ut. Av dem \u00e4r det sannolikt mest viktiga, h\u00f6g tillg\u00e4nglighet. Vi har inte det \u00e4nnu. N\u00e5gra maskiner \u00e4r konfigurerade lika, men allt g\u00e5r fortfarande via en maskin. Vi m\u00e5ste ta oss tid att st\u00e4lla in failover mellan dem.<\/p>\n<p><\/p>\n<p>Samla in metrik fr\u00e5n Graylog.<\/p>\n<p><\/p>\n<p>S\u00e4tta upp en rate limit s\u00e5 att en \u00f6verbelastad API inte d\u00f6dar v\u00e5r bandbredd och allt annat.<\/p>\n<p><\/p>\n<p>Och slutligen, skriva ett SLA med utvecklarna som anger hur mycket vi kan hantera. Om ni skriver mer, s\u00e5 beklagar jag.<\/p>\n<p><\/p>\n<p>Och skriva dokumentation.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev &quot;Kartl\u00e4ggning av spikarna p\u00e5 f\u00e4lten f\u00f6r insamling och transporter av stockar&quot; \u2014 en sammanfattning av presentationen\" src=\"\/wp-content\/uploads\/2019\/04\/4a78e2834d5877f8bf17d77a44000c22.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sammanfattningsvis, resultaten av allt vi har g\u00e5tt igenom. F\u00f6r det f\u00f6rsta, standarder. F\u00f6r det andra, syslog - en t\u00e5rta. F\u00f6r det tredje, rsyslog fungerar precis s\u00e5 h\u00e4r som det st\u00e5r p\u00e5 sliden. L\u00e5t oss g\u00e5 vidare till fr\u00e5gorna.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5gor<\/strong>.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Varf\u00f6r beslutade ni att inte anv\u00e4nda\u2026 (filebeat?)<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Vi m\u00e5ste skriva till en fil. Det ville jag verkligen undvika. N\u00e4r du har en API som skriver tusentals meddelanden per sekund, \u00e4ven om du roterar varje timme, \u00e4r det fortfarande inte en l\u00f6sning. Du kan skriva till en pipe. P\u00e5 vilket utvecklarna fr\u00e5gade: \"Vad h\u00e4nder om processen vi skriver till kraschar\"? Jag kunde helt enkelt inte hitta ett svar och sa: \"Okej, l\u00e5t oss inte g\u00f6ra s\u00e5.\"<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Varf\u00f6r skriver ni inte loggar direkt i HDFS?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Det \u00e4r n\u00e4sta steg. Vi t\u00e4nkte p\u00e5 det i b\u00f6rjan, men eftersom vi f\u00f6r n\u00e4rvarande inte har resurser att arbeta med det s\u00e5 ligger det som en l\u00e5ngsiktig l\u00f6sning.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Kolumnformatet skulle vara mer l\u00e4mpligt.<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Jag f\u00f6rst\u00e5r allt. Vi \u00e4r \"f\u00f6r\" med b\u00e5da h\u00e4nderna. <\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Ni skriver i rsyslog. D\u00e4r kan man anv\u00e4nda b\u00e5de TCP och UDP. Men om ni anv\u00e4nder UDP, hur garanterar ni d\u00e5 leveransen?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Det finns tv\u00e5 aspekter. F\u00f6r det f\u00f6rsta, jag s\u00e4ger alltid till alla att vi inte garanterar loggar levereras. F\u00f6r n\u00e4r utvecklarna kommer och s\u00e4ger: 'L\u00e5t oss b\u00f6rja skriva finansiella data dit, och ni kommer att lagra dem n\u00e5gonstans i fall n\u00e5got h\u00e4nder', svarar vi: 'Utm\u00e4rkt! L\u00e5t oss blockera skrivningen till socket och g\u00f6ra detta i transaktioner s\u00e5 att ni garanterat skriver till v\u00e5r socket och ser till att vi f\u00e5r det fr\u00e5n er sida.' Just i det \u00f6gonblicket blir det pl\u00f6tsligt mindre intressant f\u00f6r dem. Och eftersom det inte \u00e4r intressant, varf\u00f6r skulle vi d\u00e5 ha n\u00e5gra fr\u00e5gor? Om ni inte vill garantera skrivning i socket, varf\u00f6r ska vi garantera leverans? Vi g\u00f6r v\u00e5rt b\u00e4sta. Vi f\u00f6rs\u00f6ker verkligen leverera s\u00e5 mycket som m\u00f6jligt och s\u00e5 bra som m\u00f6jligt, men vi ger inte 100% garanti. S\u00e5 f\u00f6r detta, skriv inte finansiella data d\u00e4r. F\u00f6r det finns databaser med transaktioner.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: N\u00e4r API:t genererar ett meddelande i loggen och \u00f6verl\u00e4mnar kontrollen till mikrotj\u00e4nsterna, har ni d\u00e5 st\u00f6tt p\u00e5 problem med att meddelanden fr\u00e5n olika mikrotj\u00e4nster kommer i fel ordning? Detta kan leda till f\u00f6rvirring.<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Det \u00e4r normalt att de kommer i olika ordningar. Man m\u00e5ste vara beredd p\u00e5 det. Eftersom vilken n\u00e4tverksleverans som helst garanterar inte ordningen, eller s\u00e5 m\u00e5ste man avs\u00e4tta speciella resurser f\u00f6r det. Om vi tar filsystem, s\u00e5 sparar varje API loggar i sin egen fil. R\u00e4ttare sagt, rsyslog sorterar dem i mappar. Varje API har sina egna loggar, som man kan g\u00e5 till och se, och sedan kan man matcha dem efter tidsst\u00e4mpel i den loggen. Om de tittar i Graylog, s\u00e5 sorteras det d\u00e4r efter tidsst\u00e4mpel. Allt kommer att se bra ut d\u00e4r.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Tidsst\u00e4mpeln kan skilja sig med millisekunder.<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Tidsst\u00e4mpeln genereras av API:t sj\u00e4lvt. Det \u00e4r egentligen hela grejen. Vi har NTP. API:t genererar tidsst\u00e4mpeln redan i meddelandet. Det \u00e4r inte rsyslog som l\u00e4gger till den.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Det \u00e4r inte helt klart hur interaktionen mellan datacentren fungerar. Inom datacentret \u00e4r det klart hur loggarna samlades och bearbetades. Hur g\u00e5r interaktionen mellan datacentren till? Eller lever varje datacenter sitt eget liv?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: N\u00e4stan. Vi har varje land i ett specifikt datacenter. Just nu har vi inget utspritt system, s\u00e5 ett land \u00e4r inte placerat i olika datacenter. S\u00e5 det beh\u00f6ver inte kombineras. Inom varje center finns det en Log Relay. Det \u00e4r en Rsyslog-server. Faktiskt finns det tv\u00e5 hanteringsmaskiner. De \u00e4r konfigurerade p\u00e5 samma s\u00e4tt. Men just nu g\u00e5r bara trafiken genom en av dem. Den aggregaterar alla loggar. Den har en disk-k\u00f6 f\u00f6r s\u00e4kerhets skull. Den komprimerar loggarna och skickar dem till det centrala datacentret (i Singapore), d\u00e4r de sedan skickas till Graylog. Och i varje datacenter finns sin egen fil-lagring. Om vi f\u00f6rlorar kontakten har vi alla loggar d\u00e4r. De stannar d\u00e4r. De kommer att sparas.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: F\u00e5r du loggar d\u00e4rifr\u00e5n vid onormala situationer?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Man kan g\u00e5 dit (till fil-lagringen) och kolla.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Hur \u00f6vervakar ni att ni inte f\u00f6rlorar loggar?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Vi f\u00f6rlorar dem faktiskt, och vi \u00f6vervakar det. \u00d6vervakningen startade f\u00f6r en m\u00e5nad sedan. I biblioteket som anv\u00e4nds av Go API finns det m\u00e4tv\u00e4rden. Den kan r\u00e4kna hur m\u00e5nga g\u00e5nger den inte kunde skriva till socketen. Just nu finns det en smart heuristik. Det finns en buffert. Den f\u00f6rs\u00f6ker skriva meddelandet fr\u00e5n den till socketen. Om bufferten blir full b\u00f6rjar den droppa dem. Och r\u00e4knar hur m\u00e5nga den har droppat. Om r\u00e4knarna b\u00f6rjar bli fulla f\u00e5r vi veta det. De \u00e5ker nu ocks\u00e5 till Prometheus, och i Grafana kan man se grafer. Man kan st\u00e4lla in aviseringar. Men \u00e4n s\u00e5 l\u00e4nge \u00e4r det oklart vem man ska skicka dem till.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: I Elasticsearch lagrar ni loggar med replikering. Hur m\u00e5nga repliker har ni?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: En replik.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Det \u00e4r endast en replik?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Det \u00e4r en master och en replik. Data lagras i tv\u00e5 exemplar.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Har ni justerat storleken p\u00e5 rsyslog-bufferten p\u00e5 n\u00e5got s\u00e4tt? <\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Vi skriver datagram till en anpassad unix socket. Detta begr\u00e4nsar oss till 128 kilobyte. Vi kan inte skriva mer \u00e4n s\u00e5. Vi har specificerat detta i standarden. Den som vill lagra data skriver 128 kilobyte. Biblioteken klipper faktiskt och s\u00e4tter en flagga f\u00f6r att ange att meddelandet har klippts. I v\u00e5r standard f\u00f6r meddelandet finns det ett speciellt f\u00e4lt som visar om det har klippts vid skrivning eller inte. S\u00e5 vi har m\u00f6jlighet att sp\u00e5ra den aspekten ocks\u00e5.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Skriver du trasig JSON? <\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Trasig JSON kommer att kasseras antingen under relay, eftersom paketet \u00e4r f\u00f6r stort. Eller s\u00e5 kommer Graylog att kassera det eftersom den inte kan parsa JSON. Men det finns nyanser som beh\u00f6ver \u00e5tg\u00e4rdas, och de \u00e4r mestadels kopplade till rsyslog. Jag har redan fyllt i n\u00e5gra problem d\u00e4r som fortfarande beh\u00f6ver arbete.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Varf\u00f6r Kafka? Har du provat RabbitMQ? Fungerar inte Graylog under s\u00e5dana belastningar?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Vi f\u00e5r inte det att fungera med Graylog. Men Graylog fungerar f\u00f6r oss. Det \u00e4r verkligen problematiskt. Det \u00e4r en speciell typ av sak. Och i sj\u00e4lva verket beh\u00f6vs den inte. Jag skulle f\u00f6redra att skriva direkt fr\u00e5n rsyslog till elasticsearch och sedan titta p\u00e5 Kibana. Men vi beh\u00f6ver klara upp fr\u00e5gan med s\u00e4kerhetsansvariga. Det \u00e4r ett m\u00f6jligt utvecklingsalternativ f\u00f6r oss, n\u00e4r vi kastar bort Graylog och b\u00f6rjar anv\u00e4nda Kibana. Det finns ingen mening med att anv\u00e4nda Logstash. F\u00f6r jag kan g\u00f6ra allt detsamma med rsyslog. Och den har en modul f\u00f6r att skriva till elasticsearch. Med Graylog f\u00f6rs\u00f6ker vi p\u00e5 n\u00e5got s\u00e4tt klara oss. Vi har till och med optimerat den lite. Men det finns fortfarande utrymme f\u00f6r f\u00f6rb\u00e4ttringar d\u00e4r.<\/p>\n<p><\/p>\n<p>Om Kafka. Det har historiskt sett blivit s\u00e5. N\u00e4r jag kom, fanns den redan, och loggar skrevs redan till den. Vi installerade bara v\u00e5r kluster och flyttade loggarna dit. Vi hanterar den, vi vet hur den m\u00e5r. N\u00e4r det g\u00e4ller RabbitMQ\u2026 det fungerar inte riktigt f\u00f6r oss. Men RabbitMQ fungerar f\u00f6r oss. Vi har det i produktion och hade problem med det. Nu skulle vi ha fixat det innan f\u00f6rs\u00e4ljningen, och det b\u00f6rjade fungera ordentligt. Men innan det var jag inte redo att lansera det i produktion. Det finns ytterligare en punkt. Graylog kan l\u00e4sa version AMQP 0.9, medan rsyslog kan skriva version AMQP 1.0. Det finns inget l\u00f6sning som kan b\u00e5de och. Antingen det ena eller det andra. S\u00e5 just nu \u00e4r det bara Kafka. Men d\u00e4r finns ocks\u00e5 sina nuanser. F\u00f6r omkafka av den versionen av rsyslog som vi anv\u00e4nder kan f\u00f6rlora hela meddelandebufferten som den har f\u00e5tt fr\u00e5n rsyslog. F\u00f6r tillf\u00e4llet f\u00e5r vi leva med det. <\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Anv\u00e4nder ni Kafka f\u00f6r att den redan fanns hos er? Anv\u00e4nds den inte till n\u00e5gra andra syften?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Kafka som fanns, anv\u00e4nds av Data Science-teamet. Det \u00e4r ett helt eget projekt som jag tyv\u00e4rr inte kan s\u00e4ga n\u00e5got om. Jag \u00e4r inte insatt. Den var under Data Science-teamets ansvar. N\u00e4r loggarna startades s\u00e5 beslutades det att anv\u00e4nda den f\u00f6r att inte beh\u00f6va installera en egen. Nu har vi uppdaterat Graylog, och vi har f\u00f6rlorat kompatibiliteten eftersom det \u00e4r en gammal version av Kafka. Vi var tvungna att skapa v\u00e5r egen. Samtidigt blev vi av med de fyra \u00e4mnena f\u00f6r varje API. Vi gjorde ett brett \u00e4mne f\u00f6r alla live, ett brett \u00e4mne f\u00f6r alla staging och skickade allt dit. Graylog extraherar allt detta parallellt.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: Varf\u00f6r beh\u00f6vs detta trixande med sockets? Har ni f\u00f6rs\u00f6kt anv\u00e4nda syslog-loggdrivrutinen f\u00f6r containrar?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Vid den tidpunkten n\u00e4r vi st\u00e4llde oss fr\u00e5gan var v\u00e5r relation till Docker anstr\u00e4ngd. Det var Docker 1.0 eller 0.9. Docker var i sig sj\u00e4lv m\u00e4rkligt. F\u00f6r det andra, om man dessutom skulle f\u00e5 in loggar... Jag har en obekr\u00e4ftad misstanke om att den sl\u00e4pper igenom alla loggar via Docker-demonen. Om ett API f\u00e5r problem st\u00f6tter de andra API:erna p\u00e5 att de inte kan skicka stdout och stderr. Jag vet inte vart detta leder. Jag har en k\u00e4nslom\u00e4ssig misstanke om att vi inte borde anv\u00e4nda Docker-syslog-drivrutinen just h\u00e4r. V\u00e5r avdelning f\u00f6r funktionell testning har sin egna lille Graylog-kluster med loggar. De anv\u00e4nder Docker-loggdrivrutiner och de verkar ha det ganska bra. Men de skriver direkt till Graylog i GELF-format. Vid den tidpunkten n\u00e4r vi startade allt detta beh\u00f6vde vi att det helt enkelt skulle fungera. Kanske senare, n\u00e4r n\u00e5gon kommer och s\u00e4ger att det har fungerat bra i hundra \u00e5r, kommer vi att prova.<\/p>\n<p><\/p>\n<p><strong>Fr\u00e5ga<\/strong>: G\u00f6r ni leverans mellan datacentren med rsyslog? Varf\u00f6r inte med Kafka?<\/p>\n<p><\/p>\n<p><strong>Svar<\/strong>: Vi g\u00f6r faktiskt b\u00e5de och. Av tv\u00e5 sk\u00e4l. Om kanalen \u00e4r helt f\u00f6rst\u00f6rd g\u00e5r inte ens alla loggar i komprimerad form igenom den. Och Kafka till\u00e5ter oss att f\u00f6rlora dem under processen. P\u00e5 s\u00e5 s\u00e4tt slipper vi fastna i dessa loggar. I det h\u00e4r fallet anv\u00e4nder vi Kafka direkt. Om vi har en bra kanal och vill frig\u00f6ra den anv\u00e4nder vi rsyslog. Men man kan faktiskt konfigurera det s\u00e5 att det sj\u00e4lv sl\u00e4pper det som inte g\u00e5r igenom. F\u00f6r tillf\u00e4llet anv\u00e4nder vi p\u00e5 vissa st\u00e4llen leverans med rsyslog direkt och p\u00e5 andra st\u00e4llen Kafka.<\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/450098\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b. \u041d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043a\u0443\u0447\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432: \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f; \u043a\u0443\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438; \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u043e\u0433\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438; \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043d\u044b\u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24507,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32723","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b.\" \/>\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\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada\" \/>\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\u042e\u0440\u0438\u0439 \u0411\u0443\u0448\u043c\u0435\u043b\u0435\u0432 \u00ab\u041a\u0430\u0440\u0442\u0430 \u0433\u0440\u0430\u0431\u043b\u0435\u0439 \u043d\u0430 \u043f\u043e\u043b\u0435 \u0441\u0431\u043e\u0440\u0430 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043b\u043e\u0433\u043e\u0432\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada\" \/>\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-31T18:48:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:35+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\udd47Juri Bushmelev \"Kartl\u00e4ggning av problemomr\u00e5den f\u00f6r insamling och leverans av loggar\" \u2013 tolkning av f\u00f6redrag | ProHoster","description":"Loggar \u00e4r en viktig del av systemet som g\u00f6r att vi kan f\u00f6rst\u00e5 om det fungerar (eller inte fungerar) som f\u00f6rv\u00e4ntat. I en mikrotj\u00e4nstarkitektur blir arbetet med loggar en separat disciplin f\u00f6r en speciell olympiad.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","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\u042e\u0440\u0438\u0439 \u0411\u0443\u0448\u043c\u0435\u043b\u0435\u0432 \u00ab\u041a\u0430\u0440\u0442\u0430 \u0433\u0440\u0430\u0431\u043b\u0435\u0439 \u043d\u0430 \u043f\u043e\u043b\u0435 \u0441\u0431\u043e\u0440\u0430 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043b\u043e\u0433\u043e\u0432\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 | ProHoster","og:description":"\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","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-31T18:48:35+00:00","article:modified_time":"2019-10-31T18:48:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32723","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-21 12:16:55","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:53:25","updated":"2026-01-21 12:16:55","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\/32723","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=32723"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32723\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24507"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=32723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=32723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=32723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}