{"id":240,"date":"2025-10-11T05:55:00","date_gmt":"2025-10-11T05:55:00","guid":{"rendered":"https:\/\/harshad-sonawane.com\/blog\/?p=240"},"modified":"2025-09-09T13:18:01","modified_gmt":"2025-09-09T13:18:01","slug":"opentelemetry-java-microservices-tracing","status":"publish","type":"post","link":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/","title":{"rendered":"Implementing Distributed Tracing with OpenTelemetry in Java Microservices"},"content":{"rendered":"\n<p>As <a href=\"https:\/\/harshad-sonawane.com\/blog\/build-high-performance-java-apis-using-grpc\/\">microservices<\/a> scale in complexity, debugging issues across multiple services becomes increasingly difficult. Traditional logging falls short when tracking a request across boundaries. This is where <strong>distributed tracing<\/strong> plays a crucial role.<\/p>\n\n\n\n<p>In this blog, we\u2019ll explore how to implement distributed tracing in <a href=\"https:\/\/harshad-sonawane.com\/blog\/reduce-cloud-costs-java-applications\/\">Java<\/a> microservices using <strong>OpenTelemetry<\/strong>, an open-source observability framework backed by the Cloud Native Computing Foundation (CNCF). You\u2019ll learn how to capture spans, export traces, and integrate with popular tracing tools like Jaeger or Zipkin.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">What Is Distributed Tracing?<\/h2>\n\n\n\n<p>Distributed tracing provides visibility into the flow of requests across service boundaries. It answers key questions such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Where is latency introduced?<\/li>\n\n\n\n<li>Which service failed?<\/li>\n\n\n\n<li>What is the full path of a request?<\/li>\n<\/ul>\n\n\n\n<p>Each trace is composed of <strong>spans<\/strong>, which represent units of work (e.g., HTTP calls, DB queries). When linked, these spans form a full picture of the request&#8217;s journey.<\/p>\n\n\n\n<p>\ud83d\udcda Reference: <a>OpenTelemetry Overview<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Why Use OpenTelemetry?<\/h2>\n\n\n\n<p>OpenTelemetry is a vendor-neutral standard for collecting telemetry (traces, metrics, logs). Key benefits include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unified instrumentation across languages<\/li>\n\n\n\n<li>Works with Jaeger, Zipkin, Prometheus, and others<\/li>\n\n\n\n<li>Integrates easily with Java libraries and Spring Boot<\/li>\n\n\n\n<li>Supported by CNCF and cloud providers (<a href=\"https:\/\/harshad-sonawane.com\/blog\/choosing-right-cloud-database-rds-dynamodb-aurora-documentdb\/\">AWS<\/a>, GCP, Azure)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Key OpenTelemetry Components<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SDK<\/strong>: Client-side instrumentation<\/li>\n\n\n\n<li><strong>Collector<\/strong>: Aggregates and exports data<\/li>\n\n\n\n<li><strong>Exporter<\/strong>: Sends telemetry to observability platforms<\/li>\n\n\n\n<li><strong>Auto-Instrumentation<\/strong>: Adds spans without code changes<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Setting Up OpenTelemetry in Java Microservices<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Add Dependencies (Maven)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">xmlCopyEdit<code>&lt;dependency&gt;\n  &lt;groupId&gt;io.opentelemetry&lt;\/groupId&gt;\n  &lt;artifactId&gt;opentelemetry-api&lt;\/artifactId&gt;\n  &lt;version&gt;1.32.0&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;io.opentelemetry&lt;\/groupId&gt;\n  &lt;artifactId&gt;opentelemetry-sdk&lt;\/artifactId&gt;\n  &lt;version&gt;1.32.0&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;io.opentelemetry&lt;\/groupId&gt;\n  &lt;artifactId&gt;opentelemetry-exporter-otlp&lt;\/artifactId&gt;\n  &lt;version&gt;1.32.0&lt;\/version&gt;\n&lt;\/dependency&gt;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Configure the Tracer<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">javaCopyEdit<code>OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()\n    .setTracerProvider(SdkTracerProvider.builder()\n        .addSpanProcessor(SimpleSpanProcessor.create(OtlpGrpcSpanExporter.builder().build()))\n        .build())\n    .build();\n\nTracer tracer = openTelemetry.getTracer(\"my-service\");\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Create Custom Spans<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">javaCopyEdit<code>Span span = tracer.spanBuilder(\"order-service-call\").startSpan();\ntry (Scope scope = span.makeCurrent()) {\n    \/\/ business logic\n    orderService.call();\n} finally {\n    span.end();\n}\n<\/code><\/pre>\n\n\n\n<p>You can trace downstream HTTP clients, <a href=\"https:\/\/harshad-sonawane.com\/blog\/building-real-time-applications-java-architecture-frameworks\/\">Kafka<\/a> producers, DB calls, and more.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Run the OpenTelemetry Collector<\/h3>\n\n\n\n<p>Use Docker to spin up the collector:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bashCopyEdit<code>docker run -p 4317:4317 -p 55681:55681 otel\/opentelemetry-collector-contrib\n<\/code><\/pre>\n\n\n\n<p>Configure the collector to export to Jaeger or Zipkin.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Auto-Instrumentation for Spring Boot<\/h2>\n\n\n\n<p>OpenTelemetry Java Agent offers <strong>zero-code instrumentation<\/strong> for Spring Boot apps:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Usage:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">bashCopyEdit<code>java -javaagent:opentelemetry-javaagent.jar \\\n     -Dotel.service.name=payment-service \\\n     -Dotel.exporter.otlp.endpoint=http:\/\/localhost:4317 \\\n     -jar your-spring-boot-app.jar\n<\/code><\/pre>\n\n\n\n<p>This automatically traces:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>REST controllers<\/li>\n\n\n\n<li>WebClient or RestTemplate<\/li>\n\n\n\n<li>Kafka producers\/consumers<\/li>\n\n\n\n<li>JDBC queries<\/li>\n<\/ul>\n\n\n\n<p>\ud83d\udcda Reference: <a>OpenTelemetry Java Agent Docs<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Exporting Traces<\/h2>\n\n\n\n<p>OpenTelemetry supports exporters like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OTLP<\/strong> (OpenTelemetry Protocol)<\/li>\n\n\n\n<li><strong>Jaeger<\/strong><\/li>\n\n\n\n<li><strong>Zipkin<\/strong><\/li>\n\n\n\n<li><strong>Prometheus (for metrics)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>You can visualize traces in Jaeger:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bashCopyEdit<code>docker run -d -p 16686:16686 -p 6831:6831\/udp jaegertracing\/all-in-one\n<\/code><\/pre>\n\n\n\n<p>Visit: <code>http:\/\/localhost:16686<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Name spans meaningfully<\/strong> (e.g., <code>get-user<\/code>, <code>checkout<\/code>)<\/li>\n\n\n\n<li><strong>Use baggage and context propagation<\/strong> to correlate requests<\/li>\n\n\n\n<li><strong>Avoid sampling everything in production<\/strong>\u2014control trace volume<\/li>\n\n\n\n<li><strong>Instrument third-party libraries using interceptors<\/strong><\/li>\n\n\n\n<li><strong>Secure trace data<\/strong> if it includes sensitive user info<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Benefits of Distributed Tracing<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Faster debugging and root-cause analysis<\/li>\n\n\n\n<li>Service-level latency and error tracking<\/li>\n\n\n\n<li>Performance optimization insights<\/li>\n\n\n\n<li>Better SLAs and SLO visibility<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Implementing distributed tracing with OpenTelemetry in <a href=\"https:\/\/harshad-sonawane.com\/blog\/java-microservices-vs-go-microservices-when-to-choose-what\/\">Java microservices<\/a> unlocks deep observability, accelerates troubleshooting, and boosts reliability. Whether you\u2019re debugging a production issue or optimizing service performance, tracing provides the visibility needed in modern cloud-native systems.<\/p>\n\n\n\n<p>With Spring Boot, OpenTelemetry setup is straightforward\u2014especially with auto-instrumentation and the Java agent. Embrace distributed tracing early to build resilient, transparent systems.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"o-typing-delay-100ms ticss-27f7e3e9\"><o-anim-typing>&lt;> <strong>&#8220;Happy developing, one line at a time!&#8221;<\/strong> &lt;\/><\/o-anim-typing><\/p>\n","protected":false},"excerpt":{"rendered":"<p>As microservices scale in complexity, debugging issues across multiple services becomes increasingly difficult. Traditional logging falls short when tracking a request across boundaries. This is where distributed tracing plays a crucial role. In this blog, we\u2019ll explore how to implement distributed tracing in Java microservices using OpenTelemetry, an open-source observability [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":241,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":"","jetpack_publicize_message":" Just published a guide on Implementing Distributed Tracing with OpenTelemetry in Java Microservices\n\nCovered:\n\nCustom and auto-instrumentation in Java\n\nOpenTelemetry + Spring Boot setup\n\nExporting traces to Jaeger and Zipkin\n\nBest practices for high-performance tracing\n\nIf you're running Java microservices in production, this post will help you make your systems observable and debuggable.\n\n#Java #Microservices #OpenTelemetry #DistributedTracing #Observability #SpringBoot #DevOps","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[113],"tags":[246,243,242,245,244],"class_list":["post-240","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-spring-boot-aws-microservices","tag-distributed-tracing-java","tag-java-microservices-observability","tag-opentelemetry-java-example","tag-spring-boot-opentelemetry","tag-trace-jaeger-spring"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OpenTelemetry Java Microservices Tracing<\/title>\n<meta name=\"description\" content=\"Implement distributed tracing in Java microservices using OpenTelemetry. Learn how to instrument services, visualize traces, and integrate with Jaeger or Zipkin.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenTelemetry Java Microservices Tracing\" \/>\n<meta property=\"og:description\" content=\"Implement distributed tracing in Java microservices using OpenTelemetry. Learn how to instrument services, visualize traces, and integrate with Jaeger or Zipkin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/\" \/>\n<meta property=\"og:site_name\" content=\"&lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-11T05:55:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/07\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"HS\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"HS\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/\"},\"author\":{\"name\":\"HS\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\"},\"headline\":\"Implementing Distributed Tracing with OpenTelemetry in Java Microservices\",\"datePublished\":\"2025-10-11T05:55:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/\"},\"wordCount\":449,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\"},\"image\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png\",\"keywords\":[\"distributed tracing java\",\"java microservices observability\",\"opentelemetry java example\",\"spring boot opentelemetry\",\"trace jaeger spring\"],\"articleSection\":[\"Java, Spring Boot, AWS, Microservices\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/\",\"name\":\"OpenTelemetry Java Microservices Tracing\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png\",\"datePublished\":\"2025-10-11T05:55:00+00:00\",\"description\":\"Implement distributed tracing in Java microservices using OpenTelemetry. Learn how to instrument services, visualize traces, and integrate with Jaeger or Zipkin.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#primaryimage\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png\",\"contentUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png\",\"width\":1536,\"height\":1024,\"caption\":\"Implementing Distributed Tracing with OpenTelemetry in Java Microservices\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/opentelemetry-java-microservices-tracing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Implementing Distributed Tracing with OpenTelemetry in Java Microservices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/\",\"name\":\"Harshad's Dev Diary\",\"description\":\"HARSHAD&#039;s Dev Diary\",\"publisher\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/#\\\/schema\\\/person\\\/d82781218ba30c34fa81b49e8393681e\",\"name\":\"HS\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\",\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\",\"contentUrl\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\",\"width\":400,\"height\":400,\"caption\":\"HS\"},\"logo\":{\"@id\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/about.jpg\"},\"sameAs\":[\"https:\\\/\\\/harshad-sonawane.com\\\/blog\"],\"url\":\"https:\\\/\\\/harshad-sonawane.com\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OpenTelemetry Java Microservices Tracing","description":"Implement distributed tracing in Java microservices using OpenTelemetry. Learn how to instrument services, visualize traces, and integrate with Jaeger or Zipkin.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/","og_locale":"en_US","og_type":"article","og_title":"OpenTelemetry Java Microservices Tracing","og_description":"Implement distributed tracing in Java microservices using OpenTelemetry. Learn how to instrument services, visualize traces, and integrate with Jaeger or Zipkin.","og_url":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/","og_site_name":"&lt;&gt;HARSHAD&#039;s Dev Diary&lt;\/&gt;","article_published_time":"2025-10-11T05:55:00+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/07\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png","type":"image\/png"}],"author":"HS","twitter_card":"summary_large_image","twitter_misc":{"Written by":"HS","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#article","isPartOf":{"@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/"},"author":{"name":"HS","@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e"},"headline":"Implementing Distributed Tracing with OpenTelemetry in Java Microservices","datePublished":"2025-10-11T05:55:00+00:00","mainEntityOfPage":{"@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/"},"wordCount":449,"commentCount":0,"publisher":{"@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e"},"image":{"@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#primaryimage"},"thumbnailUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/07\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png","keywords":["distributed tracing java","java microservices observability","opentelemetry java example","spring boot opentelemetry","trace jaeger spring"],"articleSection":["Java, Spring Boot, AWS, Microservices"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/","url":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/","name":"OpenTelemetry Java Microservices Tracing","isPartOf":{"@id":"https:\/\/harshad-sonawane.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#primaryimage"},"image":{"@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#primaryimage"},"thumbnailUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/07\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png","datePublished":"2025-10-11T05:55:00+00:00","description":"Implement distributed tracing in Java microservices using OpenTelemetry. Learn how to instrument services, visualize traces, and integrate with Jaeger or Zipkin.","breadcrumb":{"@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#primaryimage","url":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/07\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png","contentUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/07\/ChatGPT-Image-Jul-13-2025-12_39_39-PM.png","width":1536,"height":1024,"caption":"Implementing Distributed Tracing with OpenTelemetry in Java Microservices"},{"@type":"BreadcrumbList","@id":"https:\/\/harshad-sonawane.com\/blog\/opentelemetry-java-microservices-tracing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/harshad-sonawane.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Implementing Distributed Tracing with OpenTelemetry in Java Microservices"}]},{"@type":"WebSite","@id":"https:\/\/harshad-sonawane.com\/blog\/#website","url":"https:\/\/harshad-sonawane.com\/blog\/","name":"Harshad's Dev Diary","description":"HARSHAD&#039;s Dev Diary","publisher":{"@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/harshad-sonawane.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/harshad-sonawane.com\/blog\/#\/schema\/person\/d82781218ba30c34fa81b49e8393681e","name":"HS","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg","url":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg","contentUrl":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg","width":400,"height":400,"caption":"HS"},"logo":{"@id":"https:\/\/harshad-sonawane.com\/blog\/wp-content\/uploads\/2025\/02\/about.jpg"},"sameAs":["https:\/\/harshad-sonawane.com\/blog"],"url":"https:\/\/harshad-sonawane.com\/blog\/author\/admin\/"}]}},"jetpack_publicize_connections":[],"_links":{"self":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts\/240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/comments?post=240"}],"version-history":[{"count":1,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts\/240\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/posts\/240\/revisions\/242"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/media\/241"}],"wp:attachment":[{"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/media?parent=240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/categories?post=240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/harshad-sonawane.com\/blog\/wp-json\/wp\/v2\/tags?post=240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}