Home > Blogs > VMware vFabric Blog


Understanding the Difference between Spring Insight Developer & Insight Operations

Every developer knows Byte Code Instrumentation (BCI) is useful. It automates how you instrument your code, and let’s you see exactly how data is being transferred and manipulated within your application. The level of detail is essential to writing and debugging good code.

The Spring Framework has its own BCI tool, called Spring Insight. It comes in two flavors: Spring Insight Developer Edition (Insight) and Spring Insight Operations (Insight Operations). It is also bundled with AppInsight as part of the vFabric Application Performance Suite, and currently only works on Java/Spring code, a fact that is open to change with the upcoming Split-Agent Architecture.

So what is the difference?

The names may give you a hint: Insight is the original tool made for developers, while Insight Operations is part of what it evolved into being a production support tool. Developers get Insight with Spring Tool Suite (STS) by clicking a simple checkbox (pictured left), and operations teams can download Insight Operations as a plugin to work with vFabric tc Server. We also support JBOSS, Weblogic, and Tomcat.

What Spring Insight Developer Edition Does for Developers

Spring Insight uses AspectJ to intercept operations, organizes them visually, and provides underlying information on each operation.  Let’s say you are a developer working on some new code behind a submit button. When you go to test the submit button, Spring Insight captures a trace containing all the operations behind your test. You can see operations like what web requests were made, what objects fired, how much time a REST call took to return from a web service, what JDBC/SQL query was made, how long the web page response took to render, and more. It can also work on background jobs and be combined with stress testing to determine why things are slow.

As a developer, you get an organized picture of all interactions from a tool that is simple to install, requires no code modifications, has a light memory footprint, and is extensible through plug-ins for services like Cassandra, GemFire, Hadoop, Hibernate, RabbitMQ, Redis, and more. To see the full list of plug-ins, go to our open-sourced plug-in repositoryat GitHub, and if what you are looking for isn’t there, it is open for you to write your own plug-ins (remember to please share your plugins – we’d like to check them for security and put them up on the Cloud Application Management Marketplace for others to use!). Spring Insight runs on a single tc Server runtime instance without additional database or instrumentation to set up.

Once it is set up, you can browse to http://localhost:8080/insight  and see how the application behaves for specific requests.  In this example, we can see a trace for GET/travel/hotels/search took 29ms.  Within this trace, we can see all the steps leading up the SQL query and how long each step took. You can drill down to a specific request and investigate how it behaves throughout its lifecycle. Insight extracts all the data you need such as arguments being passed into methods and even SQL statements. This fine grained data from the Trace Details panel (in the screenshot below) helps you find root cause performance issues.

Managing DevOps with SpringInsight Operations

Spring Insight Operations is tuned for production environments and deployed over a cluster of tc Server runtime instances. The two apps have similar dashboards and information, but Spring Insight Operations consists of a central dashboard, analyzers, and multiple agents on the monitored application servers and allows you to see performance by the server or cluster in addition to app traces. Agent install is easy. All you need to do is download the agent installer from the Dashboard and run it on the target machine. Everything else happens automatically so you may even deploy to multiple targets via a script.

As shown in prior screenshot, Insight presents valuable information which works great for developers working on isolated requests. But, pinpointing a specific request that is of interest in a pile of thousands of requests can be difficult. This is especially true when Insight is being used of performance testing or in production environment with multiple servers and instances. In these scenarios, the Application Health Trend graph and application health indicators come in handy. As shown in the screenshot below, you can browse servers, applications, instances, and end-points to see a color-coded health indicator with vitals, health trends, and properties.

In the screenshot below, we have found an application with a problem. The details tell us there’s something wrong with the EditOwnerForm#setupForm End Point. End Points are entry points to the application and could be http requests made to the application, JMS messages, etc. Response time for this end-point appears to be high, over 400ms.  We can now further drill into a specific request and see what caused the slow response time.  Production operations and development teams are now looking at the exact same information.

Spring Insight Demonstrations

If you still don’t have a clear picture, a good resource is this 9 minute demo where you can see Spring Insight Developer Edition in action, it’s integration with Google Speed Tracer, IDE integration, and more.

For Spring Insight Operations in action, check out this demo:

Comparing Spring Insight Developer Edition and Spring Insight Operations

The table below compares the two applications across a number of characteristics to help explain the differences.

Characteristic

Spring Insight Developer Edition

Spring Insight Operations

Helps a developer understand what their app is doing in an isolated development environment.

Yes

Yes

Helps see what code is causing problems in more complicated environments like production.

No

Yes

Development Environment Use

Yes

No

Use in Testing Environments

Yes

Yes

For use with Stress Testing

Yes

Yes

Production Environment Use

No

Yes

Shows web requests, objects in use, time spent for REST calls, what JDBC/SQL was send to the database, and how long web pages took to render

Yes

Yes

Shows information by server, instance, and application.

No

Yes

Based on Aspect J

Yes

Yes

Runs on one runtime instance

Yes

No

Runs on many runtime instances

No

Yes

Singular Architecture

Yes

No

Multi-Tier Agent/Analysis/ Dashboard Architecture

No

Yes

Can Run Custom Plugins

Yes

Yes

Dashboards and Drilldowns

Yes

Yes

Dashboard Views of One Server

Yes

No

Dashboard Views of Multiple Servers

No

Yes

Shows Traces and Operations

Yes

Yes

>> Getting more information:

Screen shot 2012-08-06 at 10.17.26 PM About the Author: Eran Dvir leads the Spring Insight team. He has over 14 years in various R&D management positions in a wide range of organizations. Eran joined VMware in 2010. Prior to leading the Insight team Eran was responsible for innovations at the Herzliya, Israel office. Eran received his education from the Bar-Ilan University, where he obtained his B.Sc. in Computer Science and Biology.

5 thoughts on “Understanding the Difference between Spring Insight Developer & Insight Operations

  1. Pingback: How We Improved APM’s Monitoring Capacity by 500% with Gemfire, RabbitMQ, vPostgres, and a Few Scalability Design Patterns | VMware vFabric Blog - VMware Blogs

  2. Pingback: 3 Steps on Using Spring Insight Developer to Analyze Code | VMware vFabric Blog - VMware Blogs

  3. Pingback: A Tale of Modernization: Stopping Bank Robbers as a Service (20 Billion Times to Date) | VMware vFabric Blog - VMware Blogs

  4. Pingback: How to Use Spring with Data Aware Monitoring for Cost and SLA Management | VMware Virtualization & Cloud Management - VMware Blogs

  5. Pingback: Scaling in Complex Domains Using CQRS, Axon, and Spring Insight | VMware Virtualization & Cloud Management - VMware Blogs

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>