{"id":32820,"date":"2023-09-12T09:07:53","date_gmt":"2023-09-12T13:07:53","guid":{"rendered":"https:\/\/www.eginnovations.com\/blog\/?p=32820"},"modified":"2025-03-18T06:30:51","modified_gmt":"2025-03-18T10:30:51","slug":"troubleshooting-spring-boot-microservices-a-real-world-case-study","status":"publish","type":"post","link":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/","title":{"rendered":"Troubleshooting Spring Boot Microservices &#8211; A Real World Case Study"},"content":{"rendered":"<div class=\"inner_content\">\n<p>Today, I\u2019ll cover <a href=\"https:\/\/www.eginnovations.com\/blog\/shift-left-monitoring-a-pathway-to-optimized-cloud-applications\/\">Shift Left Monitoring: A Pathway to Optimized Cloud Applications<\/a> and how left-shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues, unnecessary costs and improve product quality.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"357\" class=\"alignright size-full wp-image-26081\" style=\"width: 380px; margin-top: -4px;\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2022\/08\/Devops.webp\" alt=\"\" srcset=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2022\/08\/Devops.webp 750w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2022\/08\/Devops-300x143.webp 300w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2022\/08\/Devops-310x148.webp 310w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2022\/08\/Devops-140x67.webp 140w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/> Shift-left is an approach to software development and operations that emphasizes testing, monitoring, and automation earlier in the software development lifecycle. The goal of the shift-left approach is to prevent problems before they arise by catching them early and addressing them quickly.<\/p>\n<p>When you identify a scalability issue or a bug early, it is quicker and more cost-effective to resolve it. Moving inefficient code to cloud containers can be costly, as it may activate auto-scaling and increase your monthly bill. Furthermore, you will be in a state of emergency until you can identify, isolate, and fix the issue.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Troubleshooting_Java_Spring_Boot_Pre-production\"><\/span>Troubleshooting Java Spring Boot Pre-production<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This is a recent real-world case where the data from their observability solution empowered a customer to avert a potential issue with an application that could have caused a major issue in a production environment.<\/p>\n<p>The customer was testing a new version of a Java Spring Boot microservice using <a href=\"https:\/\/www.eginnovations.com\/documentation\/Maria-Database\/Introduction-to-Maria-Database-Monitoring.htm\">MariaDB<\/a> as the backend, running behind <a href=\"https:\/\/www.eginnovations.com\/supported-technologies\/apache-monitoring\">Apache<\/a> reverse proxy and <a href=\"https:\/\/www.eginnovations.com\/supported-technologies\/aws-monitoring\">AWS<\/a> application load balancer. The end-to-end system was monitored using eG Enterprise throughout the testing cycle both prior to integrating the application changes and afterwards. Pre-production UAT (User Acceptance Testing) was performed and all UAT test cases passed.<\/p>\n<p>However, on review of the eG Enterprise performance reports of the UAT (User Acceptance Testing) infrastructure following the recent application changes. The performance charts in the MariaDB performance dashboard deviated significantly from pre-deployment patterns.<\/p>\n<p>On investigation a serious coding issue was discovered highlighting the importance of baselining both application and infrastructure behavior in such testing. Later I\u2019ll also cover why the application UAT tests succeeded.<\/p>\n<p>I\u2019ll walk-through the key metrics and information captured by eG Enterprise that allowed the customer to diagnose and analyze the full-stack behavior.<\/p>\n<div style=\"padding: 20px; border: 1px solid #ffd392; background: #fcf8ef; margin-bottom: 30px;\">\n<h2><span class=\"ez-toc-section\" id=\"Spring_Boot_and_Kubernetes\"><\/span>Spring Boot and Kubernetes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p style=\"margin-bottom: 5px;\">Spring Boot is an open-source Java-based framework that simplifies the development of production-ready, stand-alone, and web-based applications. Kubernetes (K8s) is designed to manage containerized applications, and Spring Boot applications are well-suited for microservices architectures. Spring Boot&#8217;s lightweight and modular nature allows developers to create containerized microservices easily, and Kubernetes provides an excellent platform for orchestrating and scaling these services.<\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"The_Timeline_of_the_Java_Spring_Boot_Application_Migration\"><\/span>The Timeline of the Java Spring Boot Application Migration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>On August 6th at 14:13, The application was restarted with a new Spring Boot jar file containing an embedded Tomcat.<\/p>\n<p><a href=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/JVM-restarts-view.jpg\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-32838\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/JVM-restarts.webp\" alt=\"\" width=\"750\" height=\"371\" srcset=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/JVM-restarts.webp 750w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/JVM-restarts-300x148.webp 300w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/JVM-restarts-310x153.webp 310w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/JVM-restarts-140x69.webp 140w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<div class=\"img_caption\">Figure 1: eG Enterprise automatically captures all JVM restarts<\/div>\n<p>At 14:52, the query processing rate for MariaDB increased from 0.1 to 88 queries per second and then to 301 queries per second.<\/p>\n<p><a href=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/increase-queryrate-MariaDB-view.jpg\" data-rel=\"lightbox-image-1\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-32839\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/increase-queryrate-MariaDB.webp\" alt=\"\" width=\"750\" height=\"371\" srcset=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/increase-queryrate-MariaDB.webp 750w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/increase-queryrate-MariaDB-300x148.webp 300w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/increase-queryrate-MariaDB-310x153.webp 310w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/increase-queryrate-MariaDB-140x69.webp 140w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<div class=\"img_caption\">Figure 2: eG Enterprise measured a significant increase in query rate for MariaDB shortly after the JVM restart<\/div>\n<p>Additionally, the system CPU was elevated from 1% to 6%.<\/p>\n<p><a href=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/CPU-utilization-view.jpg\" data-rel=\"lightbox-image-2\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-32842\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/CPU-utilization.webp\" alt=\"\" width=\"750\" height=\"384\" srcset=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/CPU-utilization.webp 750w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/CPU-utilization-300x154.webp 300w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/CPU-utilization-310x159.webp 310w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/CPU-utilization-140x72.webp 140w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<div class=\"img_caption\">Figure 3: eG Enterprise capturing the change in CPU utilization<\/div>\n<p>Finally, the <a href=\"https:\/\/www.eginnovations.com\/blog\/jvm-monitoring-and-performance-assurance-for-java-based-banking-and-trading-applications\/\">JVM<\/a> time spent on the G1 Young Generation <a href=\"https:\/\/www.eginnovations.com\/blog\/what-is-garbage-collection-java\/\/\">Garbage Collection<\/a> increased from 0% to 0.1% and remained at that level.<\/p>\n<p><a href=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/GC-time-view.jpg\" data-rel=\"lightbox-image-3\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-32844\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/GC-time.webp\" alt=\"\" width=\"750\" height=\"302\" srcset=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/GC-time.webp 750w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/GC-time-300x121.webp 300w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/GC-time-310x125.webp 310w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/GC-time-140x56.webp 140w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<div class=\"img_caption\">Figure 4: eG Enterprise visualizing the increase in GC time on the JVM<\/div>\n<p>The application, in its UAT phase, was behaving abnormally and issuing 300 queries\/sec, which is far beyond what it was designed to do. The new feature caused an increase in database connections, which is why the increase in queries is so dramatic.<\/p>\n<p>The monitoring dashboards also showed that the problematic metrics had been normal before the new version was deployed.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_Resolution_of_the_Spring_Boot_Problems\"><\/span>The Resolution of the Spring Boot Problems<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div style=\"padding: 20px; border: 1px solid #ffd392; background: #fcf8ef; margin-bottom: 30px;\">\n<h2><span class=\"ez-toc-section\" id=\"What_is_JPA\"><\/span>What is JPA?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p style=\"margin-bottom: 5px;\"><a href=\"https:\/\/docs.spring.io\/spring-data\/jpa\/docs\/current\/reference\/html\/\" target=\"blank\" rel=\"noopener\">JPA<\/a> (Java Persistence API) is a Java-based specification and API for managing relational data in applications using Java. JPA provides a set of interfaces and standard annotations that allow Java developers to interact with relational databases in a way that is both portable and easy to use.<\/p>\n<\/div>\n<p>The application is a Spring Boot application that uses JPA to query a MariaDB. The application is designed to run on two containers when experiencing a minimal load but is expected to scale up to ten under peak demand.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-32851\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/topology-db.webp\" alt=\"\" width=\"750\" height=\"172\" srcset=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/topology-db.webp 750w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/topology-db-300x69.webp 300w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/topology-db-310x71.webp 310w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/topology-db-140x32.webp 140w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<div class=\"img_caption\">Figure 5: eG Enterprise topology maps show the dependencies of the full-stack including the web server &#8211; app sever &#8211; DB topology<\/div>\n<p>Logical questions naturally arise &#8211; If a single container can generate 300 queries per second, can the stack handle 3000 queries per second if all ten containers are operational? Will the database have enough connections to meet the needs of the other parts of the application?<\/p>\n<p>At this point we investigated the changes committed by the developer in <a href=\"https:\/\/www.eginnovations.com\/documentation\/GitHub\/How-to-Monitor-GitHub-Using-eG-Enterprise.htm\">Git.<\/a> The changes were relatively minor and added simple functionality to take a few records from a table and process them. However, this is what we observed in the service class.<\/p>\n<p style=\"margin-bottom: 15px;\"><span style=\"color: #cf0101;\">List findAll = this.xRepository.findAll();<\/span><\/p>\n<p>The unqualified use of a <span style=\"color: #cf0101;\">findAll()<\/span> method without <a href=\"https:\/\/howtodoinjava.com\/spring-data\/pagination-sorting-example\/\" target=\"blank\" rel=\"noopener\">pagination<\/a> in Spring&#8217;s CrudRepository which is not efficient. Most basic RDBMS tutorials cover this \u2013 like the use of WHERE in SQL, it is more efficient to request a subset of records by certain criteria than request all records and process them on similar criteria. Pagination helps to reduce the amount of time it takes to retrieve data from the database by limiting the amount of data fetched. Additionally, pagination helps to keep memory usage low to prevent the application from crashing due to an overload of data, as well as reducing the Garbage Collection effort of Java Virtual Machine, which was mentioned in the problem statement above.<\/p>\n<p>This test was conducted using only 2,000 records in one container. If this code were to move to production, where there are around 200,000 records in up to 10 containers, it could have caused the team a lot of stress and worry that day.<\/p>\n<p>The application was rebuilt with the addition of a \u201cBy\u201d clause, which is equivalent to the role of a <em>WHERE<\/em> clause in SQL, to the method.<\/p>\n<p style=\"margin-bottom: 15px;\"><span style=\"color: #cf0101;\">List findAll = this.xRepository.findAllByY(Y);<\/span><\/p>\n<p>After making this change and redeploying the application, normal behavior was restored. The number of queries per second decreased from 300 to 30, and the amount of effort put into garbage collection returned to its original level. Additionally, the system&#8217;s CPU usage decreased.<\/p>\n<p><a href=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/query-rate-returning-view.jpg\" data-rel=\"lightbox-image-4\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-32847\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/query-rate-returning.webp\" alt=\"\" width=\"750\" height=\"371\" srcset=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/query-rate-returning.webp 750w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/query-rate-returning-300x148.webp 300w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/query-rate-returning-310x153.webp 310w, https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/query-rate-returning-140x69.webp 140w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<div class=\"img_caption\">Figure 6: eG Enterprise data measuring the query rate returning to normal expected behavior<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Improving_and_Tuning_Observability_and_Monitoring_for_Pre-Production_Testing_with_eG_Enterprise\"><\/span>Improving and Tuning Observability and Monitoring for Pre-Production Testing with eG Enterprise<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In this case, having observability expertise involved in reviewing the data overviews quickly identified the issues. Incidents like this one empower organizations to iterate and refine their monitoring during testing to automate issue diagnostics further.<\/p>\n<p>In this case the UAT tests did not realistically reflect the production environment usage and scalability expectations. Long-term the customer will refine their test coverage.<\/p>\n<p>The test system and the associated metric thresholds used for eG Enterprise alerting were out-of-the-box designed for the customers\u2019 production systems and naturally did not trigger with a CPU usage of 6%. Experienced users can however tune such thresholds to leverage auto-baselining whereby the <a href=\"https:\/\/www.eginnovations.com\/product\/capabilities\/aiops-monitoring\">AIOps engine<\/a> and machine learning technologies establish the normal behavior of a system and raise alerts automatically when anomalies occur. In this case the customer may wish to tune their thresholds during such testing to raise alerts when infrastructure resources such as CPU deviate by 200% of established behavior. Information on leveraging eG Enterprise\u2019s powerful auto-baselining and anomaly detection is covered in: <a href=\"https:\/\/www.eginnovations.com\/white-paper\/make-it-service-monitoring-simple-and-proactive-with-aiops-powered-intelligent-thresholding-and-alerting\">White Paper | Make IT Service Monitoring Simple &amp; Proactive with AIOps Powered Intelligent Thresholding &amp; Alerting (eginnovations.com).<\/a><\/p>\n<p>The code changes were known to be minor and limited to Git check-ins by a single developer and so the customer sourced the coding issues directly from Git. In many scenarios though a new version of an application will integrate hundreds of changes from multiple developers within multiple Java methods and diagnosing the exact method that is the root-cause of the issue will be a tedious and often manual task. In such scenarios, the full stack DevOps monitoring capability of eG Enterprise can be leveraged to identify exact method call that is causing slowness. eG Innovations brings DevOps monitoring under a unified console so that the administrator has full visibility of the roll-out process. eG Enterprise supports important components of the CI-CD pipeline such as GitHub, JenKins, Docker, K8s, BitBucket, RedHat Ansible Tower, Jira etc. See: <a href=\"https:\/\/www.eginnovations.com\/documentation\/Java-Application\/Identifying-and-Diagnosing.htm\">Identifying and Diagnosing a CPU Issue in the JVM (eginnovations.com)<\/a> and <a href=\"https:\/\/www.eginnovations.com\/blog\/java-code-level-visibility\/\">Java Code Level Visibility | eG Innovations.<\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Learning_and_Summary\"><\/span>Learning and Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Anyone who works in Site Reliability Engineering (SRE) will appreciate the significance of this discovery. We were able to act upon it without having to raise a Severity 1 flag. Without the pre-production troubleshooting of this flawed Spring Boot package, in production it could have triggered the customer&#8217;s auto-scaling threshold, resulting in new containers being launched even without any additional user load.<\/p>\n<p style=\"margin-bottom: 15px;\">There are three main takeaways from this story.<\/p>\n<ul>\n<li>Firstly, it is best practice to turn on an observability solution from the beginning, as it can provide a history of events that can be used to identify potential issues. Without this history, it could have been easy to overlook that a 0.1% Garbage Collection percentage and 6% CPU consumption showed a serious issue, and the code could have been released into production with disastrous consequences. Expanding the scope of the monitoring solution to their UAT servers helped this team to identify potential root causes and prevent problems before they could impact the live service and business.<\/li>\n<li>Secondly, performance-related test cases should exist in the testing process, and these should be reviewed by someone with experience in observability. This will ensure the functionality of the code is tested, as well as its performance.<\/li>\n<li>Thirdly, cloud-native performance tracking techniques are good for receiving alerts about high utilization, availability, etc. To achieve observability, you also need to have the right tools and expertise in place. Happy Coding!<\/li>\n<\/ul>\n<p>This article expands on an article that I recently wrote on DZone, see: <a href=\"https:\/\/dzone.com\/articles\/shift-left-monitoring-approach-for-cloud-apps-in-c\" target=\"blank\" rel=\"noopener\">Shift-Left Monitoring Approach for Cloud Apps in Containers &#8211; DZone.<\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Learn_more\"><\/span>Learn more<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>In this case high CPU because of GC behavior was observed, my colleague has written some very insightful articles on the subtleties of Java GC behavior and how issues may manifest themselves in both testing and production environments, see: <a href=\"https:\/\/www.eginnovations.com\/blog\/what-is-garbage-collection-java\/\/\">What is Garbage Collection in Java: Detailed Guide<\/a> and <a href=\"https:\/\/www.eginnovations.com\/blog\/7-myths-of-java-memory-leaks-what-sres-need-to-know-and-communicate\/\">Java Memory Leak: 7 Myths that SREs Need to Know.<\/a><\/li>\n<li>Learn more about the roles of APM and load testing when testing Java apps in: <a href=\"https:\/\/www.eginnovations.com\/blog\/how-apm-solutions-enhance-jmeter-load-testing-visibility-bridging-the-gap\/\">How APM Solutions Enhance JMeter Load Testing Visibility (eginnovations.com).<\/a><\/li>\n<li>Failing to use production-like test environments is common and my colleague covers this and other important test considerations SREs often must communicate with management (for getting budget) in <a href=\"https:\/\/www.eginnovations.com\/blog\/7-myths-of-java-memory-leaks-what-sres-need-to-know-and-communicate\/\">Java Memory Leak: 7 Myths that SREs Need to Know (eginnovations.com).<\/a><\/li>\n<li>eG Enterprise supports the monitoring of key CI\/CD technologies \u2013 see: <a href=\"https:\/\/www.eginnovations.com\/blog\/top-devops-tools\/\">Top DevOps Tools | eG Innovations.<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Today, I\u2019ll cover Shift Left Monitoring: A Pathway to Optimized Cloud Applications and how left-shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues, unnecessary costs and improve product quality. Shift-left is an approach to software development and operations that emphasizes testing, monitoring, and automation earlier in the software development lifecycle. [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":32858,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[369,394,27],"tags":[1469,1155,435,174,176,555,578,2111,1193,2112,1355],"class_list":["post-32820","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-monitoring","category-container-monitoring","category-java-monitoring","tag-ci-cd","tag-devops-and-sres","tag-java-apm","tag-java-application-performance","tag-java-monitoring","tag-java-troubleshooting","tag-jvm-monitoring","tag-left-shift","tag-mariadb","tag-spring-boot","tag-sre"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Troubleshooting Spring Boot Microservices - A Real World Case Study | eG Innovations<\/title>\n<meta name=\"description\" content=\"How left- shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues and unnecessary costs.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Troubleshooting Spring Boot Microservices - A Real World Case Study | eG Innovations\" \/>\n<meta property=\"og:description\" content=\"How left- shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues and unnecessary costs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/\" \/>\n<meta property=\"og:site_name\" content=\"eG Innovations\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/eGInnovations\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-12T13:07:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-18T10:30:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-social_banner.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Pandian Ramaiah\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"How left- shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues and unnecessary costs.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-social_banner.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@eginnovations\" \/>\n<meta name=\"twitter:site\" content=\"@eginnovations\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pandian Ramaiah\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Troubleshooting Spring Boot Microservices - A Real World Case Study | eG Innovations","description":"How left- shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues and unnecessary costs.","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:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/","og_locale":"en_US","og_type":"article","og_title":"Troubleshooting Spring Boot Microservices - A Real World Case Study | eG Innovations","og_description":"How left- shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues and unnecessary costs.","og_url":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/","og_site_name":"eG Innovations","article_publisher":"https:\/\/www.facebook.com\/eGInnovations","article_published_time":"2023-09-12T13:07:53+00:00","article_modified_time":"2025-03-18T10:30:51+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-social_banner.jpg","type":"image\/jpeg"}],"author":"Pandian Ramaiah","twitter_card":"summary_large_image","twitter_description":"How left- shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues and unnecessary costs.","twitter_image":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-social_banner.jpg","twitter_creator":"@eginnovations","twitter_site":"@eginnovations","twitter_misc":{"Written by":"Pandian Ramaiah","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/#article","isPartOf":{"@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/"},"author":{"name":"Pandian Ramaiah","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/person\/dded8a1e0ec6d8de4e30022c1c2f9c37"},"headline":"Troubleshooting Spring Boot Microservices &#8211; A Real World Case Study","datePublished":"2023-09-12T13:07:53+00:00","dateModified":"2025-03-18T10:30:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/"},"wordCount":1777,"publisher":{"@id":"https:\/\/www.eginnovations.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/#primaryimage"},"thumbnailUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-Thumbnail.jpg","keywords":["CI CD","devops and SREs","Java APM","Java Application Performance","Java Monitoring","Java troubleshooting","JVM Monitoring","left-shift","MariaDB","Spring Boot","SRE"],"articleSection":["Cloud Monitoring","Container Monitoring","Java Monitoring"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/","url":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/","name":"Troubleshooting Spring Boot Microservices - A Real World Case Study | eG Innovations","isPartOf":{"@id":"https:\/\/www.eginnovations.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/#primaryimage"},"image":{"@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/#primaryimage"},"thumbnailUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-Thumbnail.jpg","datePublished":"2023-09-12T13:07:53+00:00","dateModified":"2025-03-18T10:30:51+00:00","description":"How left- shifted troubleshooting of Spring Boot code issues using observability tooling can avoid production issues and unnecessary costs.","breadcrumb":{"@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/#primaryimage","url":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-Thumbnail.jpg","contentUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2023\/09\/dzone-Thumbnail.jpg","width":362,"height":235,"caption":"dzone-Thumbnail"},{"@type":"BreadcrumbList","@id":"https:\/\/www.eginnovations.com\/blog\/troubleshooting-spring-boot-microservices-a-real-world-case-study\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.eginnovations.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Troubleshooting Spring Boot Microservices &#8211; A Real World Case Study"}]},{"@type":"WebSite","@id":"https:\/\/www.eginnovations.com\/blog\/#website","url":"https:\/\/www.eginnovations.com\/blog\/","name":"eG Innovations","description":"IT Performance Monitoring Insights","publisher":{"@id":"https:\/\/www.eginnovations.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.eginnovations.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.eginnovations.com\/blog\/#organization","name":"eG Innovations","alternateName":"eg innovations","url":"https:\/\/www.eginnovations.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2014\/07\/eg-logo-dark-gray1_new.jpg","contentUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2014\/07\/eg-logo-dark-gray1_new.jpg","width":362,"height":235,"caption":"eG Innovations"},"image":{"@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/eGInnovations","https:\/\/x.com\/eginnovations"]},{"@type":"Person","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/person\/dded8a1e0ec6d8de4e30022c1c2f9c37","name":"Pandian Ramaiah","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/48ab64611d2e72e9aba583ecdcfcb8c1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/48ab64611d2e72e9aba583ecdcfcb8c1?s=96&d=mm&r=g","caption":"Pandian Ramaiah"},"url":"https:\/\/www.eginnovations.com\/blog\/author\/pandian\/"}]}},"modified_by":"eG Innovations","_links":{"self":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/posts\/32820","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/comments?post=32820"}],"version-history":[{"count":0,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/posts\/32820\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/media\/32858"}],"wp:attachment":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/media?parent=32820"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/categories?post=32820"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/tags?post=32820"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}