Advanced features

This chapter details advanced configuration options for QRebel. Please head over to https://zeroturnaround.com/software/qrebel/ for more information about QRebel.


Microservices configuration

In order to profile distributed applications or microservices, add QRebel Agents to all connected applications.

../_images/xrhub-microservices.png

Keep in mind that there are two methods to collect microservices transactions:

  1. Configuring all applications to share the same name. All traces will be collected into one application view on the dashboard using that name.
  2. Using separate names for all connected applications. Transactions are separately collected and displayed under each separate application. The top level applications will still display all transactions from connected applications.

Note

End-to-end transactions will be highlighted using the remote2icon icon.


Custom profiling

QRebel Agents can be configured to use a customized profiling setup. This is useful for adding requests that would normally not be picked up by QRebel (e.g. desktop applications, non-HTTP requests). To do this:

  1. Download the customized configuration file.
  2. Edit the file to set up customized entry points. Detailed instructions are contained within.
  3. Save the file in the same location as the QRebel Agent JAR file.
  4. Restart your application.

Multiple applications running in a single container

Multiple applications running in a single container can be detected using the following VM argument: -Dqrebel.app_auto_discovery=true (defaults to false).

The application name is read form the <display-name> element of your web.xml. When not provided, the application’s context root is displayed as the application name in QRebel.


Asynchronous Tracing

QRebel allows out-of-the-box tracing of some asynchronous tasks running in the background. When e.g. HTTP requests spin out background tasks it’s extremely valuable to gain insight into what happens behind the scenes.

Asynchronous tasks are clearly marked within the trace tree.

asyncicon1 is used for the async fork, asyncicon2 to show the join point and asyncicon3 for the location if async fork and join are in the same branch

Here’s how the visual representation will look like when an async task has been detected and traced:

../_images/Async-1.png

As seen above, async tasks have a dedicated menu in the main request header. Expanding the menu will give you a list of tasks.

Since by nature async tasks are run in the background, some are lengthy operations. In order to not delay the sending of traces from the QRebel agent to the dashboard too much, we’ve set up a cap time of 30 seconds after which QRebel will stop tracing the async task and send the data without the trace.

The menu gives you a quick overview with links to all async tasks, and it quickly tells you if the cap time was reached.


Fork and join points

Typically, asynchronous tasks are forked at one code location and later joined by another. In order to capture that scenario, the execution trace will include a visual representation of both the asyncicon1 fork point and the asyncicon2 join point. This looks like this:

../_images/Async-2.png

A fork point will be marked with a link icon within the trace and a link button Go to join to allow navigation to the join location in the trace.