{"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. J\u00f5udlusprobleemide ilmnemisel kulub palju aega j\u00e4lgimisele ja logide anal\u00fc\u00fcsimisele. Aegade logimine eri operatsioonide jaoks logifaili seab tavaliselt probleeme, kuna on keeruline m\u00f5ista, mis viis nende operatsioonide k\u00e4ivitamiseni, j\u00e4lgida toimingute j\u00e4rjestust v\u00f5i ajastuse nihkumist \u00fche operatsiooni suhtes teise vahel erinevates teenustes. <\/p>\n<p>K\u00e4sit\u00f6\u00f6 v\u00e4hendamiseks otsustasime kasutada \u00fchte j\u00e4lgimisriista. Sellest, kuidas ja miks 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\u00e4lgimisega lahendada<\/h3>\n<p><\/p>\n<ol>\n<li>Leida kitsaskohti j\u00f5udluses nii \u00fche teenuse sees kui ka kogu teostuse puus k\u00f5igi osalevate teenuste vahel. N\u00e4iteks:\n<ul>\n<li>Palju l\u00fchikesi j\u00e4rjestikuseid kutseid teenuste vahel, n\u00e4iteks geokodeerimise v\u00f5i andmebaasi p\u00e4ringute puhul.<\/li>\n<li>Pikad ootamised sisendi \/ v\u00e4ljundi osas, n\u00e4iteks andmete edastamine v\u00f5rgus v\u00f5i kettalt lugemine.<\/li>\n<li>Pikk andmete parsimine.<\/li>\n<li>Pikad operatsioonid, mis n\u00f5uavad CPU-d.<\/li>\n<li>Koodijupid, mis ei ole vajalikud l\u00f5pptulemuse saamiseks ja v\u00f5iksid olla eemaldatud v\u00f5i viidatud hiljem.<\/li>\n<\/ul>\n<\/li>\n<li>Selgelt m\u00f5ista, millises j\u00e4rjekorras asjad aset leiavad ja mis toimub, kui operatsioon k\u00e4ivitub.<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 \/>\nN\u00e4ha, et n\u00e4iteks p\u00e4ring tuli teenusesse WS -&gt; teenus WS t\u00e4iendas andmeid teenuse R kaudu -&gt; seej\u00e4rel saatis p\u00e4ringu teenusele V -&gt; teenus V laadis palju andmeid teenusest R -&gt; k\u00e4idi teenuses P -&gt; teenus P k\u00e4is veel kord teenuses R -&gt; teenus V ignoreeris tulemust ja l\u00e4ks teenusesse J -&gt; ja alles seej\u00e4rel naasis vastus teenusele WS, samal ajal j\u00e4tkates midagi muud taustal arvutamist.<br \/>\nIlma sellise j\u00e4lgimata v\u00f5i \u00fcksikasjaliku dokumentatsioonita kogu protsessi kohta on esmakordselt koodi vaadates v\u00e4ga keeruline m\u00f5ista, mis toimub, ja kood on hajutatud erinevatesse teenustesse ning peidetud mitmete beani ja liideste taha.\n<\/li>\n<li>Teostuse puu teabe kogumine edasiseks anal\u00fc\u00fcsiks. Igas teostusetapis saab j\u00e4lgisse lisada teavet, mis on sellel etapil saadaval, ja hiljem tuvastada, millised sisendi andmed viisid antud stsenaariumi ilmnemiseni. N\u00e4iteks:\n<ul>\n<li>Kasutaja ID<\/li>\n<li>\u00d5igused<\/li>\n<li>Valitud meetodi t\u00fc\u00fcp<\/li>\n<li>Log v\u00f5i t\u00f6\u00f6tluse viga<\/li>\n<\/ul>\n<\/li>\n<li>K\u00e4iguteede muutmine alameetriks ja edasine anal\u00fc\u00fcs metrikate kujul.<\/li>\n<\/ol>\n<h3>Mida suudab logida j\u00e4lgimine. Span<\/h3>\n<p>J\u00e4lgimises on m\u00f5isted span, mis on analoog \u00fchele logile, konsoolis. Spanil on:<\/p>\n<ul>\n<li>Nimi, tavaliselt meetodi nimi, mis viidi l\u00e4bi<\/li>\n<li>Teenuse nimi, milles span genereeriti<\/li>\n<li>Oma ainulaadne ID<\/li>\n<li>M\u00f5ni meta teave key\/value kujul, mis on sinna logitud. N\u00e4iteks meetodi parameetrid v\u00f5i see, kas meetod l\u00f5ppes veaga v\u00f5i mitte<\/li>\n<li>Span'i algus- ja l\u00f5ppkja aeg<\/li>\n<li>Vanema span'i ID<\/li>\n<\/ul>\n<p>\nIga span saadetakse spanide kollektsion\u00e4\u00e4rile, et salvestada see andmebaasi edasiseks vaatamiseks, niipea kui see on oma t\u00e4itmise l\u00f5petanud. Hiljem on v\u00f5imalik ehitada k\u00f5igi spanide puu, \u00fchendades neid vanema ID j\u00e4rgi. Anal\u00fc\u00fcsi k\u00e4igus on v\u00f5imalik leida n\u00e4iteks k\u00f5ik spandid m\u00f5nes teenuses, mis v\u00f5tsid rohkem aega kui teatud aeg. Edasi liikudes saab konkreetse span'i juurde minnes n\u00e4ha k\u00f5iki puu osi selle span'i kohal ja all.<\/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, Jaeger 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 peab koguma, mitte seondudes j\u00e4lgimise konkreetse teostusega m\u00f5nes keeles. N\u00e4iteks Java-s k\u00e4ib kogu j\u00e4lgimist\u00f6\u00f6tamine l\u00e4bi \u00fcldise API Opentrace, ja selle all v\u00f5ib peituda n\u00e4iteks Jaeger v\u00f5i t\u00fchi vaikimisi teostus, mis ei tee midagi.<br \/>\nMeie s\u00fcsteem kasutab <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jaegertracing.io\/\">Jaeger<\/a><\/noindex> kui Opentrace'i teostust. 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 on tavaliselt igas masinas ja kuhu logivad teenused kohalikke vaikimisi porte. Kui agenti pole, siis on k\u00f5igi selle masina teenuste j\u00e4lgimised tavaliselt v\u00e4lja l\u00fclitatud<\/li>\n<li>Jaeger-kollektor \u2014 kuhu k\u00f5ik agendid saadavad kogutud j\u00e4lgimised ning mis salvestab need valitud andmebaasi<\/li>\n<li>Andmebaas \u2014 nende eelistatuim on Cassandra, kuid meie kasutame Elasticsearchi, on olemas teostusi ka m\u00f5ne muu andmebaasi ja m\u00e4lu teostuse jaoks, mis ei salvestada midagi kettale<\/li>\n<li>Jaeger-k\u00fcsimus \u2014 see on teenus, mis l\u00e4heb andmebaasi ja toob juba kogutud j\u00e4lgimised anal\u00fc\u00fcsiks<\/li>\n<li>Jaeger-ui \u2014 see on veebirakendus j\u00e4lgimiste otsimiseks ja vaatamiseks, mis l\u00e4heb jaeger-k\u00fcsimusse<\/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 nimetada opentrace jaeger'i teostust konkreetsete keelte jaoks, mille kaudu span'id saadetakse jaeger-agenti.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger-client-java\">Jageri \u00fchendamine Java-s<\/a><\/noindex> see on n\u00e4htav, et rakendada liidest io.opentracing.Tracer, mille j\u00e4rel k\u00f5ik j\u00e4ljed suunatakse l\u00e4bi selle tegelikule agentile.<\/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 \u00fchendada <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opentracing-contrib\/java-spring-cloud\">opentracing-spring-cloud-starter<\/a><\/noindex> ja Jaegeri teostus <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\u00f5igile, mis l\u00e4bib neid komponente, n\u00e4iteks HTTP-p\u00e4ringud kontrolleritesse, andmebaasi p\u00e4ringud l\u00e4bi jdbc jne.<\/p>\n<h3>J\u00e4lgede logimine Java-s<\/h3>\n<p>\nKusagil k\u00f5ige k\u00f5rgeimal tasemel peaks olema loodud esimene Span, see v\u00f5ib toimuda automaatselt n\u00e4iteks Springi kontrolleri kaudu p\u00e4ringu saamisel v\u00f5i k\u00e4sitsi, kui sellist ei ole. Edasi edastatakse see alla Scope'i. Kui m\u00f5ni allolev meetod soovib lisada Span'i, v\u00f5tab ta Scope'ist praeguse activeSpan'i, loob uue Span'i ja m\u00e4\u00e4rab, et tema vanem on saadud activeSpan, ning teeb uue Span'i aktiivseks. V\u00e4listele teenustele edastatakse praegune aktiivne span ja need teenused loovad uued spanid, mis on seotud sellega.<br \/>\nKogu t\u00f6\u00f6 k\u00e4ib Tracer'i n\u00e4ite kaudu, mille saab saada DI mehhanismi abil v\u00f5i GlobalTracer.get() kui globaalse muutujana, kui DI mehhanism ei t\u00f6\u00f6ta. Kui tracer ei ole algselt initsialiseeritud, naaseb NoopTracer, mis ei tee midagi.<br \/>\nSeej\u00e4rel v\u00f5etakse tracer'ist l\u00e4bi ScopeManager'i praegune scope, luuakse uus scope praegusest, side uue span'iga, ja seej\u00e4rel suletakse loodud Scope, mis sulgeb loodud span'i ja taastab varasema Scope'i aktiivseks olekuks. Scope on seotud \u00fche niidiga, seet\u00f5ttu tuleb mitme niidi programmeerimisel meeles pidada, et edastada aktiivne span teisele niidile, et aktiveerida teise niidi Scope, mis on seotud selle span'iga.<\/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        \/\/ Tee asju.\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: aktiveeri span tagasi callbackis, edastades true\n            \/\/ startActive() juhul, kui span peab olema l\u00f5petatud.\n            try (Scope scope = tracer.scopeManager().activate(span, false)) {\n                ...\n            }\n        });\n    }\n}<\/code><\/pre>\n<p>Mitme l\u00f5ime programmeerimiseks on olemas TracedExecutorService ja sarnased wrapper'id, mis edastavad automaatselt praeguse spani l\u00f5ime, kui as\u00fcnkroonsed \u00fclesanded k\u00e4ivitatakse:<\/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>Beendid ja DI ei pruugi alati t\u00f6\u00f6tada, 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 tuleb kasutada 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 naabermetodist. Tuleb olla ettevaatlik, kontrollida, mis t\u00f6\u00f6tab, ja kasutada manuaalset j\u00e4lgimise loomist, kui @Traced ei t\u00f6\u00f6ta. Samuti saab lisada t\u00e4iendava kompilaatori java annotatsioonide jaoks, siis peaks need t\u00f6\u00f6tama igal pool.<\/li>\n<li>Vanades spring ja spring boot versioonides ei toimi opentracing spring cloud automaatne seadistamine DI vigade t\u00f5ttu, seega, kui soovite, et j\u00e4lgimised komponentides automaatselt t\u00f6\u00f6taksid, siis v\u00f5ib teha sarnaselt <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 toimi try with resources, tuleb kindlasti kasutada try finally.<\/li>\n<li>Iga teenuse kohta tuleb m\u00e4\u00e4rata oma spring.application.name, mille alusel j\u00e4lgimised logitakse. Eraldi nimi tootmises ja testimises, et nad koos ei seguneks.<\/li>\n<li>Kui kasutada GlobalTracerit ja tomcat, siis k\u00f5ik teenused, mis on selles tomcat'is k\u00e4ivitatud, jagavad \u00fchte GlobalTracerit, seega on k\u00f5igil sama teenuse nimi.<\/li>\n<li>J\u00e4lgimiste lisamisel meetodisse tuleb olla kindel, et seda ei kutsuta ts\u00fcklis liiga sageli. Tuleb lisada \u00fcks \u00fchine j\u00e4lgimine k\u00f5igile kutsetele, mis logib koguaegade kokku. Vastasel juhul tekib liigset koormust.<\/li>\n<li>Kord, kui jaeger-ui's tehti liiga suuri p\u00e4ringuid suure hulga j\u00e4lgimiste kohta ja kuna ei oodatud vastust, tehti see uuesti. Tulemuseks oli, et jaeger-query hakkas kasutama palju m\u00e4lu ja aeglustas elastikut. Taastas jaeger-query'i taask\u00e4ivitamine aitas.<\/li>\n<\/ul>\n<h3>J\u00e4lgimiste prooviv\u00f5tt, salvestamine ja vaatamine<\/h3>\n<p>\nOn kolm t\u00fc\u00fcpi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jaegertracing.io\/docs\/1.9\/sampling\/\">j\u00e4lgimise prooviv\u00f5tt<\/a><\/noindex>:<\/p>\n<ol>\n<li>Const, mis saadab ja salvestab k\u00f5ik j\u00e4lgimised.<\/li>\n<li>Probabilistic, mis filtreerib j\u00e4lgimisi kindla t\u00f5en\u00e4osusega.<\/li>\n<li>Ratelimiting, mis piirab tehingute arvu sekundis. Nende parameetreid saab seadistada kliendil, kas jaeger-agendis v\u00f5i kogujas. Praegu on meil rakendustes kasutusel const 1, kuna p\u00e4ringute arv ei ole liiga suur, kuid need v\u00f5tavad aega. Edasi, kui see s\u00fcsteemile liiga palju koormust tekitab, saab piirata.<\/li>\n<\/ol>\n<p>\nKui kasutada cassandrat, siis salvestab see tehingud vaikimisi ainult kaheks p\u00e4evaks. Meie puhul kasutatakse <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger\/tree\/master\/plugin\/storage\/es\">elasticsearch<\/a><\/noindex> ja tehingud salvestatakse kogu aeg ja ei kustutata. Igal p\u00e4eval luuakse eraldi indeks, n\u00e4iteks jaeger-service-2019-03-04. Tulevikus tuleb seadistada automaatne vana tehingu kustutamine.<\/p>\n<p>Tehingute vaatamiseks tuleks:<\/p>\n<ul>\n<li>Valida teenus, mille p\u00f5hjal soovid tehinguid filtreerida, n\u00e4iteks tomcat7-default teenuse puhul, mis on k\u00e4ivitatud tomcat-is ega saa omada oma nime.<\/li>\n<li>Seej\u00e4rel valida operatsioon, ajavahemik ja minimaalne operatsiooni aeg, n\u00e4iteks alates 10 sekundist, et v\u00f5tta ainult pikki t\u00e4itmisperioode.<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>Liikuda \u00fche tehingu juurde ja vaadata, mis seal takistab.<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>\nSamuti, kui on teada m\u00f5ni p\u00e4ringu ID, siis saab leida tehingu selle ID kaudu, otsides silte, kui see ID logitakse tehingu span'i.<\/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> Running Jaeger Agent on bare metal<\/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> How We Used Jaeger and Prometheus to Deliver Lightning-Fast User Queries \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> Intro: 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 5.0.1.1 - 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.\" \/>\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) 5.0.1.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\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.\" \/>\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 mikroteenuseid.","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.","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","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\/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}]}}