AppDynamics or NewRelic - how does it work?

How do you create an AppDynamic or New Relic system that collects the performance indicators of your application, including detailed tree statistics, by simply installing the software on the servers your application is running on?

Is it even possible to collect such indicators without compiling applications with debugging information?

What are the trade-offs for creating such a service? How such software minimizes the performance impact that they may have in the application.

+4
source share
2 answers

Typically, these products work by executing bytecode injection / interposition / monkey-patching functions on commonly used libraries and methods. For example, you can connect to JDBC query methods, servlet base classes, and HTTP client libraries. When the request arrives in the application, track all the important methods / calls it makes and register them in some way. Take the data and collapse it into analytics, charts, and warnings.

In addition, you can start adding statistical profiling or other parameters.

The difficult things are keeping track of requests across process boundaries and processing the amount of performance data that you collect. (I am working on this issue on AppNeta)

One thing to check is Twitter Zipkin ( https://github.com/twitter/zipkin ) does not support a lot and is quite an early but interesting project.

+6
source

Both AppDynamics and New Relic use the standard BCI to monitor the common interfaces (entry and exit points) that developers use to create applications (for example, Servlet, struts, SOAP, JMS, JDBC, ...). This provides a basic code execution skeleton (call schedules) with time information, which is less than 5% of the code being executed.

The secret is then to determine the time remaining for 95% code execution during slowdowns without incurring too much overhead for the production of JVMs. AppDynamics uses a combination of in-memory analytics agent and Java API calls to then retrieve the remaining code execution in real time. This means that no special tools or explicit declaration of which classes / methods you want to use for monitoring is required.

AppDynamics data collection is very different from the New Relic collection. For example, when using AppDynamics, you can get a complete schedule of distributed calls across several JVMs for a specific user request, rather than reporting a collection of requests.

Nowadays, BCI is a commodity, the difference lies in the analytics and algorithms used by suppliers that run diagnostics / call schedule information, so you end up with the right visibility at the right time to solve problems.

Steve.

+10
source

Source: https://habr.com/ru/post/1489149/


All Articles