TimerDecorator
Records time to process filters, handlers, and access token resolvers.
Decorator usage
{
"name": string,
"type": "TimerDecorator",
"config": {
"timeUnit": configuration expression<string>
}
}
IG configures a default TimerDecorator named timer
. Use
timer
as the decorator name without explicitly declaring a decorator named
timer.
Decorated object usage
{
"name": string,
"type": string,
"config": object,
decorator name: boolean
}
"name"
: string, required except for inline objects-
The unique name of the object to decorate.
"type"
: string, required-
The class name of the object to decorate, which must be a Filter, Handler, or the
accessTokenResolver
property of OAuth2ResourceServerFilter. "config"
: object, optional-
The configuration of the object, just like an object that is not decorated.
Default: Empty
decorator name
: configuration expression<boolean>, required-
IG looks for the presence of the decorator name field for the TimerDecorator:
-
true
: Activate the timer -
false
: Deactivate the TimerDecorator
-
Timer metrics at the Prometheus Scrape Endpoint
This section describes the timer metrics recorded at the Prometheus Scrape Endpoint. For more information about metrics, refer to Monitoring Endpoints.
When IG is set up as described in the documentation, the endpoint is http://ig.example.com:8080/openig/metrics/prometheus.
Each timer metric is labelled with the following fully qualified names:
-
decorated_object
-
heap
-
name
(decorator name) -
route
-
router
Name | Monitoring type | Description |
---|---|---|
|
|
Time to process the request and response in the decorated handler. |
|
|
Time to process the request and response in the decorated filter and its downstream filters and handler. |
|
|
Time to process the request and response in the decorated filter. |
|
|
Time to process the request and response in filters and handlers that are downstream of the decorated filter. |
Timer metrics at the Common REST Monitoring Endpoint (deprecated)
This section describes the metrics recorded at the the ForgeRock Common REST Monitoring Endpoint. For more information about metrics, refer to Monitoring Endpoints.
When IG is set up as described in the documentation, the endpoint is http://ig.example.com:8080/openig/metrics/api?_queryFilter=true.
Metrics are published with an _id
in the following pattern:
heap.router-name.route-name.decorator-name.object
Name | Monitoring type | Description |
---|---|---|
|
|
Time to process the request and response in the decorated handler, or in the decorated filter and its downstream filters and handler. |
|
|
Time to process the request and response in the decorated filter. |
|
|
Time to process the request and response in filters and handlers that are downstream of the decorated filter. |
Timer metrics in SLF4J logs
SLF4J logs are named in this format:
<className>.<decoratorName>.<decoratedObjectName>
If the decorated object is not named, the object path is used in the log.
When a route’s top-level handler is decorated, the timer decorator records the elapsed time for operations traversing the whole route:
2018-09-04T12:16:08,994Z | INFO | I/O dispatcher 17 | o.f.o.d.t.T.t.top-level-handler | @myroute | Elapsed time: 13 ms
When an individual handler in the route is decorated, the timer decorator records the elapsed time for operations traversing the handler:
2018-09-04T12:44:02,161Z | INFO | http-nio-8080-exec-8 | o.f.o.d.t.T.t.StaticResponseHandler-1 | @myroute | Elapsed time: 1 ms
Examples
The following example uses the default timer decorator to record the time that TokenIntrospectionAccessTokenResolver takes to process a request:
{
"accessTokenResolver": {
"name": "TokenIntrospectionAccessTokenResolver-1",
"type": "TokenIntrospectionAccessTokenResolver",
"config": {
"amService": "AmService-1",
...
},
"timer": true
}
}
The following example defines a customized timer decorator in the heap, and uses it to record the time that the SingleSignOnFilter takes to process a request:
{
"heap": [
{
"name": "mytimerdecorator",
"type": "TimerDecorator",
"config": {
"timeUnit": "nano"
}
},
...
],
"handler": {
"type": "Chain",
"config": {
"filters": [
{
"type": "SingleSignOnFilter",
"config": {
...
},
"mytimerdecorator": true
}
],
"handler": "ReverseProxyHandler"
}
}
}