Application Performance Monitoring: A complete overview for 2020
Application Performance Monitoring is a technique used to monitor key app performance metrics about the performance of a web application in production. It can be thought of as a ‘second wave’ of performance monitoring techniques which was preceded by traditional host-based monitoring. Host-based monitoring focused on indicators such as storage, memory, CPU, and network utilization. Application monitoring, which should focus on infrastructure monitoring, goes a step further and focuses on the actual “end-user” metrics of an application in real time, such as code-level errors, slowdowns in response times and error rates.
Application Performance Monitoring tools can function in several different ways — common implementations include an agent process that is deployed alongside a web application that hooks into the application runtime to collect telemetry data from the process, or specialized web appliances that inspect Layer 7 traffic to generate telemetry.
In conjunction with the monitoring mechanism, synthetic traffic is typically generated by an external application and sent to the application in order to monitor performance at predefined throughput intervals. The key difference between APM tools and other forms of monitoring is that the telemetry data is generated by inspecting the application runtime and the performance metrics that it exposes.
APM is designed to answer questions that you can’t get an answer to from traditional host monitoring. While understanding the raw resource utilization of your application is useful, it doesn’t give you a lot of information when you’re trying to track down why a specific request has high latency, why a particular transaction against your database is failing, or how your application performs under load.
- Why does a particular request have high latency?
- Why are we getting an error here?
- What is the root cause of this substandard user experience?
- Why is this transaction failing?
- What caused that outage?
- How is this issue affecting the user experience of end users?
Network monitoring focuses on collecting telemetry from network devices such as switches or routers in order to detect issues with an application. Network monitoring requires stitching together information from each link to try to get a complete picture. This approach doesn’t provide sufficient resolution or information for modern applications, however, especially when the application itself may be running behind a variety of proxies or service routers which themselves are running on virtualized networking equipment.
APM allows you to gather real-time performance data from the perspective of an end-user, rather than relying on second or third order metrics about host or network utilization in order to understand your application’s performance whether it's running on-premise, SAAS or in the cloud. You’re able to answer questions about specific page load times and database queries in a way that you simply can’t with traditional host-based monitoring. This information can be invaluable in trying to track down bugs in your software, or in understanding how your application performs under load. APM solutions provide alerting systems to Devops, IT Operations, Site Reliability Engineers, and more to quickly troubleshoot performance issues and slowdowns.
Application Performance Management is distinct from Application Performance Monitoring by applying to a suite of applications, rather than just one. An application performance management tool will allow you to aggregate multiple types of metrics across multiple applications and services and compare them in order to discover specific performance issues and regressions in your suite of applications.
APM is currently being eclipsed by observability, a holistic approach to understanding the performance of your application as well as a shared set of practices and terminology to help communicate performance across your organization. While observability helps you navigate from effect to cause, APM falls short of being able to answer “unknown unknowns,” questions that you didn’t think to ask ahead of time.
Observability is also uniquely capable of answering questions about modern, microservice-based application architectures where you will often contend with polyglot services, serverless components, and container-based deployments running on Kubernetes. In addition, observability provides a shared language to talk about performance by focusing on the measurement of service level objectives and service level indicators that are more broadly interpretable and applicable to your unique application architecture than simple throughput or health checks.