{"id":2613,"date":"2018-07-16T07:00:52","date_gmt":"2018-07-16T01:30:52","guid":{"rendered":"http:\/\/www.upnxtblog.com\/?p=2613"},"modified":"2021-05-27T16:02:09","modified_gmt":"2021-05-27T10:32:09","slug":"kubernetes-tutorial-distributed-tracing-with-jaeger","status":"publish","type":"post","link":"https:\/\/www.upnxtblog.com\/index.php\/2018\/07\/16\/kubernetes-tutorial-distributed-tracing-with-jaeger\/","title":{"rendered":"Kubernetes Tutorial : Distributed tracing with Jaeger"},"content":{"rendered":"<div class='booster-block booster-read-block'><\/div><p><a href=\"https:\/\/github.com\/jaegertracing\/jaeger\" target=\"_blank\" rel=\"noopener\"><strong>Jaeger<\/strong><\/a> is an open-source distributed tracing system by <a href=\"http:\/\/uber.github.io\/\" target=\"_blank\" rel=\"noopener\">Uber Technologies<\/a>. Like <a href=\"https:\/\/research.google.com\/pubs\/pub36356.html\" target=\"_blank\" rel=\"noopener\">Dapper<\/a> or <a href=\"http:\/\/www.upnxtblog.com\/index.php\/2017\/11\/01\/zipkin-distributed-tracing-system\/\">Zipkin<\/a>, it is used for monitoring and troubleshooting microservices-based distributed systems. In this post, we are going to look at how to deploy Jaeger to the Kubernetes cluster.<\/p>\n<p>This quickstart assumes a basic understanding of Kubernetes <a href=\"http:\/\/www.upnxtblog.com\/index.php\/2017\/11\/13\/kubernetes-platform-intro-key-concepts\/\">concepts<\/a>, please refer to earlier posts for understanding on Kubernetes &amp; how to create, deploy &amp; rollout <a href=\"http:\/\/www.upnxtblog.com\/index.php\/2017\/11\/20\/kubernetes-tutorial-scale-perform-updates-app\/\">updates<\/a> to the cluster.<\/p>\n<figure style=\"width: 319px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" loading=\"lazy\" class=\"\" src=\"https:\/\/camo.githubusercontent.com\/afa87494e0753b4b1f5719a2f35aa5263859dffb\/687474703a2f2f6a61656765722e72656164746865646f63732e696f2f656e2f6c61746573742f696d616765732f6a61656765722d766563746f722e737667\" alt=\"Jaeger Distributed Tracing\" width=\"319\" height=\"319\" \/><figcaption class=\"wp-caption-text\">Image &#8211; Jaeger Distributed Tracing<\/figcaption><\/figure>\n\n<h2>#1.Why Distributed Tracing?<\/h2>\n<p>In the Microservices architecture, the application is usually structured as a set of loosely coupled, collaborating services. Each service implements a set of related functions. For example, an application might consist of services such as the order management service, the customer management service, etc. Services communicate using either synchronous protocols such as HTTP\/REST or asynchronous protocols such as AMQP. Services can be developed and deployed independently of one another. Each service has its own database in order to be decoupled from other services. For more intro on Microservice architecture, check out <a href=\"http:\/\/www.upnxtblog.com\/index.php\/2018\/03\/12\/introduction-to-microservices\/\">here<\/a>.<\/p>\n<p>Service requests often span multiple services. Each service handles a request by performing one or more operations, e.g. database queries, publishes messages, etc. To understand the behavior of an application and troubleshoot problems there is a need to monitor each service but if you use any of the external monitoring tools, it only tells you the overall response time and number of invocations but there would be no insight into the individual operations. To understand how each service is performing we would need to instrument services with code that will do the following<\/p>\n<ol>\n<li>Assign each external request a <em>unique external request id<\/em><\/li>\n<li>Pass the<em> external request id<\/em> to all services that are involved in handling the request<\/li>\n<li>Include the <em>external request id<\/em> in all log messages<\/li>\n<li>Record information <em>(e.g. start time, end time)<\/em> about the requests and operations performed when handling an external request in a centralized service<\/li>\n<\/ol>\n<p>So this where Jaeger can help us, it supports the OpenTracing initiative and can be used for monitoring microservices-based distributed systems:<\/p>\n<ul>\n<li>Distributed context propagation<\/li>\n<li>Distributed transaction monitoring<\/li>\n<li>Root cause analysis<\/li>\n<li>Service dependency analysis<\/li>\n<li>Performance \/ latency optimization<\/li>\n<\/ul>\n<h2>#2.Key Features of Jaeger<\/h2>\n<ul>\n<li><strong>High Scalability<\/strong> &#8211; Jaeger backend is designed to have no single point of failure and to scale with the business needs.<\/li>\n<li><strong>Native support for OpenTracing<\/strong> &#8211; Jaeger backend, Web UI, and instrumentation libraries have been designed from the ground up to support the OpenTracing standard.<\/li>\n<li><strong>Storage Backend<\/strong> &#8211; Jaeger supports two popular open-source NoSQL databases as trace storage backends: Cassandra 3.4+ and Elasticsearch 5.x\/6.x.<\/li>\n<li><strong>Modern UI<\/strong> &#8211; Jaeger Web UI is implemented in Javascript using popular open-source frameworks like React.<\/li>\n<li><strong>Cloud-Native Deployment<\/strong> &#8211; Jaeger backend is distributed as a collection of Docker images. Deployment to Kubernetes clusters is assisted by Kubernetes templates and a Helm chart.<\/li>\n<li>All Jaeger backend components expose\u00a0<a href=\"http:\/\/www.upnxtblog.com\/index.php\/2018\/05\/11\/prometheus-open-source-systems-monitoring-and-alerting-toolkit\/\"><strong>Prometheus<\/strong>\u00a0<\/a>metrics by default.<\/li>\n<\/ul>\n<h2>#3.Jaeger Architecture<\/h2>\n<figure style=\"width: 866px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-src=\"https:\/\/i0.wp.com\/www.jaegertracing.io\/img\/architecture-v1.png?resize=866%2C465&#038;ssl=1\" alt=\"Jaeger Tracing Architecture\" width=\"866\" height=\"465\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 866px; --smush-placeholder-aspect-ratio: 866\/465;\" \/><figcaption class=\"wp-caption-text\">Image &#8211; Jaeger Tracing Architecture<\/figcaption><\/figure>\n<p>Following are the Key components of Jaeger<\/p>\n<ul>\n<li><strong>Jaeger clients:<\/strong> These are language-specific implementations of the <a href=\"http:\/\/opentracing.io\/\" target=\"_blank\" rel=\"noopener\">OpenTracing API<\/a>. They can be used to instrument applications for distributed tracing either manually or with open source frameworks. Jaeger\u2019s clients adhere to the data model described in the <a href=\"https:\/\/github.com\/opentracing\/specification\/blob\/master\/specification.md\" target=\"_blank\" rel=\"noopener\">OpenTracing<\/a> standard.<\/li>\n<li><strong>Jaeger agent:<\/strong>\u00a0Network daemon that listens for spans sent over UDP, which it batches and sends to the collector.<\/li>\n<li><strong> Jaeger collector:<\/strong>\u00a0Receives traces from Jaeger agents and runs them through a processing pipeline.<\/li>\n<li><b>Query:<\/b> Service that retrieves traces from storage and hosts a UI to display them.<\/li>\n<\/ul>\n<p>An instrumented service creates\u00a0<span class=\"tooltip is-tooltip-multiline\" data-tooltip=\"A span represents a logical unit of work in Jaeger that has an operation name, the start time of the operation, and the duration. Spans may be nested and ordered to model causal relationships.\">spans<\/span>\u00a0when receiving new requests and attaches context information (<em><span class=\"tooltip is-tooltip-multiline\" data-tooltip=\"A trace is a data\/execution path through the system, and can be thought of as a directed acyclic graph of spans.\">trace<\/span>\u00a0id, span id, and baggage<\/em>) to outgoing requests. This instrumentation has very little overhead and is designed to be always enabled in production.<\/p>\n<p><strong>Span<\/strong> represents a logical unit of work in Jaeger that has an operation name, the start time of the operation, and the duration. Spans may be nested and ordered to model causal relationships.\u00a0<strong>Trace<\/strong> is a data\/execution path through the system and can be thought of as a directed acyclic graph of\u00a0spans.<\/p>\n<figure style=\"width: 482px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-src=\"https:\/\/i0.wp.com\/www.jaegertracing.io\/img\/spans-traces.png?resize=482%2C323&#038;ssl=1\" alt=\"Distributed Tracing -Trace &amp; Spans\" width=\"482\" height=\"323\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 482px; --smush-placeholder-aspect-ratio: 482\/323;\" \/><figcaption class=\"wp-caption-text\">Image &#8211; Distributed Tracing -Trace &amp; Spans<\/figcaption><\/figure>\n<p>In the next section, we will learn how to deploy Jaeger on the Kubernetes cluster.<\/p>\n<h2>#4.Deploy Jaeger Template on Kubernetes Cluster<\/h2>\n<p>Assuming you already have the Kubernetes cluster ready, Deploying Jaeger is just a simple 1-step procedure. If you want to set up the Kubernetes cluster and get a basic understanding of Kubernetes <a href=\"http:\/\/www.upnxtblog.com\/index.php\/2017\/11\/13\/kubernetes-platform-intro-key-concepts\/\">concepts<\/a>, please refer to earlier posts for understanding on Kubernetes &amp; how to create, deploy &amp; rollout <a href=\"http:\/\/www.upnxtblog.com\/index.php\/2017\/11\/20\/kubernetes-tutorial-scale-perform-updates-app\/\">updates<\/a> to the cluster.<\/p>\n<p>Execute <code>kubectl create<\/code> deployment on your cluster. What I have is just a sample template and not to be used in a production environment.<\/p>\n<p><code>kubectl create -f https:\/\/raw.githubusercontent.com\/jaegertracing\/jaeger-kubernetes\/master\/all-in-one\/jaeger-all-in-one-template.yml<\/code><\/p>\n<figure id=\"attachment_2615\" aria-describedby=\"caption-attachment-2615\" style=\"width: 1253px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2615\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2018\/07\/16\/kubernetes-tutorial-distributed-tracing-with-jaeger\/jag1\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?fit=1253%2C228&amp;ssl=1\" data-orig-size=\"1253,228\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"jag1\" data-image-description=\"&lt;p&gt;Jaeger Template deployment&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Jaeger Template deployment&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?fit=1024%2C186&amp;ssl=1\" class=\"size-full wp-image-2615 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?resize=1140%2C207\" alt=\"Jaeger Template deployment\" width=\"1140\" height=\"207\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?w=1253&amp;ssl=1 1253w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?resize=300%2C55&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?resize=768%2C140&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?resize=1024%2C186&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag1.png?resize=1100%2C200&amp;ssl=1 1100w\" data-sizes=\"auto, (max-width: 1140px) 100vw, 1140px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1140px; --smush-placeholder-aspect-ratio: 1140\/207;\" \/><figcaption id=\"caption-attachment-2615\" class=\"wp-caption-text\">Image &#8211; Jaeger Template deployment<\/figcaption><\/figure>\n<p>Post <code>Kubectl create<\/code> command, you can use <code>Kubectl get<\/code> command to see the deployments.<\/p>\n<figure id=\"attachment_2616\" aria-describedby=\"caption-attachment-2616\" style=\"width: 1080px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2616\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2018\/07\/16\/kubernetes-tutorial-distributed-tracing-with-jaeger\/jag2\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag2.png?fit=1080%2C359&amp;ssl=1\" data-orig-size=\"1080,359\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"jag2\" data-image-description=\"&lt;p&gt;Kubectl get deployments command&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Kubectl get deployments command&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag2.png?fit=1024%2C340&amp;ssl=1\" class=\"size-full wp-image-2616 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag2.png?resize=1080%2C359\" alt=\"Kubectl get deployments command\" width=\"1080\" height=\"359\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag2.png?w=1080&amp;ssl=1 1080w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag2.png?resize=300%2C100&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag2.png?resize=768%2C255&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag2.png?resize=1024%2C340&amp;ssl=1 1024w\" data-sizes=\"auto, (max-width: 1080px) 100vw, 1080px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1080px; --smush-placeholder-aspect-ratio: 1080\/359;\" \/><figcaption id=\"caption-attachment-2616\" class=\"wp-caption-text\">Image &#8211; Kubectl get deployments command<\/figcaption><\/figure>\n<p>Use\u00a0<code>kubectl get service jaeger-query<\/code>\u00a0to find Jaeger URL.<\/p>\n<figure id=\"attachment_2617\" aria-describedby=\"caption-attachment-2617\" style=\"width: 872px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2617\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2018\/07\/16\/kubernetes-tutorial-distributed-tracing-with-jaeger\/jag3\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag3.png?fit=872%2C158&amp;ssl=1\" data-orig-size=\"872,158\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"jag3\" data-image-description=\"&lt;p&gt;Get Jaeger URL&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Get Jaeger URL&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag3.png?fit=872%2C158&amp;ssl=1\" class=\"size-full wp-image-2617 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag3.png?resize=872%2C158\" alt=\"Get Jaeger URL\" width=\"872\" height=\"158\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag3.png?w=872&amp;ssl=1 872w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag3.png?resize=300%2C54&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/06\/jag3.png?resize=768%2C139&amp;ssl=1 768w\" data-sizes=\"auto, (max-width: 872px) 100vw, 872px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 872px; --smush-placeholder-aspect-ratio: 872\/158;\" \/><figcaption id=\"caption-attachment-2617\" class=\"wp-caption-text\">Image &#8211; Get Jaeger URL<\/figcaption><\/figure>\n<p>To understand what we have accomplished, the Jaeger template has instrumented services with code that will do the following<\/p>\n<ol>\n<li>Assign each external request a <em>unique external request id<\/em><\/li>\n<li>Pass the<em> external request id<\/em> to all services that are involved in handling the request<\/li>\n<li>Include the <em>external request id<\/em> in all log messages<\/li>\n<li>Record information <em>(e.g. start time, end time)<\/em> about the requests and operations performed when handling an external request in a centralized service<\/li>\n<\/ol>\n<p><em>Congrats! today we have learned what is Jaeger tracing &amp; how to do deploy it to the Kubernetes cluster.<\/em><\/p>\n<p>If you&#8217;re looking to run along with Helm, check out, <a href=\"https:\/\/github.com\/kubernetes\/charts\/tree\/master\/incubator\/jaeger\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<h2>#5.Sample Traces View<\/h2>\n<figure style=\"width: 829px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-src=\"https:\/\/i0.wp.com\/www.jaegertracing.io\/img\/traces-ss.png?resize=829%2C578&#038;ssl=1\" alt=\"Jaeger Traces\" width=\"829\" height=\"578\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 829px; --smush-placeholder-aspect-ratio: 829\/578;\" \/><figcaption class=\"wp-caption-text\">Image &#8211; Jaeger Traces<\/figcaption><\/figure>\n<figure style=\"width: 877px\" class=\"wp-caption alignnone\"><img data-recalc-dims=\"1\" decoding=\"async\" style=\"--smush-placeholder-width: 877px; --smush-placeholder-aspect-ratio: 877\/481;font-family: inherit; font-style: inherit; font-weight: inherit;\" data-src=\"https:\/\/i0.wp.com\/www.jaegertracing.io\/img\/trace-detail-ss.png?resize=877%2C481&#038;ssl=1\" alt=\"Trace Detail View\" width=\"877\" height=\"481\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/><figcaption class=\"wp-caption-text\">Image &#8211; Traces Detail View<\/figcaption><\/figure>\n<p><em><strong>Like this post? Don\u2019t forget to share it!<\/strong><\/em><\/p>\n<h2>Useful Resources :<\/h2>\n<ul>\n<li>Jaeger <a href=\"https:\/\/github.com\/jaegertracing\" target=\"_blank\" rel=\"noopener\">Github<\/a><\/li>\n<li>Kubectl <a href=\"https:\/\/kubernetes.io\/docs\/user-guide\/kubectl-cheatsheet\/\" target=\"_blank\" rel=\"noopener\">cheat sheet<\/a><\/li>\n<li><a href=\"https:\/\/www.jaegertracing.io\/docs\/1.14\/troubleshooting\/\" target=\"_blank\" rel=\"noopener\">Troubleshooting Guide<\/a><\/li>\n<li><a href=\"https:\/\/www.upnxtblog.com\/index.php\/2017\/11\/01\/zipkin-distributed-tracing-system\/\">Zipkin distributed tracing system<\/a><\/li>\n<li>Take a free course on <a href=\"https:\/\/click.linksynergy.com\/link?id=Iw3eNVqXX5w&amp;offerid=759505.14021095814&amp;type=2&amp;murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Fgoogle-cloud-java-spring\" target=\"_blank\" rel=\"noopener\">Building Scalable Java Microservices with Spring Boot and Spring Cloud<\/a><\/li>\n<li><a href=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/03\/05\/monitoring-docker-containers-using-prometheus-cadvisor-grafana\/\">Monitoring Docker containers using Prometheus + cAdvisor + Grafana<\/a><\/li>\n<li><a href=\"https:\/\/www.upnxtblog.com\/index.php\/2018\/11\/12\/10-best-kubernetes-monitoring-tools\/\">10 BEST Kubernetes monitoring tools<\/a><\/li>\n<li><a href=\"https:\/\/www.upnxtblog.com\/index.php\/2020\/04\/15\/what-are-the-key-kubernetes-metrics-that-you-have-to-monitor\/\">What are the key Kubernetes metrics that you have to monitor ?<\/a><\/li>\n<li><a href=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/08\/14\/google-cloud-courses-collection\/\">Google Cloud Courses Collection<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Jaeger is an open-source distributed tracing system by Uber Technologies. Like Dapper or Zipkin, it is used for monitoring and troubleshooting microservices-based distributed systems. In this post, we are going to look at how to deploy Jaeger to the Kubernetes cluster. This quickstart assumes a basic understanding of Kubernetes concepts, please refer to earlier posts [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1031,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[311,146],"tags":[269,149],"class_list":["post-2613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kubernetes","category-cloud","tag-jaeger","tag-kubernetes"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9fbQS-G9","jetpack-related-posts":[{"id":2841,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/08\/27\/4-best-kubernetes-articles\/","url_meta":{"origin":2613,"position":0},"title":"4 BEST Kubernetes articles from Upnxtblog","author":"Karthik","date":"August 27, 2018","format":false,"excerpt":"This is the best compilation of 4\u00a0Kubernetes articles from Upnxtblog. As you're aware Kubernetes is a production-ready, open-source platform designed with Google's accumulated experience in container orchestration, combined with best-of-breed ideas from the community. It is designed to automate deploying, scaling, and operating application containers. Kubernetes coordinates a highly available\u2026","rel":"","context":"In &quot;Kubernetes Guides&quot;","block_context":{"text":"Kubernetes Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/kubernetes\/"},"img":{"alt_text":"kubernetes logo","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":2831,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/08\/20\/5-best-and-the-most-popular-reads-for-july-2018\/","url_meta":{"origin":2613,"position":1},"title":"5 best and the most popular reads for July 2018","author":"Karthik","date":"August 20, 2018","format":false,"excerpt":"Here are 5 best and the most popular reads for July 2018. We hope you enjoy reading and treasure them. #1.Kubernetes Tutorial : Distributed tracing with Jaeger Jaeger is a distributed tracing system released as open source by Uber Technologies. Like Dapper or ZipKin,it is used for monitoring and troubleshooting\u2026","rel":"","context":"In &quot;Trending&quot;","block_context":{"text":"Trending","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/trending\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3304,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/12\/13\/20-best-and-the-most-popular-reads-for-this-year\/","url_meta":{"origin":2613,"position":2},"title":"20 BEST and the most popular reads for this year","author":"Karthik","date":"December 13, 2018","format":false,"excerpt":"Here are 20 best and the most popular reads for this year,hope you would love this compilation.As always, please feel free to leave your comment in case of any questions or additional inputs. Happy Holidays and Good Luck! #1.TOP 6 GUI tools for managing Docker environments In this post,we take\u2026","rel":"","context":"In &quot;Trending&quot;","block_context":{"text":"Trending","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/trending\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":5923,"url":"https:\/\/www.upnxtblog.com\/index.php\/2020\/12\/25\/top-10-posts-for-this-year-2020\/","url_meta":{"origin":2613,"position":3},"title":"TOP 10 Posts for this year 2020","author":"Karthik","date":"December 25, 2020","format":false,"excerpt":"Here are TOP 10 best and the most popular reads for this year, hope you would love this compilation. As always, please feel free to leave your comment in case of any questions or additional inputs. Happy Holidays and Good Luck! #1.TOP 6 GUI tools for managing Docker environments As\u2026","rel":"","context":"In &quot;Trending&quot;","block_context":{"text":"Trending","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/trending\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2020\/12\/upnxtblog-banner-1.png?fit=300%2C350&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":5633,"url":"https:\/\/www.upnxtblog.com\/index.php\/2020\/07\/10\/how-to-setup-2-node-cluster-on-k3s\/","url_meta":{"origin":2613,"position":4},"title":"How to setup 2 node cluster on k3s?","author":"Karthik","date":"July 10, 2020","format":false,"excerpt":"In this post, we are going to take look at Lightweight Kubernetes engine k3s that can run on edge, IoT, and appliances. Rancher k3s is great for offline development, prototyping, and testing purpose. You can very well use it on a VM as a small, cheap, reliable k8s for CI\/CD.\u2026","rel":"","context":"In &quot;Kubernetes Guides&quot;","block_context":{"text":"Kubernetes Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/kubernetes\/"},"img":{"alt_text":"kubernetes logo","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":4594,"url":"https:\/\/www.upnxtblog.com\/index.php\/2019\/12\/27\/get-smallest-fastest-fully-conformant-microk8s-kubernetes\/","url_meta":{"origin":2613,"position":5},"title":"Get smallest, fastest, fully-conformant MicroK8s Kubernetes","author":"Karthik","date":"December 27, 2019","format":false,"excerpt":"Kubernetes as we know coordinates a highly available cluster of computers that are connected to work as a single unit. Kubernetes contains a number of abstractions that allow the deployment of containerized applications to the cluster without attaching them to individual machines. In short, Kubernetes is - Portable: public, private,\u2026","rel":"","context":"In &quot;Kubernetes Guides&quot;","block_context":{"text":"Kubernetes Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/kubernetes\/"},"img":{"alt_text":"kubernetes logo","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/comments?post=2613"}],"version-history":[{"count":3,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2613\/revisions"}],"predecessor-version":[{"id":6312,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2613\/revisions\/6312"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/media\/1031"}],"wp:attachment":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/media?parent=2613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/categories?post=2613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/tags?post=2613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}