Dynatrace allows you to create request attributes based on method arguments.
To create a request attribute based on a method argument
Go to Settings > Server-side service monitoring > Request attributes.
Select Define a new request attribute.
Provide a unique Request attribute name. You can rename an attribute at any point in the future.
Select Add new data source.
optional Define the scope of the request attribute.
From the Request attribute source list, select Java method parameter(s), .NET method parameter(s), or PHP method parameter(s).
Select the Select method sources button to open the class wizard. Here you can select the class of the method upon whose argument you want to set an attribute.
Select the process group that contains the classes or interfaces you’re interested in and select Continue.
Search for the class that includes the method you’re interested in. Begin typing the class name and select Search button. The list may take a few seconds to populate.
Select a class from the displayed list. If the list doesn’t contain the class you’re looking for, refine the search string.
Finally, select one or more methods that you want to capture parameters from and then select Finish.
The methods you selected are listed in the method argument capture rule (see below). For each method, from the list box under Capture, select the argument or return value of the method you want to capture.
You can always extend the list or remove methods later. Once saved, restart the processes that this rule applies to.
javax.
and java.
) or .NET classes (for example, System.
) produce the warning Not instrumentable. These classes can't be used, because instrumenting them would mean instrumenting a substantial part of your environment.Once your services begin calling the respective methods, you should see the request attribute appear on the distributed traces page.
The code-level tree view also contains these methods. This view tells you what the value was on each specific method—in case the method is called multiple times with different values.
In most cases, a captured value will contain what it is you’re looking for. However, you may not want an entire value, or even every value. With post processing you can manipulate the captured value.
Expand the Optionally restrict or process the captured parameter(s) further option to see the processing steps. The steps are executed in the presented order—each step is applied to the result of the previous step.
You don't have to apply all the steps. Each step becomes active once you provide a value for it or select the option box.
Step 1 enables you to extract something from the resulting string based on delimited characters.
Step 2 can split the captured value into several values based on a delimited character.
Step 3 removes whitespaces.
Step 4 enables you to filter out captured values that don't fit the provided criterion.
Step 5 enables you to extract something from the resulting string based a regular expression.
You might want to capture an argument of a method and the method is called multiple times. Sometimes you’re only interested in a specific value. In other cases, you may only want to count the executions or average the captured values. Within other values, the argument in question may be a complex object and you’re really only interested in one aspect of the object.
To tackle such situations, you can use the Data type and the Aggregation on request options when you define or configure a request attribute.
Aggregation is applied not only within a single data source (for example, a method rule) but also across multiple data sources. The order is defined by:
For text attributes, you can choose between these options:
The Set of distinct values option enables you to use all distinct values found in a request for filtering. For example, if a request captures a request attribute called Product
and two values are captured for this attribute, Book
and Video
. You can filter by either of these values to find the request in question.
For numeric values, you can use the following aggregations:
If you choose one of these options, the data type changes to integer automatically. These settings are useful when you’re counting something.
A value that you’re interested in may not be available as a simple argument, but rather as part of a complex argument object or even a member variable of a class you’re looking at. Such values can still be accessed. You can access not only argument values and return values, but also an object itself. Whenever an item to be captured (be it an argument or an object) is a complex object, you have the ability to define a method (chain) that enables deep access into the object. The example below uses the method getBookingCode
. You can even execute a chain, for example, getBookingCode().getCustomerCode()
.
The deep object access feature introduces new code into your application that must be executed. As such, it may change the state of your application or introduce performance impact. Use this feature with caution.
The following limitations apply to deep object access: