What is APM?
Imagine the human body. Think about all the different working components within that body. Then think of the complexity of each of those components. How awesome would it be if we had a program which would tell you when one of those components would start failing or working inefficiently all the way down to the cell level? Sadly, this doesn't exist yet for the human body.... however, Application Performance Management solves this issue for the enterprise!
A professional enterprise system is no different then that of the human body in terms of complexity. There are many working parts, technologies and people working on one enterprise's system that it becomes a daunting task to figure out the overall performance of a system. For this reason, APM was born.
Application Performance Management or APM is a set of methodologies and practices for monitoring and managing complex software applications. There are many different angles one must look at to encompass the full view of the delivery chain and to fully practice effective monitoring.
Now when it comes to monitoring there exists different methodologies in terms of how to obtain data:
- Agent Based Solution: This is a solution where you have a piece of software, or an agent if you will, injected within an Application. It will report back on what this application is doing internally along with complex metrics. The negative aspect though of having one of these agents is it will incur some overhead onto your application but the visibility you gain is priceless and the overhead is minimal.
- Agentless Based Solution: This is a solution where instead of directly monitoring the Application you analyze its surroundings. This would be ideally gathering all the information within a data center. This is generally done by spanning ports and analyzing the packet level information (for the paranoid, it does not analyze the Payload!). Unlike the agent based approach you have no overhead, but you do get constrained in terms of the amount of data you obtain.
****Note: It is best practice to both Agentless and Agent based solutions working together.
Along with the methodologies of how we monitor, there also exists the key concepts of what we monitor:
- Real User Monitoring: RUM is the notion that with the evolving complexity of modern day computing in order to truly identify performance you must go all the way back to the end user. This involves going all the way through the delivery chain(like the figure above) back to the data center and having all the metrics associated with those transactions.
- Business Transactions: BT's make our lives easier. The purpose of BT's is to take all the data collected and aggregate them into high level concepts. It draws many similarities to a Select statement from SQL. For example if the business wants to look at the revenue per item, an APM tool would find the methods which return these values and make these metrics. The amount of data collected can be scary so BTs simplify this data and make it translatable to any dialect in the corporate world.
Now, the complexity of APM should be obvious. When these practices are put in place ideally automatic reports, alerts, and warning signals are put in place as well. But this is not always the case. Within APM, like any other practice that there exists a level of maturity within those who operate the space. This translates into: "You can have all the tools to your disposal but a fool with a tool is still a fool".
The end goal of APM is simple; when your response time of your transactions start increasing, red flags are waved; when a transaction starts failing, a developer already knows of the issue because the APM team has reported on the trending data. With that, maturity is also required so that one day the fool with the tool no longer has to monitor the tool; after all the configurations, the tools does everything on it's own.