Runtime metrics migration guide
Latest Dynatrace
This guide provides insights into migrating runtime metrics to Grail. Typically, a Grail metric is equivalent to a Metrics Classic metric. In some cases, however, there's no one-to-one relation:
- Divergent: multiple Grail metrics represent a single Metrics Classic metric to provide additional technology-specific insight.
- Convergent: a single Grail metric represents multiple Metrics Classic metrics of a similar scope.
- Unsupported: no Grail metric is planned to represent the Metrics Classic metric.
Divergent metrics
When multiple Grail metric keys provide support for a single Metrics Classic metric, not all values can be converted to the respective new metric keys. For example, the following example queries return equivalent results.
Example 1
-
Metrics Classic
builtin:tech.jvm.memory.gc.collectionTime:filter(and(or(in("dt.entity.process_group_instance",entitySelector("type(process_group_instance),entityName.equals(~"MyGoProcessGroup-IG-1~")"))))):auto -
DQL
timeseries collection_time = sum(dt.runtime.go.gc.collection_time),filter:in(dt.entity.process_group_instance, classicEntitySelector("type(process_group_instance), entityName.equals(\"MyGoProcessGroup-IG-1\")"))
Example 2
-
Metrics Classic
builtin:tech.jvm.memory.gc.collectionTime:filter(and(or(in("dt.entity.process_group_instance",entitySelector("type(process_group_instance),entityName.equals(~"MyGoProcessGroup-IG-1~")"))))):auto -
DQL
timeseries collection_time = sum(dt.runtime.go.gc.collection_time),filter:in(dt.entity.process_group_instance, classicEntitySelector("type(process_group_instance), entityName.equals(\"MyGoProcessGroup-IG-1\")"))
Example 3
-
Metrics Classic
builtin:tech.jvm.memory.gc.collectionTime:filter(and(or(in("dt.entity.process_group_instance",entitySelector("type(process_group_instance),entityName.equals(~"MyGoProcessGroup-IG-1~")"))))):auto -
DQL
timeseries collection_time = sum(dt.runtime.go.gc.collection_time),filter:in(dt.entity.process_group_instance, classicEntitySelector("type(process_group_instance), entityName.equals(\"MyGoProcessGroup-IG-1\")"))
Java Node.js .NET Go
The following Metrics Classic metrics for memory pool and garbage collection are JVM-based. Because Grail metrics are technology-specific, there's no direct relation between Metrics Classic and Grail metrics. You need to choose a technology-dedicated metric in Grail.
dt.runtime.clr.gc.collection_time
dt.runtime.go.gc.collection_time
dt.runtime.nodejs.gc.collection_time
dt.runtime.clr.gc.suspension_time
dt.runtime.go.gc.suspension_time
dt.runtime.nodejs.gc.suspension_time
ApacheIIS.NGINX
The following Metrics Classic metrics for web servers hold values for different technologies. Because Grail metrics are technology-specific, there's no direct relation between Classic and Grail metrics. You need to choose the Apache, IIS, or NGINX dedicated metric in Grail.
dt.runtime.iis.connections.socket_waiting_time
dt.runtime.iis.requests
dt.runtime.nginx.requests
dt.runtime.iis.threads.active
dt.runtime.iis.threads.idle
dt.runtime.iis.threads.max
dt.runtime.iis.traffic
dt.runtime.nginx.traffic
Convergent metrics
When a single Grail metric provides support for multiple Metrics Classic metrics, all values are converted. To obtain the equivalent results in Grail, use a metric dimension to filter the values. For example, the following metrics return equivalent results.
-
Metrics Classic:
builtin:tech.go.http.responses5xx
-
DQL:
dt.runtime.go.http.requests
filtered by status in the range 500–599-
via DQL queries
timeseries responses5xx = sum(dt.runtime.go.http.requests),filter:{500 <= status and status <= 599} -
via Notebooks
-
Go
failed
or started
)builtin:cloud.cloudfoundry.auctioneer.lprStarted (filtered by process type Go)
== 502
or >= 500 and <=599
)builtin:tech.go.http.responses5xx
builtin:tech.go.http.totalRequests
idle
or live
)builtin:tech.go.memory.heap.live
user
or system
)builtin:tech.go.scheduling.g.systemCount
Overall
, Idling
, or Spinning
)builtin:tech.go.scheduling.m.idlingCount
builtin:tech.go.scheduling.m.spinningCount
.NET
Generation0
, Generation1
, or Generation2
)builtin:tech.dotnet.gc.gen1Collections
builtin:tech.dotnet.gc.gen2Collections
Generation0
, Generation1
, Generation2
, and LargeObjectHeap
)builtin:tech.dotnet.memory.gen1Consumption
builtin:tech.dotnet.memory.gen2Consumption
builtin:tech.dotnet.memory.LOHConsumption
activeIOCompletionThreads
or activeWorkerThreads
)builtin:tech.dotnet.threadpool.workerThreads
Unsupported metrics
The following Metrics Classic metrics don't have a dedicated Grail metric.
NGINX
-
builtin:tech.nginx.cache.hitRatio
timeseriesmisses = sum(dt.runtime.nginx.plus.cache.misses),hits = sum(dt.runtime.nginx.plus.cache.hits)| fieldsAdd hit_ratio = misses[] / hits[] -
builtin:tech.nginx.serverZones.active
-
builtin:tech.nginx.serverZones.inactive
Node.js
- builtin:tech.nodejs.uvLoop.count
- builtin:tech.nodejs.uvLoop.loopLatency
- builtin:tech.nodejs.uvLoop.processedLatency
- builtin:tech.nodejs.uvLoop.totalTime