{"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\/et\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","title":{"rendered":"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Logid on s\u00fcsteemi oluline osa, mis aitab m\u00f5ista, kas see t\u00f6\u00f6tab (v\u00f5i ei t\u00f6\u00f6ta) nagu oodatud. Mikroteenuste arhitektuuri tingimustes muutub logidega tegelemine iseseiseks distsipliiniks, millel on oma ametlik ol\u00fcmpia. Peame lahendama hulga k\u00fcsimusi:<\/p>\n<p><\/p>\n<ul>\n<li>kuidas kirjutada logisid rakendusest;<\/li>\n<li>kuhu kirjutada logisid;<\/li>\n<li>kuidas edastada logisid salvestamiseks ja t\u00f6\u00f6tlemiseks;<\/li>\n<li>kuidas logisid t\u00f6\u00f6delda ja salvestada.<\/li>\n<\/ul>\n<p><\/p>\n<p>Kasutatavate populaarsete konteineritehnoloogiate ilmumine lisab lahenduse leevendamisele veelgi rohkem komponente.<\/p>\n<p><\/p>\n<p>T\u00e4pselt sellest r\u00e4\u00e4gib Jurij Bu\u0161melevi aruanne \u201eLogide kogumise ja edastamise rikkaused\u201c <\/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=\"Vaata videot\" 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>Huvitav, palun vaata edasi.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Mina olen Juri Bushmlev. T\u00f6\u00f6tab Lazadas. T\u00e4na r\u00e4\u00e4gin, kuidas me oma logisid koostasime, kuidas me neid kogusime ja mida me sinna kirjutame. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/ece6053b1027ab3681022049ddcd79ea.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kust me oleme? Kes me oleme? Lazada on number 1 e-poe platvorm kuues Kagu-Aasia riigis. K\u00f5ik need riigid on jaotatud meie andmekeskuste vahel. Praegu on meil kokku 4 andmekeskust. Miks see on oluline? Sest m\u00f5ned lahendused olid tingitud sellest, et andmekeskuste vahel on v\u00e4ga n\u00f5rk \u00fchendus. Meil on mikroteenuste arhitektuur. Olles \u00fcllatunud, avastasin, et meil on juba 80 mikroteenust. Kui ma logide \u00fclesande alustasin, oli neid ainult 20. Lisaks on meil suur osa PHP p\u00e4randist, millega tuleb ka leppida. K\u00f5ik see genereerib praeguseks rohkem kui 6 miljonit teadet minutis kogu s\u00fcsteemi kohta. Edasi n\u00e4itan, kuidas me sellega elama p\u00fc\u00fcame ja miks see on nii.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/0ba5fcee5064865e836cefd47c40d246.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Neid 6 miljonit teadet tuleb kuidagi hallata. Mida me nendega peame tegema? 6 miljonit teadet, mille tuleb:<\/p>\n<p><\/p>\n<ul>\n<li>saata rakendusest<\/li>\n<li>vastu v\u00f5tta edastamiseks<\/li>\n<li>edastada anal\u00fc\u00fcsiks ja salvestamiseks.<\/li>\n<li>anal\u00fc\u00fcsida<\/li>\n<li>kuidagi salvestada.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/a449062193c4b1757a61f5c92e270a74.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui kolmes miljonis teadet oli, oli mu n\u00e4gu umbes selline. Sest alustasime mingitest tillukestest numbritest. On selge, et sinna kirjutatakse rakenduste logisid. N\u00e4iteks, ei saanud andmebaasiga \u00fchendada, sain andmebaasiga \u00fchendada, kuid ei saanud midagi lugeda. Kuid lisaks sellele kirjutab iga meie mikroteenus ka juurdep\u00e4\u00e4sulogi. Iga p\u00e4ring, mis j\u00f5uab mikroteenusesse, langeb logisse. Miks me seda teeme? Arendajad soovivad j\u00e4lgimise v\u00f5imalust. Igas juurdep\u00e4\u00e4sulogis on v\u00e4ljakutset ideaal tunnus, mille kaudu eriline liides rollib kogu ahelat ja n\u00e4itab j\u00e4lgimist. J\u00e4lgimine n\u00e4itab, kuidas p\u00e4ring liikuda, ja see aitab meie arendajatel kiiresti toime tulla igasuguste tuvastamata asjaoludega.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/e13a2d37ce57e894d023ad405a2b5200.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas sellega elada? N\u00fc\u00fcd r\u00e4\u00e4gin l\u00fchidalt valikutest \u2014 kuidas see probleem \u00fcldiselt lahendatakse. Kuidas lahendada logide kogumise, edastamise ja salvestamise \u00fclesanne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/60af5e5db804770295741995adb37d90.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas kirjutada rakendusest? Selge, et on erinevaid viise. Eelk\u00f5ige on olemas parim praktika, nagu moodne rahvas \u00fctleb. On ka vana kool mitmesugustes vormides, nagu vanaisad r\u00e4\u00e4kisid. On ka teisi viise. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/deab57e4ac0472a8591c0fad9e9f2910.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Logide kogumise osas on olukord umbes sama. Selle konkreetse osa lahendamiseks ei ole palju variantsioonide. Need on ju hakanud rohkemaks saama, kuid ikka veel on neid v\u00e4he. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/8a6004aaeb931332983a975d0fa5c1d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid edastamise ja edasise anal\u00fc\u00fcsi osas -- variantide arv hakkab plahvatama. Ma ei hakka n\u00fc\u00fcd iga varianti kirjeldama. Arvan, et p\u00f5hivariandid on k\u00f5igile tuttavad, kes on selle temaatikaga kursis.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/6a0b64c7e58bc59f56aaddd27112ec51.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klassides n\u00e4itan, kuidas me Lazadas seda teostasime ja kuidas k\u00f5ik see algas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/20f3aa5ceea8b28733ce5399bc30f5b5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aasta tagasi tulin Lazadasse ja mind saadeti logide projekti peale. Seal oli olukord umbes selline. Log rakendusest kirjutati stdout- ja stderr-isse. K\u00f5ik l\u00e4ks moodsa moe j\u00e4rgi. Kuid edaspidi viskavad arendajad selle standardvoogudest v\u00e4lja, ja edaspidi saavad infrastruktuuri spetsialistid sellega hakkama. Infrastruktuuri spetsialistide ja arendajate vahel on veel vabatahtlikud, kes \u00fctlesid: \"\u00f6\u00f6... noh, laske meil lihtsalt see faili pakkida shelliga ja k\u00f5ik\". Kuna see k\u00f5ik on konteineris, siis pakiti see otse konteinerisse, ning kaust suunati sisse ja pandi sinna. Usun, et k\u00f5igile on enam-v\u00e4hem selge, mis sellest v\u00e4lja tuli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/d92e02c18a4c683c9389321e4d5412df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vaadakem n\u00fc\u00fcd natuke edasi, kuidas me neid logisid edastasime. Keegi valis td-agendi, mis tegelikult on fluentd, kuid ei ole p\u00e4ris fluentd. Ma ei saanud aru, mis suhe nende kahe projekti vahel on, kuid nad paistavad tegelevat sama asjaga. Ja see fluentd, mis on kirjutatud Rubys, luges logifailid, parsis need JSON-iks mingite regulaarsete v\u00e4ljendite kaudu. Siis saatis need Kafka'sse. Samuti oli ipi kohta 4 eraldi teemat. Miks 4? Sest on live, on testimisruum, ja seet\u00f5ttu on stdout ja stderr. Arendajad genereerivad neid, ja infrastruktuuri spetsialistid peavad need Kafka'sse looma. Ja Kafka kontrollis teine osakond. Seega tuli luua pilet, et nad saaksid iga ipi jaoks 4 teemat luua. K\u00f5ik unustasid sellest. Kokkuv\u00f5ttes oli see \u00fcks \u00f5udus ja itsitamine. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/3130f9ebfda22713cffacf10db45ca89.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mida me selle k\u00f5ikaga tegime? Me saatsime selle Kafka s\u00fcsteemi. Sealt edasi l\u00e4ks pool logidest Logstashi. Teine pool jagunes. \u00dcks osa l\u00e4ks \u00fchte Graylogi, teine osa p\u00f5rutas teise Graylogi. K\u00f5ik see sattus l\u00f5puks \u00fchte Elasticsearch klastrisse. See t\u00e4hendab, kogu see segadus langes l\u00f5puks sinna. Nii ei tohi teha!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/98bf4811c102fc12fcd1114c25886b69.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nii see v\u00e4lja n\u00e4eb, kui vaadata k\u00f5rvalt. Nii ei tohi teha! Siin on numbritega kohe \u00e4ra m\u00e4rgitud probleemsed kohad. Tegelikult neid on rohkem, aga kuus neist on t\u00f5eliselt probleemsed, millega tuleb midagi ette v\u00f5tta. Nendest r\u00e4\u00e4gin n\u00fc\u00fcd eraldi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/69f7682e6677bdda3068d6dea4db7732.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin (1,2,3) kirjutatakse meil faile ja seega on siin kohe kolm peamist probleemi. <\/p>\n<p><\/p>\n<p>Esimene (1) \u2014 meil on neid kuidagi kuhugi kirjutada. Alati ei soovi anda API-le v\u00f5imalust otse faili kirjutada. Soovitav on, et API oleks isoleeritud konteineris, ja veel parem \u2014 kui see oleks read-only. Mina olen s\u00fcsteemiadministraator, seega on mul nende asjade \u00fcle veidi alternatiivne vaade.<\/p>\n<p><\/p>\n<p>Teine punkt (2,3) \u2014 me saame API-sse palju p\u00e4ringuid. API kirjutab palju andmeid faili. Failid kasvavad. Me peame neid rotatsioonima. Sest vastasel juhul ei ole diskiruumi piisavalt. Rotatsioon on halb, sest need on shelli kaudu redirigeeritud katalooge. Me ei saa seda rotatsioonida. Ei saa \u00f6elda rakendusele, et see avaks descriptorid uuesti. Sest arendajad vaatavad sind nagu lollile: \u201eMillistest deskriptoritest? Me kirjutame \u00fcldse stdout\u2019i.\u201d Infrastruktuuriinimesed tegid copytruncate logrotate\u2019is, mis teeb lihtsalt faili koopia ja truncates originaali. Seega, nende kopeerimise protsesside vahel l\u00f5ppeb tavaliselt ketta ruum.<\/p>\n<p><\/p>\n<p>(4) Meil oli erinevaid formaate erinevates API-des. Need erinesid veidi, kuid erinevaid regexp-sid tuli kirjutada. Kuna seda haldati Puppetiga, oli seal suur klasside kogum oma veidrustega. Pluss veel, et td-agent suutis suure osa ajast m\u00e4lu s\u00fc\u00fca, venida ja isegi lihtsalt teeselda, et ta t\u00f6\u00f6tab, kuid mitte midagi ei teinud. V\u00e4ljastpoolt oli v\u00f5imatu m\u00f5ista, et ta mitte midagi ei tee. Parimal juhul kukkus ta kokku ja keegi t\u00f5stis ta hiljem j\u00e4lle \u00fcles. T\u00e4psemalt \u00fctlemata, tuli alert ja keegi l\u00e4ks k\u00e4sitsi uuesti \u00fcles t\u00f5stma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/424cda2b60e9e5669b7ef2b34ca74e48.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>(6) Ja k\u00f5ige hullem oligi Elasticsearch. Sest see oli vana versioon. Kuna meil ei olnud tol ajal eraldatud meistreid. Meil olid heterogeensed logid, mille omadused v\u00f5isid kattuda. Erinevad logid erinevatest rakendustest v\u00f5isid olla kirjutatud samade v\u00e4ljade nimedega, aga sees v\u00f5isid olla erinevad andmed. N\u00e4iteks, \u00fcks logi tuleb Integeriga v\u00e4ljal, n\u00e4iteks level. Teine logi tuleb Stringiga v\u00e4ljal level. Ilma staatilise mappimiseta saavad tekkida sellised toredad asjad. Kui p\u00e4rast Elasticsearchi indeksi rotatsiooni tuleb esimesena s\u00f5num, mis on string, siis elame normaalselt. Aga kui esimene s\u00f5num on Integeriga, siis k\u00f5ik j\u00e4rgnevad s\u00f5numid, mis tulevad stringiga, lihtsalt l\u00fckatakse k\u00f5rvale. Sest v\u00e4lja t\u00fc\u00fcp ei kattu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/bc869f827bed326792857113191bb028.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me hakkasime endalt neid k\u00fcsimusi k\u00fcsima. Otsustasime mitte otsida s\u00fc\u00fcdlasi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/a071a4b38462f249339c988c35463639.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga midagi tuleb siiski ette v\u00f5tta! Ilmselge asi \u2014 tuleb luua standardid. M\u00f5ned standardid olid juba olemas. M\u00f5ned kehtestasime pisut hiljem. \u00d5nneks oli tol hetkel juba kinnitatud \u00fchtne logiformaat k\u00f5ikidele API-dele. See on kirjas teenuste koost\u00f6\u00f6 standardites. Seega, need, kes tahavad logisid saada, peavad need kirjutama sellele formaadile. Kui keegi ei kirjuta logisid selle formaadi j\u00e4rgi, siis ei garanteeri me midagi. <\/p>\n<p><\/p>\n<p>Edasi, tahaksime kehtestada \u00fchtse standardi logide kirjutamise, toimetamise ja kogumise viiside kohta. T\u00e4pselt, kuhu neid kirjutada ja millega neid toimetada. Ideaalne olukord on, kui projektides kasutatakse \u00fchte ja sama teeki. On olemas eraldi logimise teek Go jaoks, eraldi teek PHP jaoks. K\u00f5ik, kes meie juures on \u2014 peavad neid kasutama. Hetkel \u00fctleksin, et umbes 80% meil see \u00f5nnestub. Kuid m\u00f5ned j\u00e4tkavad kaktuste s\u00f6\u00f6misega.<\/p>\n<p><\/p>\n<p>Ja seal (slaidil) hakkab vaevu paistma \u201eSLA logide tarnimiseks\u201d. Seda pole veel, kuid me t\u00f6\u00f6tame selle nimel. Sest see on v\u00e4ga mugav, kui infrastruktuuri inimesed \u00fctlevad, et kui te kirjutate sellisesse formaati sellesse kohta ja mitte rohkem kui N s\u00f5numit sekundis, siis me toimetame selle sinna t\u00f5en\u00e4osusega. See vabastab palju peavalu. Kui SLA on olemas, siis on see lihtsalt suurep\u00e4rane!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/a887aceac13135afe90bb5f5a5ec1d26.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas me probleemiga hakkasime tegelema? Peamine probleem oli td-agentiga. Ei olnud selge, kuhu meie logid kaovad. Kas need toimetatakse? Kas need kogutakse? Kus need \u00fcldse on? Seet\u00f5ttu otsustati esimesena asendada td-agent. Valikute kohta, millega seda asendada, olen siin l\u00fchidalt \u00fcles kirjutanud.<\/p>\n<p><\/p>\n<p>Fluentd. Esiteks olen sellega varem kokku puutunud, ja seal see aeg-ajalt t\u00f5rkus. Teiseks, see on sama asi, ainult spetsiifilisemalt. <\/p>\n<p><\/p>\n<p>Filebeat. Miks see meie jaoks mugav oli? Sest see on kirjutatud Go-s, ja meil on Go-s suur ekspert\u00fcritus. Seega, kui midagi vajasime, saime seda edasi arendada. Seet\u00f5ttu me seda ei v\u00f5tnud. Et meie jaoks polnud mingit kiusatust seda oma vajadustele kohandama hakkata. <\/p>\n<p><\/p>\n<p>Selge valik systadminile j\u00e4\u00e4vad igasugused logide t\u00f6\u00f6tlemise teenused (syslog-ng\/rsyslog\/nxlog).<\/p>\n<p><\/p>\n<p>V\u00f5i kirjutada midagi oma, kuid me sellest loobusime, samuti filebeatist. Kui midagi kirjutada, siis on parem luua midagi kasulikku \u00e4ri jaoks. Logide edastamiseks on parem v\u00f5tta midagi valmis.<\/p>\n<p><\/p>\n<p>Seega langes valik sisuliselt syslog-ng ja rsyslog vahel. Kaldusin rsyslogi poole, kuna meil olid Puppetis juba rsyslogi klassid, ja ma ei leidnud nende vahel selget erinevust. Seal on syslog ja siin on syslog. Jah, kellelgi on halvem dokumentatsioon, kellelgi parem. \u00dcks suudab seda, teine seda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/a88116711b547fa5b2b34daf72cc4220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja natuke rsyslogist. Esiteks, see on tore, sest sellel on palju mooduleid. Sellel on arusaadav RainerScript (kaasaegne konfiguratsioonikeel). Suurep\u00e4rane boonuse on see, et me suutsime selle oma vahenditega emuleerida td-agent'i k\u00e4itumist, nii et rakendusele ei muutunud midagi. See t\u00e4hendab, et asendame td-agent'i rsyslogiga ja k\u00f5ik muu j\u00e4\u00e4b muutmata. Ja kohe saame t\u00f6\u00f6tava edastuse. Edasi, mmnormalize \u2014 see on geniaalne asi rsyslogis. See v\u00f5imaldab logisid anal\u00fc\u00fcsida, kuid mitte Groki ja regexpiga. See loob abstraktse s\u00fcntaksipuu. See anal\u00fc\u00fcsib logisid umbes nagu compiler anal\u00fc\u00fcsib l\u00e4htekoodi. See v\u00f5imaldab t\u00f6\u00f6tada v\u00e4ga kiiresti, tarbida v\u00e4he CPU-d ja on \u00fcldiselt v\u00e4ga \u00e4ge asi. Seal on tohutult muid boonusfunktsioone. Ma ei peatuks nende juures.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/ca811be9f9ff318fb8c8bbf3dc45a038.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rsynlogil on veel palju puudusi. Need on enamasti samad, mis boonused. Peamised probleemid on seotud selle ettevalmistamisega ja vajaliku versiooni valimisega.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/034f588e0834b1d4e4873d9c3dbd0873.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Otsustasime, et kirjutame logid unix socketisse. Ja mitte \/dev\/log-i, sest seal on meil kapp s\u00fcsteemsete logide vahel, seal on journald selles kanalis. Seega, kirjutame kohandatud socketisse. \u00dchendame selle eraldi reeglistikuga. Me ei sega midagi. K\u00f5ik on selge ja arusaadav. Just nii me tegime. See sokettide kataloog on standardiseeritud ja edastatud k\u00f5ikidesse konteineritesse. Konteinerid saavad n\u00e4ha neile vajalikku socketit, avada ja sinna kirjutada. <\/p>\n<p><\/p>\n<p>Miks mitte fail? Sest k\u00f5ik on lugenud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">artiklit Badu\u0161ka kohta<\/a><\/noindex>, kus prooviti faile Dockerisse edastada ja leiti, et p\u00e4rast rsyslogi taask\u00e4ivitamist muutub failide descriptor ning Docker kaotab selle faili. Ta hoiab avatud midagi muud, kuid mitte seda socketit, kuhu kirjutatakse. Otsustasime, et lahendame selle probleemi, ja samal ajal lahendame ka lukustamise probleem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/78db15581a68ce16d11f5ebe7e6fe04e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rsyslog teostab slaidil n\u00e4idatud tegevusi ja saadab logid kas ralia v\u00f5i Kafkasse. Kafka vastab vanale meetodile. Ralia \u2014 proovisin kasutada ainult rsyslogi logide edastamiseks. Ilma s\u00f5numij\u00e4rjekorrata, tavaliste rsyslogi vahenditega. \u00dcldiselt see toimib.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/e61a25005ecbdc86d9de3215ee6fb97e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga on n\u00fcansse, kuidas need siis tegelikult sinna ossa (Logstash\/Graylog\/ES) saada. See osa (rsyslog-rsyslog) kasutatakse andmekeskuste vahel. Siin on kompressiooniga tcp-link, mis s\u00e4\u00e4stab ribalaiust ja seega suurendab t\u00f5en\u00e4osust, et me saame logisid teistest andmekeskustest, kui kanal on ummistunud. Sest meil on Indoneesia, kus k\u00f5ik on halvasti. Seal on see pidev probleem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/7509ba360be2db4dec0c8679225d285f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5tleme sellele, kuidas me saame j\u00e4lgida, kui t\u00f5en\u00e4oliselt logid, mida me rakendusest salvestame, siia l\u00f5puni j\u00f5uavad? Otsustasime luua statistikat. Rsynlogil on oma statistika kogumise moodul, kus on m\u00f5ned loendurid. N\u00e4iteks v\u00f5ib see n\u00e4idata, kui suur on j\u00e4rjekord v\u00f5i kui palju s\u00f5numeid on tulnud teatud toimingusse. Need on midagi, millest saame l\u00e4htuvalt midagi teha. Lisaks on tal kohandatavad loendurid, mida saab seadistada ja see n\u00e4itab teile, n\u00e4iteks, kui palju s\u00f5numeid m\u00f5ni API on salvestanud. Edasi, kirjutasin rsyslog_exporter'i Pythonis, ja saatsime k\u00f5ik Prometheusesse ja ehitasime graafikud. Graylogi m\u00f5\u00f5dikute seadmine oli v\u00e4ga soovitav, kuid hetkel pole me seda veel teinud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/ef9bd61fc43e056b4a56240c85e7fd20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Millised probleemid tekkisid? Probleemid tekkisid seet\u00f5ttu, et me avastasime (\u00dcLLATAVALT!), et meie Live API kirjutavad 50k s\u00f5numit sekundis. See on ainult Live API ilma staginguta. Graylog n\u00e4itab meile ainult 12 tuhat s\u00f5numit sekundis. Ja tekkis p\u00f5hjendatud k\u00fcsimus, aga kus on \u00fclej\u00e4\u00e4nud? Millest tegime j\u00e4relduse, et Graylog lihtsalt ei suuda sellega toime tulla. Vaadates, t\u00f5epoolest, Graylog ja Elasticsearch ei suuda seda voogu taluda.<\/p>\n<p><\/p>\n<p>Edasi, muud avastused, millega me protsessi k\u00e4igus kokku puutusime.<\/p>\n<p><\/p>\n<p>Socketi kirjutamine on blokeeritud. Kuidas see juhtus? Kui ma kasutasin rsyslog'i andmete edastamiseks, purunes \u00fchel hetkel kanal andmekeskuste vahel. \u00dcks edastus seiskus, teine seiskus. K\u00f5ik see j\u00f5udis masinani API'ga, mis kirjutab rsyslog'i socketisse. Seal t\u00e4itus j\u00e4rjekord. Siis t\u00e4itus j\u00e4rjekord Unix socket'i kirjutamiseks, mis on vaikimisi 128 paketti. Ja j\u00e4rgmine write() rakenduses blokeerus. Kui me vaatasime raamatukogu, mida kasutame Go rakendustes, oli seal kirjas, et socket'i kirjutamine toimub mitteblokeerivas re\u017eiimis. Me olime kindlad, et midagi ei blokeeru. Sest me lugesime, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">artiklit Badu\u0161ka kohta<\/a><\/noindex>, mis sellest kirjutas. Aga seal on \u00fcks n\u00fcanss. Selle kutse \u00fcmber oli veel l\u00f5putu ts\u00fckkel, kus pidevalt \u00fcritati s\u00f5numit socket'isse suruda. Seda me ei m\u00e4rganud. Pidiime raamatukogu \u00fcmber kirjutama. Sellest ajast on see mitmel korral muutunud, kuid praegu oleme k\u00f5ikidest all\u00fcksustest blokeeringutest vabanenud. Seega saab rsyslog'i peatada, ja midagi ei kuku alla.<\/p>\n<p><\/p>\n<p>Peame j\u00e4lgima j\u00e4rjekordade suurust, mis aitab v\u00e4ltida nende \u00e4mbrite peale astumist. Esiteks, me saame j\u00e4lgida, millal hakkame s\u00f5numeid kaotama. Teiseks, saame j\u00e4lgida, kas meil on \u00fcldiselt probleeme edastamisega.<\/p>\n<p><\/p>\n<p>Ja veel \u00fcks ebameeldiv hetk \u2014 amplifikatsioon 10 korda mikroteenuste arhitektuuris \u2014 see on v\u00e4ga lihtne. Meil ei ole nii palju sisendeid, kuid nende s\u00f5numitega edasiviiv graaf, access-log'id t\u00f5ttu, suurendab tegelikult logide koormust umbes k\u00fcmme korda. Kahjuks ei j\u00f5udnud ma t\u00e4pseid numbreid arvestada, kuid mikroteenused \u2014 need on sellised. Seda tuleb silmas pidada. Tundub, et praegu on logide kogumise all\u00fcksus \u2014 k\u00f5ige koormatum Lazadas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/d76c6d91613ff77c41b8985cee83218f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas lahendada elasticsearch'i probleem? Kui on vaja kiiresti logisid \u00fchte kohta saada, et mitte joosta ringi k\u00f5igis masinates ja ei koguda neid seal, kasuta failide salvestust. See t\u00f6\u00f6tab garanteeritult. See tehakse igast serverist. Pead lihtsalt sinna kettad panema ja syslog'i seadma. P\u00e4rast seda on sul garanteeritult k\u00f5ik logid \u00fches kohas. Edasi saab rahulikult seadistada elasticsearch'i, graylog'i, v\u00f5i midagi muud. Kuid sul on juba k\u00f5ik logid, ja sa v\u00f5id neid hoida, kui palju kettaribad piisavad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/571297f25de76958769f3a4b9bfbf5b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minu ettekande hetkeks n\u00e4gi skeem v\u00e4lja selline. Faili me praktiliselt ei kirjuta. Praegu t\u00f5en\u00e4oliselt l\u00fclitame viimased v\u00e4lja. Kohalikud masinad, kus API-d k\u00e4ivituvad, me ei hakka enam failidesse kirjutama. Esiteks on olemas failide salvestus, mis t\u00f6\u00f6tab v\u00e4ga h\u00e4sti. Teiseks, neil masinatel on pidevalt ruum otsa saanud, tuleb seda pidevalt j\u00e4lgida.<\/p>\n<p><\/p>\n<p>See osa Logstashist ja Graylogist ajab t\u00f5eliselt n\u00e4rvi. Seet\u00f5ttu tuleb sellest vabaneda. Tuleb valida midagi \u00fchte.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/4a285577708aa1c55c16a72364fa8072.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me otsustasime Logstash'i ja Kibana eemaldada. Sest meil on turbosakonn, mis seondub. Side on selles, et Kibana ilma X-Pack'i ja Shieldita ei v\u00f5imalda logide juurdep\u00e4\u00e4su \u00f5iguste piiramist. Seet\u00f5ttu v\u00f5tsime Graylog'i. Seal on k\u00f5ik olemas. Mulle see ei meeldi, aga see t\u00f6\u00f6tab. Ostime uue riistvara, installisime sinna v\u00e4rske Graylog'i ja kandsime k\u00f5ik logid ranged formaadid eraldi Graylog'i. Me lahendasime probleemid erinevate sama t\u00fc\u00fcpi v\u00e4ljadega organisatsiooniliselt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/91b9fdada2648ae1caec05169b11926a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis tegelikult uude Graylog'i kuulub. Me lihtsalt panime k\u00f5ik Dockerisse. V\u00f5tsime hulk servereid, jaotat\u00e4it 3 instantsi Kafka'd, 7 serverit Graylog'i versioonis 2.3 (sest soovisin Elasticsearch'i versiooni 5). K\u00f5ik see t\u00f5steti RAID-idega HDD-dest. N\u00e4gime indekseerimism\u00e4\u00e4ra kuni 100 000 s\u00f5numit sekundis. N\u00e4gime numbrit, et 140 terabaidi andmeid n\u00e4dalas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/05f9b3c06739548f092bbe271bf8fc54.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja j\u00e4lle \u00e4mbrid! Meil on tulemas kaks allahindlust. Me kasutasime \u00fcle 6 miljoni s\u00f5numi. Meie Graylog ei j\u00f5ua neid t\u00f6\u00f6tlema. Peame j\u00e4lle ellu j\u00e4\u00e4ma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/424aa2febc2fd903aabee4aeabb64010.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ellu j\u00e4ime me nii. Lisades veel m\u00f5ned serverid ja SSD-d. Praegu elame sellest viisist. N\u00fc\u00fcd t\u00f6\u00f6tleme juba 160k s\u00f5numit sekundis. Me ei ole veel piirini j\u00f5udnud, seega ei ole selge, kui palju me tegelikult suudame sellest v\u00e4lja pigistada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/17d84fa7de5403551e55f42345e62a1a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin on meie tulevikuplaanid. Nendest on tegelikult k\u00f5ige t\u00e4htsam, v\u00f5ib-olla, k\u00f5rge saadavus. Meil seda praegu ei ole. Mitmed masinad on seadistatud \u00fchtlaselt, kuid k\u00f5ik liigub praegu l\u00e4bi \u00fche masina. Tuleb aega v\u00f5tta, et seadistada nende vahel failover.<\/p>\n<p><\/p>\n<p>Koguda m\u00f5\u00f5dikud Graylog'ilt.<\/p>\n<p><\/p>\n<p>Seada kiirus piirang, et \u00fcks, hull API, ei h\u00e4vitaks meie ribalaiust ja k\u00f5ike muud.<\/p>\n<p><\/p>\n<p>Ja l\u00f5puks, kirjuta m\u00f5ni SLA arendajatega, et me saame teenindada nii palju. Kui kirjutate rohkem, siis kahjuks ei saa.<\/p>\n<p><\/p>\n<p>Ja kirjutada dokumentatsioon.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u201eR\u00fcnnakute kaardistamine logide kogumise ja edastamise valdkonnas\u201c \u2014 ettekande t\u00f5lgendus.\" src=\"\/wp-content\/uploads\/2019\/04\/4a78e2834d5877f8bf17d77a44000c22.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00fchidalt, kokkuv\u00f5te k\u00f5igest, mida oleme l\u00e4bi elanud. Esiteks, standardid. Teiseks, syslog \u2014 tort. Kolmandaks, rsyslog t\u00f6\u00f6tab just nii, nagu slaidil on kirjutatud. Ja n\u00fc\u00fcd liikume k\u00fcsimuste juurde.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimused<\/strong>.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Miks ikkagi otsustasite mitte v\u00f5tta\u2026 (filebeat?)<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: Tuleb kirjutada faili. V\u00e4ga ei tahtnud. Kui teie API kirjutab tuhandeid teateid sekundis, siis isegi kui sa kord tunnis rotatsiooni teed, pole see ikkagi variant. V\u00f5ib kirjutada pipe'i. Selle peale k\u00fcsisid arendajad: \"Mis juhtub, kui protsess, kuhu me kirjutame, kukub?\" Ma ei leidnud sellele vastust ja \u00fctlesin: \"Noh, ok, siis me ei tee seda.\"<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Miks te ei kirjuta logisid lihtsalt HDFS-i?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: See on j\u00e4rgmine etapp. Me m\u00f5tlesime selle \u00fcle alguses, kuid kuna hetkel ei ole ressursse selleks tegeleda, siis see j\u00e4\u00e4b meil pikemaajalisse lahendusse.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Veergude formaat oleks sobivam.<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: Ma saan k\u00f5igest aru. Me oleme \u201epooldavad\u201c m\u00f5lema k\u00e4ega. <\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Te kirjutate rsyslogi. Seal on nii TCP kui ka UDP. Aga kui UDP, siis kuidas te garanteerite kohaletoimetamise?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: On kaks momenti. Esiteks, \u00fctlen kohe, et me ei garanteeri logide kohaletoimetamist. Sest kui arendajad tulevad ja \u00fctlevad: \"Kuidas oleks, kui hakkame kirjutama finantsandmeid ja teie panete need kuhugi, ettevaatusabin\u00f5una, kui midagi juhtub,\" siis me vastame: \"Suurep\u00e4rane! Laske teil luua blokeering kirjutamiseks soketisse ja teha seda tehingute kaupa, et me saaksime kindlustada, et te meile selle soketisse edastate ja olete veendunud, et me saime selle teiselt poolt.\" Ja sel hetkel kaob k\u00f5igil huvi. Kui te ei taha garanteerida kirjutamist soketisse, siis miks peaksime meie garantii andma? Me p\u00fc\u00fcame anda parimat, aga me ei anna 100% garantiid. Seega, \u00e4rge kirjutage sinna finantsandmeid. Selleks on andmebaasid tehingutega.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Kui API genereerib mingi teate logis ja edastab juhtimise mikroteenustele, kas olete kokku puutunud probleemiga, et teated erinevatest mikroteenustest j\u00f5uavad vale j\u00e4rjestuses? Seet\u00f5ttu tekib segadus.<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: On normaalne, et need tulevad erinevas j\u00e4rjekorras. Selleks tuleb valmistuda. Sest kettetoimetamine ei garanteeri j\u00e4rjekorda, v\u00f5i tuleb selleks spetsiaalselt ressursse investeerida. Kui vaatame failisalvestusi, siis iga API salvestab logid oma faili. T\u00e4psemalt \u00f6eldes, rsyslog jagab need kaustadesse. Igal API-l on oma logid, kuhu saab minna ja vaadata ning hiljem timestamp'i j\u00e4rgi neid kokku viia. Kui nad vaatavad Graylogis, siis seal need j\u00e4rjestatakse timestamp'i j\u00e4rgi. K\u00f5ik on korras.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Timestamp v\u00f5ib erineda millisekondide v\u00f5rra.<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: Timestamp genereerib ise API. Selles ongi kogu asi. Meil on NTP. API genereerib timestamp'i juba s\u00f5numis. Seda ei lisa rsyslog.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Ei ole v\u00e4ga selge andmekeskuste vahelise koost\u00f6\u00f6 osas. Andmekeskuse raames on aru saada, kuidas logid koguti, t\u00f6\u00f6deldi. Kuidas toimub koost\u00f6\u00f6 andmekeskuste vahel? Kas iga andmekeskus elab oma elu?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: Peaaegu. Igas riigis on mingi andmekeskus. Meil ei ole hetkel hajutamist, et \u00fches riigis oleks mitu andmekeskust. Seega ei pea neid \u00fchendama. Iga keskuse sees on Log Relay. See on Rsyslog server. Tegelikult on seal kaks haldusmasinat. Need on \u00fchtmoodi seadistatud. Kuid praegu l\u00e4heb lihtsalt liiklus l\u00e4bi \u00fche neist. See kogub k\u00f5ik logid. Sellel on disk queue igaks juhuks. See tihendab logisid ja saadab need kesksetesse andmekeskustesse (Singapur), kus need saadetakse edasi Graylogi. Ja igas andmekeskuses on oma failide salvestus. Kui meil kaob \u00fchendus, siis on meil k\u00f5ik logid seal. Need j\u00e4\u00e4vad sinna. Need s\u00e4ilivad.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: \u00c4\u00e4rmuslikes olukordades saate sealt logid?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: V\u00f5ib minna sinna (failis\u00fcsteemi) ja vaadata.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Kuidas te j\u00e4lgite, et te ei kaota logisid?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: Tegelikult me kaotame neid ja me j\u00e4lgime seda. J\u00e4lgimine k\u00e4ivitus kuu aega tagasi. Go API-s kasutatavas teegis on meetrika. See suudab arvutada, mitu korda tal ei \u00f5nnestunud soketisse kirjutada. Seal on hetkel nutikas heuristika. Seal on buffer. See p\u00fc\u00fcab kirjutada selle kaudu s\u00f5numi soketisse. Kui buffer t\u00e4itub, hakkab see neid langetama. Ja loendab, kui palju ta on langetanud. Kui seal hakkavad loendurid t\u00e4ituma, saame sellest teada. Need j\u00f5uavad ka prometheus'e kaudu ning Grafanas saab vaadata graafikuid. Saame seada teavitusi. Kuid praegu pole selge, kellele neid saata.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Elasticsearchis hoidsite logisid varukoopiate kaupa. Kui palju teil on koopiaid?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: \u00dcks koopia.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: See on k\u00f5igest \u00fcks koopia?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: See, see, what this master and replica are. Data is stored in two instances.<\/p>\n<p><\/p>\n<p><strong>K\u00fcsimus<\/strong>: Have you somehow adjusted the rsyslog buffer size? <\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: We write datagrams to a custom Unix socket. This immediately imposes a limit of 128 kilobytes. We cannot write more than that. We have specified this in the standard. Those who want to reach the storages write 128 kilobytes. Libraries, by the way, truncate and set a flag indicating that the message has been truncated. In our standard message, there is a special field that shows whether it was truncated when written or not. So we have the ability to track this moment.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Do you write broken JSON? <\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: Broken JSON will be discarded either during relay due to oversized packet or will be discarded by Graylog because it cannot parse the JSON. But there are nuances that need fixing, and they are mostly linked to rsyslog. I have filled out several issues there that still need work.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Why Kafka? Have you tried RabbitMQ? Is Graylog not working under such loads?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: We have issues with Graylog. Graylog has issues with us. It's a peculiar thing. And, to be honest, it's not necessary. I would prefer to write directly from rsyslog to Elasticsearch and then check Kibana. But we need to settle issues with the security team. This is a possible direction for our development, where we might discard Graylog and use Kibana. Using Logstash wouldn\u2019t make sense. Because I can accomplish the same functionalities with rsyslog. And it has a module for writing to Elasticsearch. We're trying to coexist with Graylog. We've even slightly tuned it. But there's still room for improvement.<\/p>\n<p><\/p>\n<p>Regarding Kafka. It historically happened that way. When I came, it was already there, and logs were already being written to it. We just raised our cluster and migrated logs into it. We manage it; we know how it feels. On RabbitMQ... we don't get along with RabbitMQ. But RabbitMQ works fine for us. We have it in production, and there were problems with it. Just before the sale, it was tuned, and it started working properly. But before that, I was not ready to release it to production. There's another point. Graylog can read version AMQP 0.9, while rsyslog can write version AMQP 1.0. And there is no solution that can handle both. It's either one or the other. So at this moment, only Kafka is available. But that also has its nuances. Because the omkafka of the version of rsyslog that we are using can lose the entire buffer of messages that it pulled from rsyslog. For now, we\u2019re living with it. <\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: You use Kafka because it was available? Not for any other purposes?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: The Kafka that existed is used by the Data Science team. It's a completely separate project that I unfortunately cannot comment on. I'm not aware of its details. It was under the management of the Data Science team. When logs were introduced, they decided to use it so as not to set up a separate one. Now we've upgraded Graylog, and we've lost compatibility because there's an old version of Kafka. We had to set up our own. In the process, we eliminated those four topics for each API. We created one wide topic for all live activities, one wide topic for all staging and just shoot everything into it. Graylog extracts everything in parallel.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Why this sorcery with sockets? Have you tried using a syslog log driver for containers?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: When we were asking ourselves this question, our relationship with Docker was strained. It was Docker 1.0 or 0.9. Docker itself was strange. Secondly, if you also push logs into it\u2026 I have an unverified suspicion that it passes all logs through itself, through the Docker daemon. If one API goes haywire, other APIs get stuck because they cannot send stdout and stderr. I don't know what it will lead to. I have a hunch that we should not use the Docker syslog driver at this point. Our functional testing department has its own little Graylog cluster with logs. They use Docker log drivers and supposedly everything is fine there. But they write GELF directly into Graylog. At that time, when we were doing all this, we needed it to just work. Maybe later, if someone comes and says it has been working fine for ages, we will give it a try.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: You make delivery between data centers on rsyslog. Why not on Kafka?<\/p>\n<p><\/p>\n<p><strong>Vastus<\/strong>: Me teeme nii ja naa tegelikult. Kahel p\u00f5hjusel. Kui kanal on t\u00e4iesti katki, siis ei mahtu meie logid isegi kokkusurutud kujul sinna. Kafka v\u00f5imaldab neid lihtsalt kaduma l\u00e4inud protsessi jooksul. Sel viisil vabanevad me nendest logide ummistustest. Me kasutame antud juhul otse Kafka't. Kui meil on hea kanal ja soovime seda vabastada, siis kasutame nende rsyslog'i. Kuid tegelikult saab seda seadistada nii, et see viskab ise v\u00e4lja, mis ei mahtu. Praegu kasutame m\u00f5nes kohas otse rsyslog'i kohaletoimetamist, m\u00f5nes Kafka't.<\/p>\n<p>Allikas: <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.0.1 - 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\/et\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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 \u201eLogide kogumise ja edastamise kivide kaardistamine\u201c \u2013 ettekande t\u00f5lgendus | ProHoster","description":"Logid on oluline osa s\u00fcsteemist, mis aitab m\u00f5ista, kas see t\u00f6\u00f6tab (v\u00f5i ei t\u00f6\u00f6ta) ootusp\u00e4raselt. Mikroteenuste arhitektuuri tingimustes muutub logide haldamine eraldi teaduseks.","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/32723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32723"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32723\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24507"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}