Application Performance Monitoring Tools — Why, When, What!
Responsible for the performance of your company’s IT operations? Read this guide to determine if you could benefit from application performance monitoring.
Join the DZone community and get the full member experience.
Join For FreeIn this article, I reported my experience working on large applications and how monitoring came into my journey when I started producing software designed to solve business-critical problems.
Solving customers' critical problems can generate great business opportunities, but you need to be ready for really high customer expectations in these situations.
To serve these customers and seize these business opportunities, I quickly realized that it was needed to automate most of the daily activities that took up a lot of my time, negatively impacting productivity.
We have new customers every month; applications become more and more complicated, bureaucracy increases as well, and emergencies that previously occurred once a month now force us to stay at work until late every day.
I am unaware that my application was broken because a customer directly reported the error to me. These customers don’t report bugs or errors; they stop using an application looking for another team that is simply better organized.
After more than ten years as a software engineer, I spent a lot of time selecting the best tools to improve my productivity.
A lot of confusion has arisen in the world of monitoring, probably because so much data can be used in so many different ways. At first, the approach is challenging for developers to understand what is the best combination to solve their emergencies. In this article, I wrote about my experience trying to differentiate:
- When or in which situations monitoring can be effective.
- Why you should monitor some parts of your system and others not.
- What is the right tool for each specific monitoring problem.
What Are Application Monitoring Tools?
Application monitoring tools generally consist of two parts:
- The Agent
- The Analytics Platform
The agent is a software package that developers install in their servers or applications (based on how the agent is designed). Its goal is to collect relevant information about application behavior and performance.
This information is sent to the remote platform that analyzes that data and generates visual charts to help developers easily understand what’s happening in their applications. It’s able to send alerts to developers if something goes wrong.
What They Are Not
This is obviously a simplistic description that could cover a huge amount of tools out there.
In fact, many tools look like application monitoring tools, but they have nothing to do with application monitoring. These similarities made it difficult for me to figure out the right tool to solve my productivity problems.
Here is what I learned in my journey.
Logs Management Tools
The logs management tool is often the first kind of tool we tend to approach because since the beginning of the application development journey, watching application logs is one the most important activity every day to be informed about what’s happening inside the most important processes in our application.
But when the application started to scale (it runs on multiple servers, requires a complex architecture, etc.) I realized that it was very difficult to extract relevant information from logs about application performance and monitor the impact of new releases over time.
Like when the car was invented, people were initially looking for a faster horse because they were used to using the horse. Then they realized a different tool was needed to take it to the next level.
Uptime Monitor
Uptime monitoring tools can be described as a more sophisticated “ping.”
The main purpose is simple: They ping your application endpoints from multiple regions to understand how well (or bad) it can be reached by users located in various geography.
This information is useful to understand how the cloud infrastructure works to bring your application to the end-users (load balancer, CDN, network, etc.); it does not provide any information on what is happening inside your application.
In my case, my application serves users all around the world, so external ping stats helped us to understand what regions suffer the highest latency by making decisions about in which regions we should place our servers.
They monitor the external environment; you will never know if your database slows down.
Server vs Application Monitoring
This is the hardest difference to understand, and I have not found any interesting article that helped me clarify the separation of duties, rather than ads trying to sell me all kinds of tools.
The Application runs on a Server, so they are obviously two strictly related system components. That’s why it might be confusing at first.
But server and application monitoring accomplish two completely different needs.
Server monitoring focuses on infrastructure, and it’s also basically provided for free by any decent cloud provider.
Google GCP, AWS, and DigitalOcean provide you with the most important metrics by default, like CPU usage, Storage, Bandwith, and more, completely free with no extra cost other than running the VM itself.
Understanding the time your VMs must scale up (or down) is an important necessity, but saying that the CPU is at 100% could mean everything and nothing:
- What part of your application do you need to refactor if your application consumes too many resources?
- How can you identify why a certain part of your app is slowing down, causing a negative experience for your users?
- How can you be aware if your application is firing exceptions, and why?
As mentioned at the beginning of the article, Server monitoring works by installing an agent at the server level, so “outside” of your application. But it's virtually impossible to look at your application from the outside and know what’s happening inside your code.
Application monitoring finally focuses you on “application.”
These class of tools provides you with a software library, not a package to install in the OS. Developers install the integration library in their application like any other dependency without touching the server’s configuration. It automatically collects relevant information about your code performance, errors, and trends to alert you in case something goes wrong, like a sentinel.
What Problem Does an Application Monitoring Tool Solve?
Application monitoring tool provides metrics and alerts to identify bugs and bottlenecks in your application without waiting for the customers to report an issue.
A well-designed application monitoring solutions provide developers with the information they need to connect application performance to business outcomes and identify and fix performance issues before they impact the end-users, enabling better technical support and the best continuity of service.
It acts like a sentinel allowing you to visually explore how your code runs, doing 90% of the analysis work in complete autonomy.
This is what Inspector is designed to do and how it is positioned in the monitoring market.
Why Is Application Monitoring Important?
It is important because happy customers are paying customers.
Having an application is the easy part, relatively speaking; anyone can do it.
The real work starts by building your rapport with the customer and making them number one.
If you put the customer first, they’ll remain loyal fans of your application. On the other hand, one of the worst things for your business is error-prone, buggy software.
Nothing will drive potentially paying customers away faster than waiting for the site to load up or finding it down altogether. So do whatever it takes to make them happy, and the revenue will follow.
What Can You Monitor in an Application?
You should be able to easily know how long your application takes to fulfill HTTP requests or complete background processes, like jobs, cron tasks, etc., to understand what are the most consuming processes in your system.
Each execution cycle is typically called a “Transaction.” So during a transaction, the application can perform many different tasks like SQL queries, read/write files, call external systems, algorithms, etc.
We call this list of tasks the “Timeline,” and you can explore it visually like in the image below:
All of this information is automatically collected by the monitoring tool without any tricky configuration by developers.
I really believe that clear and simple information is the most important thing to make better decisions.
Learning why, when, and how to use monitoring tools was one of the most confusing parts of my developer journey, and I hope this experience can help you to have a more aware vision of your needs and what are the right tools you need to solve your problems and improve your productivity.
Published at DZone with permission of Valerio Barbera. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments