As a software engineer, I want to know two things about an application running in production. Is it doing its job correctly, and what is happening when it is not? For the first, you can use testing tools such as Waldo. For the second, you need application performance monitoring (APM).
This post will cover what APM is, how it differs from network performance monitoring (NPM), what performance issues APM identifies, and how to perform APM, as well as some APM tools.
What Is APM?
APM is the practice of monitoring the performance of applications to ensure they are working correctly and meeting user expectations. In addition, APM aims to identify and diagnose application performance problems, such as slow response times or errors.
Many factors can affect application performance, including the code itself, the server environment, the network, and the user's device. APM tools help monitor all of these factors and identify where problems occur.
Organizations can use APM tools to monitor web, mobile, and desktop applications. They can also watch the performance of individual components within an application, such as a specific database or service.
There are many benefits to using APM tools, including the following:
Improved performance: By identifying and fixing bottlenecks, you can improve the overall performance of your application.
Increased availability: By monitoring the availability of your application, you can ensure that it is always up and running.
Reduced costs: By improving performance and availability, you can reduce the costs associated with your application.
Improved customer satisfaction: By providing a better user experience, you can improve customer satisfaction and loyalty.
Instrumentation of the code: APM tools allow you to instrument your code, which can help with debugging purposes.
Many other benefits are specific to each APM tool. Be sure to check out the features of each APM application to see if it meets your particular needs.
How Is APM Different From Network Performance Monitoring (NPM)?
While APM and NPM aim to improve performance, they take different approaches. For example, APM tools focus on the application, while NPM tools focus on the network.
NPM tools are typically used by network administrators to monitor network traffic and identify bottlenecks. Network admins also use network monitoring tools for troubleshooting problems with specific devices or components.
On the other hand, developers use APM tools to monitor and optimize the performance of their applications. APM tools can provide insight into application usage and where bottlenecks occur. Developers, architects, and system administrators can use this information to improve the design and code of the application.
Organizations use NPM tools when they have their own network and host their applications. In contrast, APM tools cover both on-prem and cloud applications.
Why Do Businesses Need APM?
A business needs APM to monitor the performance of its applications and identify any problems that could impact the user experience. APM is critical for ensuring that applications are available and responsive, especially for mission-critical applications or applications and APIs with external service-level agreements (SLAs).
Architects and infrastructure teams can also use APM tools for capacity planning and, thus, business cost forecasting. Capacity planning determines how much hardware and how many resources an application will need to meet future demand.
In addition, APM can reduce costs by identifying areas to improve performance, allowing your applications to run on fewer pieces of hardware or servers.
What Does APM Cover?
APM covers five main areas of monitoring, some of them overlapping.
End User Experience Monitoring
The end-user experience is what matters most. For example, users will likely go elsewhere if the application is slow or unresponsive. End user experience monitoring (EUEM) helps track how users interact with the application and identify any problems that could impact their experience.
EUEM monitors can track various metrics, such as response times, page load times, and error rates. They can also track specific user actions, such as clicks and scrolls. User experience specialists and developers can use this information to identify bottlenecks and improve the overall user experience.
In addition, APM allows you to troubleshoot performance. For example, this ability lets you detect when you have slow page loading, slow processing methods or batch jobs, timeouts, and more. The APM tools have dashboards and metrics to help identify why there's a problem and where. Then it's up to the developers to determine how to fix the issue.
Most APMs allow you to input your service-level metrics and actively monitor them. Members of your team get notifications when applications fall out of the required range.
This way, you can identify and fix problems before they impact your users or cause SLA breaches.
Servers, Applications, and Web Server Monitoring
APM tools hook into your servers and applications and allow you to dive deep into how they perform. Usually, there is the instrumentation of the byte code (or the equivalent) to enable the APM tools to track the entering and exiting of methods within the application itself. In this manner, you can quickly narrow down where performance issues are occurring in the code.
In addition, APM tools monitor the performance of your databases, whether they are SQL or NoSQL. For example, you can get metrics on fetch requests and compare them to write requests. As well, you can monitor things like connection timeouts.
How to Perform Application Performance Monitoring
First, decide what type of metrics you want to track. For example, do you want to monitor the end-user experience or track server performance? Once you know what metrics you want to follow, you can choose the right APM tool for your needs.
Second, you match what you want to do with the available tools and budgetary concerns and choose an open-source or paid APM tool.
Third, install the tool's agents, if necessary, on your servers and allow them to connect to the centralized dashboard. If you're just starting out, I suggest running them on a QA or test server initially. Directly to production is not a great idea.
Fourth, configure the dashboards and agents to track the metrics you want to see.
Finally, allow users onto the system, run automated testing, and see what areas of improvement you can find.
Once you get started, you will find it's an iterative performance improvement process. Fix one problem area, deploy it, let it run, identify the next area to fix, and so on.
There are many different APM tools available, both open source and commercial. Here are some of the most popular:
Dynatrace is a paid APM tool that uses AI to help monitor applications.
New Relic is a paid APM tool that helps your entire team solve performance issues.
Datadog is a paid APM tool to help monitor all types of applications in the cloud.
SigNoz is an open-source APM tool backed by Y Combinator.
Once you're set up for APM, it is essential to test your APM configuration to ensure you track what you think you set up.
You might unplug or block a database server connection on a test server to ensure your database alerts fire. You might introduce code that will loop for five to 10 seconds in a specific method triggered by a configurable flag to simulate a performance bottleneck. Turn it on and then confirm you receive an alert. Get creative and ensure you have everything configured correctly. You don't want to find a performance issue in production that you didn't detect because of an incorrect APM configuration.
APM is an essential tool for a business with customer-facing software, whether websites or APIs, with or without SLAs. In addition, it's great for monitoring your internally facing apps and ensuring your employees don't meet frustrations in their day-to-day workflow. Now you know enough to start researching some of the tools and getting a better idea of your application's performance.
This post was written by Steven Lohrenz. Steven is an IT professional with 25-plus years of experience as a programmer, software engineer, technical team lead, and software and integrations architect. They blog at StevenLohrenz.com about things that interest them.