Latest Dynatrace
This guide provides insights into migrating service 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:
When a single Grail metric provides support for multiple Metrics Classic metrics, you can obtain comparable results for values of individual metrics through metric dimensions.
HTTP 4xx and HTTP 5xx
Example: The following DQL queries return respectively the rate of requests with HTTP response status code 5xx and 4xx—an equivalent of builtin:service.errors.fivexx.rate
and builtin:service.errors.fourxx.rate
.
// calculate HTTP 5xx response status code request ratetimeseries {total = sum(dt.service.request.count)}| join [timeseries {fiveXX = sum(dt.service.request.count, default: 0.0)},filter:http.response.status_code >= 500 and http.response.status_code <= 599], kind:leftOuter, prefix: "httpState.", on:{ timeframe }| fieldsAdd {rate5xx = httpState.fiveXX[] / total[] * 100}| fields rate5xx, timeframe, interval
// calculate HTTP 4xx response status code request ratetimeseries {total = sum(dt.service.request.count)}| join [timeseries {fourXX = sum(dt.service.request.count, default: 0.0)},filter: http.response.status_code >= 400 and http.response.status_code<=499], kind:leftOuter, prefix: "httpState.", on:{ timeframe }| fieldsAdd {rate4xx = httpState.fourXX[] / total[] * 100}| fields rate4xx, timeframe, interval
Metric key (Grail) | Filter by | Metric key (Classic) |
---|---|---|
dt.service.request.count | http.response.status_code (5xx or 4xx) | builtin:service.errors.fivexx.rate builtin:service.errors.fourxx.rate |
Failure and success
Example: The following DQL query returns the average number of successful requests to MY_SERVICE-00000
—an equivalent ofbuiltin:service.errors.total.successCount
.
timeseries sum(dt.service.request.count),by:{dt.entity.service, failed},filter:{dt.entity.service == "<MY_SERVICE-00000>"and failed == false}
Metric key (Grail) | Filter by | Metric key (Classic) |
---|---|---|
dt.service.request.count | failed ( | builtin:service.errors.client.successCount |
Failure and success of HTTP 4xx and HTTP 5xx
Example: The following DQL query returns the average number of failed requests to MY_SERVICE-00000
with HTTP response status code 4xx—an equivalent ofbuiltin:service.errors.fourxx.count
.
timeseries sum(dt.service.request.count),by:{dt.entity.service, failed, http.response.status_code},filter:{dt.entity.service == "<MY_SERVICE-00000>"and failed == trueand http.response.status_code >= 400and http.response.status_code <= 499}
Metric key (Grail) | Filter by | Metric key (Classic) |
---|---|---|
dt.service.request.count | failed ( | builtin:service.errors.fivexx.successCount |
Key requests
Endpoints replace key requests in Grail. To learn more about endpoint.name, see the Semantic dictionary.
Example: The following DQL query example returns the sum of the number of requests of the request /orange.jsf
with HTTP response status code 5xx, as builtin:service.keyRequest.errors.fivexx.rate
.
timeseries sum(dt.service.request.count),by:{endpoint.name, http.response.status_code},filter:{endpoint.name == "/orange.jsf"and http.response.status_code >= 500and http.response.status_code <= 599}
Metric key (Grail) | Filter by | Metric key (Classic) |
---|---|---|
dt.service.request.failure_count | endpoint.name ( | builtin:service.keyRequest.errors.client.count |
dt.service.request.response_time | endpoint.name ( | builtin:service.keyRequest.response.client |
dt.service.request.count | endpoint.name ( | builtin:service.keyRequest.count.client |
endpoint.name ( | builtin:service.keyRequest.errors.client.successCount | |
endpoint.name ( | builtin:service.keyRequest.errors.fivexx.rate | |
endpoint.name ( | builtin:service.keyRequest.errors.fivexx.successCount |
The following Metrics Classic metrics don't have a dedicated Grail metric. Support is planned with Traces in Grail. To learn more about what's coming, see Blog post: Expanded Grail data lakehouse and new Dynatrace user experience unlock boundless analytics.
Database
Example: The following DQL query returns the amount and the duration of database spans for each database service, similarly to builtin:service.dbChildCallCount
and builtin:service.dbChildCallTime
.
fetch spans
Previewfetch spans
is currently in Preview and only accessible to selected customers. If you would like to share feedback or ideas, please join our dedicated Community user group, or reach out to your Customer Success Manager.
For more information, see
fetch spans, samplingRatio:1// get only database client span| filter span.kind == "client" and isNotNull(db.statement)// calculate how frequently each span is sampled| fieldsAdd sampling.probability = (power(2, 56) - coalesce(sampling.threshold, 0)) * power(2, -56)| fieldsAdd sampling.multiplicity = 1/sampling.probability// calculate the number of database spans after sampling| fieldsAdd multiplicity = coalesce(sampling.multiplicity, 1)* coalesce(aggregation.count, 1)* dt.system.sampling_ratio// calculate the duration of database spans after sampling| fieldsAdd duration = coalesce(aggregation.duration_sum / aggregation.count, duration)// aggregate records with the same values, by service ID| summarize {operation_count_extrapolated = sum(multiplicity),operation_duration_avg_extrapolated = sum(duration * multiplicity) / sum(multiplicity)}, by: { entityName(dt.entity.service), db.namespace }
CPU
Service method groups
Other