{"id":31014,"date":"2019-10-31T21:38:54","date_gmt":"2019-10-31T18:38:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/trassirovka-servisov-opentracing-i-jaeger\/"},"modified":"2019-10-31T21:38:54","modified_gmt":"2019-10-31T18:38:54","slug":"trassirovka-servisov-opentracing-i-jaeger","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/trassirovka-servisov-opentracing-i-jaeger","title":{"rendered":"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/045800f00c8da9702f62cf3de53df7b6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMeie projektides kasutame mikroteenuste arhitektuuri. Tulemuslikkuse kitsaskohtade ilmnemisel kulub palju aega j\u00e4lgimisele ja logide anal\u00fc\u00fcsile. Erinevate toimingute ajastuse logimise korral on tavaliselt keeruline m\u00f5ista, mis viis nende toimingute kutsumiseni, j\u00e4lgida tegevuste j\u00e4rjestust v\u00f5i ajaintervalli erinevate teenuste vahel. <\/p>\n<p>K\u00e4sit\u00f6\u00f6 v\u00e4hendamiseks otsustasime kasutada \u00fchte j\u00e4lgimisvahendit. Sellest, kuidas ja milleks saab j\u00e4lgimist kasutada ning kuidas meie seda tegime, r\u00e4\u00e4gib see artikkel. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Milliseid probleeme saab j\u00e4lgimise abil lahendada<\/h3>\n<p><\/p>\n<ol>\n<li>Leida kitsaskohti tulemuslikkuses nii \u00fche teenuse sees kui ka kogu t\u00e4itmispuu ulatuses, kus osalevad k\u00f5ik teenused. N\u00e4iteks:\n<ul>\n<li>Palju l\u00fchikesi j\u00e4rjestikuseid kutsungeid teenuste vahel, n\u00e4iteks geokodeerimine v\u00f5i andmebaasi p\u00e4ringud.<\/li>\n<li>Pikad ooteajad sisend-v\u00e4ljundis, n\u00e4iteks andmete edastamine v\u00f5rgu kaudu v\u00f5i andmete lugemine kettalt.<\/li>\n<li>Pikkade andmete anal\u00fc\u00fcsimise protsess.<\/li>\n<li>Pikad operatsioonid, mis vajavad palju CPU ressursse.<\/li>\n<li>Koodil\u00f5igud, mis ei ole l\u00f5pptulemuse saavutamiseks vajalikud ja v\u00f5ivad olla eemaldatud v\u00f5i k\u00e4ivitatud viivitusega.<\/li>\n<\/ul>\n<\/li>\n<li>Visuaalselt m\u00f5ista, millises j\u00e4rjekorras mida kutsutakse ja mis juhtub, kui tehingut t\u00e4idetakse.<br \/>\n<img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/f22f14599568bff5573fe59eeeaea753.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOn n\u00e4ha, et n\u00e4iteks: p\u00e4ring tuli teenusesse WS -&gt; teenus WS t\u00e4iendas andmeid teenuse R kaudu -&gt; seej\u00e4rel saatis p\u00e4ringu teenusesse V -&gt; teenus V laadis palju andmeid teenusest R -&gt; k\u00e4is teenuses P -&gt; teenus P k\u00fclastas veel kord teenust R -&gt; teenus V ignoreeris tulemust ja l\u00e4ks teenusesse J -&gt; ja ainult siis tagastas vastuse teenusele WS, samal ajal kui ta j\u00e4tkas midagi muud taustal arvutamist.<br \/>\nIlma sellise j\u00e4lje v\u00f5i \u00fcksikasjaliku dokumentatsioonita kogu protsessi kohta on v\u00e4ga keeruline m\u00f5ista, mis toimub, kui vaadata koodi esmakordselt, ja kood on hajutatud erinevatesse teenustesse ning peidetud hulga binide ja liideste taha.\n<\/li>\n<li>Teabe kogumine t\u00e4itevpuu kohta edasiseks viivitamiseks anal\u00fc\u00fcsimiseks. Iga t\u00e4itmisetapi jooksul v\u00f5ib j\u00e4ljele lisada teavet, mis on selles etapis saadaval, ja seej\u00e4rel v\u00e4lja selgitada, millised sisendid viisid sellise stsenaariumi tekkimiseni. N\u00e4iteks:\n<ul>\n<li>Kasutaja ID<\/li>\n<li>\u00d5igused<\/li>\n<li>Valitud meetodi t\u00fc\u00fcp<\/li>\n<li>Logi v\u00f5i teostuse viga<\/li>\n<\/ul>\n<\/li>\n<li>J\u00e4lgimise j\u00e4lgede muutmine m\u00f5\u00f5tmete alamkoguks ja edasine anal\u00fc\u00fcs juba m\u00f5\u00f5tmete kujul.<\/li>\n<\/ol>\n<h3>Mida suudab j\u00e4lgimine logida. Span<\/h3>\n<p>J\u00e4lgimises on m\u00f5iste span, see on analoog \u00fchele logile konsolis. Spaanil on:<\/p>\n<ul>\n<li>Nimi, tavaliselt on see meetodi nimi, mida teostati<\/li>\n<li>Teenuse nimi, milles span genereeriti<\/li>\n<li>Oma ainulaadne ID<\/li>\n<li>Mingi meta teave key\/value kujul, mida sinna logiti. N\u00e4iteks meetodi parameetrid v\u00f5i kas meetod l\u00f5ppes vea t\u00f5ttu v\u00f5i mitte<\/li>\n<li>Selle spaani teostamise algus- ja l\u00f5ppaeg<\/li>\n<li>Vanema spaani ID<\/li>\n<\/ul>\n<p>\nIga span saadetakse spaanide kogujale andmete salvestamiseks andmebaasi, et hiljem vaadata, kui see on l\u00f5petanud oma teostamise. Edasi saab \u00fcles ehitada k\u00f5igi spaanide puu, \u00fchendades vanema ID j\u00e4rgi. Anal\u00fc\u00fcsimisel saab n\u00e4iteks leida k\u00f5ik spaanid mingis teenuses, mis v\u00f5tsid rohkem kui mingit aega. Edasi liikudes saab vaadata konkreetset spaani, n\u00e4ha k\u00f5iki puu \u00fclal ja all seda spaani.<\/p>\n<p><img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/9cc97f1278af60f0efd5e393cd183c5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Opentrace, Jagger ja kuidas me seda oma projektides rakendasime<\/h3>\n<p>\nOn olemas \u00fcldine standard <noindex><a rel=\"nofollow\" href=\"https:\/\/opentracing.io\/docs\/overview\/\">Opentrace<\/a><\/noindex>, mis kirjeldab, kuidas ja mida tuleks koguda, ilma et see oleks seotud konkreetse rakenduse rakendamisega m\u00f5nes keeles. N\u00e4iteks Java-s k\u00e4ib kogu j\u00e4lgimisega t\u00f6\u00f6 l\u00e4bi Opentrace'i \u00fchise API, mille all v\u00f5ib peituda n\u00e4iteks Jaeger v\u00f5i t\u00fchi vaikimisi rakendus, mis ei tee midagi.<br \/>\nMeie kasutame <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jaegertracing.io\/\">Jaeger<\/a><\/noindex> kui Opentrace'i rakendust. See koosneb mitmest komponendist:<\/p>\n<p><img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/1fd4ae8563569271b067861c81101d71.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Jaeger-agent \u2014 kohalik agent, mis tavaliselt t\u00f6\u00f6tab igas masinas ja kuhu logivad teenused lokaalses vaikimisi sadamas. Kui agenti pole, siis on selle masina k\u00f5ikide teenuste j\u00e4lgimine tavaliselt v\u00e4lja l\u00fclitatud.<\/li>\n<li>Jaeger-kogujaja \u2014 selle kaudu saadavad k\u00f5ik agendid kogutud j\u00e4lgimised, ning see salvestab need valitud andmebaasi.<\/li>\n<li>Andmebaas \u2014 nende eelistatud on Cassandra, kuid meie kasutame Elasticsearchi, olemas on teostused ka paari muu andmebaasi jaoks ja m\u00e4lus olev rakendus, mis ei salvesta \u00fchtegi andmeid kettale.<\/li>\n<li>Jaeger-k\u00fcsimine \u2014 see on teenus, mis tutvustab andmebaasi ja tagastab juba kogutud j\u00e4lgimised anal\u00fc\u00fcsiks.<\/li>\n<li>Jaeger-kasutajaliides \u2014 see on veebiliides j\u00e4lgimiste otsimiseks ja vaatamiseks, see eeldab juurdep\u00e4\u00e4su jaeger-k\u00fcsimisele.<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/afc415cb5d4f19e7ba18394c2c1a9dd5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEraldi komponendina v\u00f5ib v\u00e4lja tuua opentrace jaeger rakenduse erinevates programmeerimiskeeltes, mille kaudu saadetakse spaanid jaeger-agendile.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger-client-java\">Jaggeri \u00fchendamine Java-s<\/a><\/noindex> piirdub io.opentracing.Tracer liidese rakendamisega, mille j\u00e4rel k\u00f5ik j\u00e4ljed saadetakse selle kaudu tegelikku agendile.<\/p>\n<p><img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/5ce4bdfc06def7e4645bd58163e99dab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSamuti saab Springi komponente \u00fchendades kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opentracing-contrib\/java-spring-cloud\">opentracing-spring-cloud-starter<\/a><\/noindex> ja Jaegeri rakendust <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opentracing-contrib\/java-spring-jaeger\">opentracing-spring-jaeger-cloud-starter<\/a><\/noindex> mis konfigureerib automaatselt j\u00e4lgimise k\u00f5ikidele komponentide kaudu, n\u00e4iteks http p\u00e4ringutele kontrollereid, andmebaasi p\u00e4ringutele jdbc kaudu jne.<\/p>\n<h3>J\u00e4lgede logimine Java-s<\/h3>\n<p>\nK\u00f5rgemal tasemel peab olema loodud esimene Span, see v\u00f5ib olla automaatselt loodud n\u00e4iteks Springi kontrolleri poolt p\u00e4ringu saamisel v\u00f5i k\u00e4sitsi, kui sellist ei ole. Edasi edastatakse see madalamale Scope'i. Kui m\u00f5ni allpool olev meetod soovib lisada Span'i, siis v\u00f5tab ta praeguse activeSpan'i Scope'ist, loob uue Span'i ja \u00fctleb, et selle vanem on saadud activeSpan, ning teeb uue Span'i aktiivseks. V\u00e4list teenuseid kutsudes antakse neile \u00fcle praegune aktiivne spaan, ning need teenused loovad uusi spaan'e, mis on seotud selle spaaniga.<br \/>\nKogu t\u00f6\u00f6 toimub Tracer'i kaudu, mille saab DI mehhanismi kaudu v\u00f5i GlobalTracer.get() kaudu, kui DI mehhanism ei toimi. Vaikimisi, kui tracerit ei ole initseeritud, tagastatakse NoopTracer, mis ei tee midagi.<br \/>\nEdasi saab tracer'i kaudu ScopeManager'ist praeguse scope'i, luuakse uus scope praegusest koos uue spaaniga, seej\u00e4rel suletakse loodud Scope, mis sulgeb loodud spaani ja tagastab aktiivseks varasema Scope'i. Scope on seotud l\u00f5imega, seega tuleb mitme l\u00f5ime programmeerimisel meeles pidada, et edastada aktiivne spaan teise l\u00f5ime juurde, et aktiveerida teise l\u00f5ime Scope, millel on seos selle spaaniga.<\/p>\n<pre><code class=\"java\">io.opentracing.Tracer tracer = ...; \/\/ GlobalTracer.get()\n\nvoid DoSmth () {\n   try (Scope scope = tracer.buildSpan(\"DoSmth\").startActive(true)) {\n      ...\n   }\n}\nvoid DoOther () {\n    Span span = tracer.buildSpan(\"someWork\").start();\n    try (Scope scope = tracer.scopeManager().activate(span, false)) {\n        \/\/ Do things.\n    } catch(Exception ex) {\n        Tags.ERROR.set(span, true);\n        span.log(Map.of(Fields.EVENT, \"error\", Fields.ERROR_OBJECT, ex, Fields.MESSAGE, ex.getMessage()));\n    } finally {\n        span.finish();\n    }\n}\n\nvoid DoAsync () {\n    try (Scope scope = tracer.buildSpan(\"ServiceHandlerSpan\").startActive(false)) {\n        ...\n        final Span span = scope.span();\n        doAsyncWork(() -&gt; {\n            \/\/ STEP 2 ABOVE: reactivate the Span in the callback, passing true to\n            \/\/ startActive() if\/when the Span must be finished.\n            try (Scope scope = tracer.scopeManager().activate(span, false)) {\n                ...\n            }\n        });\n    }\n}<\/code><\/pre>\n<p>Kuna mitme h\u00fcjeni programmimiseks on samuti olemas TracedExecutorService ja sarnased m\u00e4hised, mis edastavad automaatselt praeguse spani l\u00f5ime, kui t\u00f6\u00f6tatakse as\u00fcnkroonselt:<\/p>\n<pre><code class=\"java\">private ExecutorService executor = new TracedExecutorService(\n    Executors.newFixedThreadPool(10), GlobalTracer.get()\n);<\/code><\/pre>\n<p>V\u00e4liste http p\u00e4ringute jaoks on olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opentracing-contrib\/java-apache-httpclient\">TracingHttpClient<\/a><\/noindex><\/p>\n<pre><code class=\"java\">HttpClient httpClient = new TracingHttpClientBuilder().build();<\/code><\/pre>\n<h3>Probleemid, millega me silmitsi seisame<\/h3>\n<p><\/p>\n<ul>\n<li>Binaarsed ja DI ei t\u00f6\u00f6ta alati, kui tracerit ei kasutata teenuses v\u00f5i komponendis, siis <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/autowired\/\" class=\"user_link\">Autowired<\/a><\/noindex> Tracer ei pruugi t\u00f6\u00f6tada ja peate kasutama GlobalTracer.get().<\/li>\n<li>Annotatsioonid ei t\u00f6\u00f6ta, kui see ei ole komponent v\u00f5i teenus, v\u00f5i kui meetodi kutsumine toimub sama klassi naabermeetodist. Tuleb olla ettevaatlik, kontrollida, mida kasutatakse, ja kasutada k\u00e4sitsi j\u00e4lgimise loomist, kui @Traced ei t\u00f6\u00f6ta. Samuti v\u00f5ib lisada t\u00e4iendava kompilaatori Java annotatsioonide jaoks, siis peaksid need t\u00f6\u00f6tama igal pool.<\/li>\n<li>Vanades Spring ja Spring Boot versioonides ei t\u00f6\u00f6ta OpenTracing auto-konfiguratsioon Spring Cloudis DI vigade t\u00f5ttu. Kui soovite, et j\u00e4lgimised t\u00f6\u00f6taksid automaatselt Springi komponentides, siis saate toimida analoogselt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opentracing-contrib\/java-spring-jaeger\/blob\/master\/opentracing-spring-jaeger-starter\/src\/main\/java\/io\/opentracing\/contrib\/java\/spring\/jaeger\/starter\/JaegerAutoConfiguration.java\">github.com\/opentracing-contrib\/java-spring-jaeger\/blob\/master\/opentracing-spring-jaeger-starter\/src\/main\/java\/io\/opentracing\/contrib\/java\/spring\/jaeger\/starter\/JaegerAutoConfiguration.java<\/a><\/noindex><\/li>\n<li>Groovy's ei t\u00f6\u00f6ta try with resources; tuleb kindlasti kasutada try finally.<\/li>\n<li>Igale teenusele tuleb m\u00e4\u00e4rata oma spring.application.name, mille alusel j\u00e4lgimised logitakse. Lisaks peab olema eraldi nimi tootmis- ja testkeskkonna jaoks, et need omavahel ei segaks.<\/li>\n<li>Kui kasutada GlobalTracerit ja Tomcat'i, siis k\u00f5ik selles Tomcat'is k\u00e4ivitatud teenused jagavad \u00fcht GlobalTracerit, seega on neil k\u00f5igil sama teenuse nimi.<\/li>\n<li>T\u00f5rgete lisamisel meetodisse tuleb veenduda, et see ei kutsutaks ts\u00fcklis liiga palju kordi. Tuleb lisada \u00fcks \u00fchine j\u00e4lgimine k\u00f5igi kutsumiste jaoks, mis logib koguaeg. Vastasel juhul tekib liigset koormust.<\/li>\n<li>Kunagi jaeger-ui-s tegime liiga suuri p\u00e4ringuid suure hulga j\u00e4lgede kohta ja kuna me ootamist ei kannatanud, siis tegime uuesti. Tulemusena hakkas jaeger-query tarbima palju m\u00e4lu ja aeglustama elastikut. Aitas jaeger-query taask\u00e4ivitamine.<\/li>\n<\/ul>\n<h3>Proovide v\u00f5tmine, s\u00e4ilitamine ja j\u00e4lgede vaatamine.<\/h3>\n<p>\nOn kolm t\u00fc\u00fcpi. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jaegertracing.io\/docs\/1.9\/sampling\/\">j\u00e4lgede proovide v\u00f5tmine.<\/a><\/noindex>:<\/p>\n<ol>\n<li>Const, mis saadab ja salvestab k\u00f5ik j\u00e4ljed.<\/li>\n<li>Probabilistic, mis filtreerib j\u00e4lgi m\u00f5ne m\u00e4\u00e4ratud t\u00f5en\u00e4osusega.<\/li>\n<li>Ratelimiting, mis piirab j\u00e4lgede arvu sekundis. Need parameetrid saab seadistada kliendis, jaeger-agent'is v\u00f5i kollektoris. Praegu kasutatakse meie valideerimise stegis const 1, kuna p\u00e4ringuid ei ole liiga palju, kuid need kestavad kaua. Edasi, kui see tekitab s\u00fcsteemile liigset koormust, saab piirata.<\/li>\n<\/ol>\n<p>\nKui kasutada cassandrat, salvestab see vaikimisi j\u00e4ljed ainult kaheks p\u00e4evaks. Meil on kasutusel. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger\/tree\/master\/plugin\/storage\/es\">elasticsearch<\/a><\/noindex> jaeger'i j\u00e4ljed salvestatakse kogu aeg ja ei kustutata. Iga p\u00e4eva jaoks luuakse eraldi indeks, n\u00e4iteks jaeger-service-2019-03-04. Edasi tuleb seadistada automaatne vanade j\u00e4lgede puhastamine.<\/p>\n<p>J\u00e4lgede vaatamiseks tuleb:<\/p>\n<ul>\n<li>Valida teenus, mille j\u00e4rgi soovite j\u00e4lgi filtreerida, n\u00e4iteks tomcat7-default teenuse jaoks, mis on k\u00e4ivitatud Tomcatis ega saa omada oma nime.<\/li>\n<li>Edasi tuleb valida toiming, ajavahemik ja minimaalne operatiiviaeg, n\u00e4iteks alates 10 sekundist, et saada ainult pikki t\u00e4itmisi.<br \/>\n<img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/bc712d4aabfe9c2ae961d3b8f9396a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Siis liikuge \u00fchte j\u00e4lge ja vaadake, mis seal takerdus.<br \/>\n<img decoding=\"async\" alt=\"Teenuste j\u00e4lgimine, OpenTracing ja Jaeger\" src=\"\/wp-content\/uploads\/2019\/04\/16e9dd11903358f5498fe11034bbf848.png\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p>\nKui on tuntud m\u00f5ni p\u00e4ringu id, saab ka selle id j\u00e4rgi j\u00e4lje leida siltide otsingu kaudu, kui see id logitakse j\u00e4lje spaani.<\/p>\n<h3>Dokumentatsioon<\/h3>\n<p><\/p>\n<ul>\n<li>Opentracingi dokumentatsioon <noindex><a rel=\"nofollow\" href=\"https:\/\/opentracing.io\/docs\/overview\/what-is-tracing\/\">opentracing.io\/docs\/overview\/what-is-tracing<\/a><\/noindex><\/li>\n<li>Jaegeri dokumentatsioon <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jaegertracing.io\/docs\/1.10\/\">www.jaegertracing.io\/docs\/1.10<\/a><\/noindex><\/li>\n<li>Jaegeri Java \u00fchendamine <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger-client-java\">github.com\/jaegertracing\/jaeger-client-java<\/a><\/noindex><\/li>\n<li>Spring Opentracing \u00fchendamine<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger-client-java\">github.com\/jaegertracing\/jaeger-client-java<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opentracing-contrib\/java-spring-cloud\">github.com\/opentracing-contrib\/java-spring-cloud<\/a><\/noindex><\/li>\n<\/ul>\n<h3>Artiklid<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/carprice\/blog\/340946\/\">habr.com\/ru\/company\/carprice\/blog\/340946<\/a><\/noindex> Jaeger Opentracing ja mikroteenused reaalses projektis PHP ja Golangi peal<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/eng.uber.com\/distributed-tracing\/\">eng.uber.com\/distributed-tracing<\/a><\/noindex> Evolving Distributed Tracing at Uber Engineering<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opentracing.io\/guides\/java\/\">opentracing.io\/guides\/java<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/jaegertracing\/running-jaeger-agent-on-bare-metal-d1fc47d31fab\">medium.com\/jaegertracing\/running-jaeger-agent-on-bare-metal-d1fc47d31fab<\/a><\/noindex> Jaegeri agendi k\u00e4ivitamine f\u00fc\u00fcsilisel masinal<\/li>\n<\/ul>\n<h3>Video<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=qg0ENOdP1Lo\">www.youtube.com\/watch?v=qg0ENOdP1Lo<\/a><\/noindex> Kuidas me kasutasime Jaegerit ja Prometheust, et pakkuda vilkuvalt kiireid kasutaja p\u00e4ringuid \u2014 Bryan Boreham<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=WRntQsUajow\">www.youtube.com\/watch?v=WRntQsUajow<\/a><\/noindex> Sissejuhatus: Jaeger \u2014 Yuri Shkuro, Uber &amp; Pavol Loffay, Red Hat<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=fsHb0qK37bc\">www.youtube.com\/watch?v=fsHb0qK37bc<\/a><\/noindex> Serghei Iakovlev, \"V\u00e4ike lugu suurest v\u00f5idust: OpenTracing, AWS ja Jaeger\"<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/srg\/blog\/446752\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0443\u0437\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432. \u041f\u0440\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u043b\u043e\u0433-\u0444\u0430\u0439\u043b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u044d\u0442\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445. \u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22990,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31014","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0443\u0437\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432. \u041f\u0440\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u043b\u043e\u0433-\u0444\u0430\u0439\u043b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u044d\u0442\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445. \u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\" \/>\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\/trassirovka-servisov-opentracing-i-jaeger\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\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\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, OpenTracing \u0438 Jaeger | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0443\u0437\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432. \u041f\u0440\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u043b\u043e\u0433-\u0444\u0430\u0439\u043b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u044d\u0442\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445. \u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/trassirovka-servisov-opentracing-i-jaeger\" \/>\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:38:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:38:54+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\udd47Teenuste j\u00e4lgimine, OpenTracing ja Jaeger | ProHoster","description":"Meie projektides kasutame mikroteenuste arhitektuuri. Tootlikkuse kitsaskohtade ilmnemisel kulub palju aega j\u00e4lgimisele ja logide anal\u00fc\u00fcsimisele. Kui logitakse \u00fcksikute operatsioonide ajakava logifaili, on tavaliselt keeruline m\u00f5ista, mis viis nende operatsioonide kutsumiseni, tuvastada tegevuste j\u00e4rjestust v\u00f5i ajas nihke, mis \u00fchest operatsioonist teise erinevates teenustes. Selle minimeerimiseks","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/trassirovka-servisov-opentracing-i-jaeger","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\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, OpenTracing \u0438 Jaeger | ProHoster","og:description":"\u0412 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0443\u0437\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432. \u041f\u0440\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u043b\u043e\u0433-\u0444\u0430\u0439\u043b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u044d\u0442\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445. \u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/trassirovka-servisov-opentracing-i-jaeger","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:38:54+00:00","article:modified_time":"2019-10-31T18:38:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31014","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 04:06:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:26:04","updated":"2026-01-21 04:06:20"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/31014","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=31014"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/31014\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/22990"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=31014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=31014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=31014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}