Try it free

Upgrade from Service-Level Objectives Classic to Service-Level Objectives

  • Latest Dynatrace
  • Upgrade guide
  • 9-min read
Upgrade Classic SLOs

We strongly recommend upgrading your Classic SLOs from SLOs Classic Service-Level Objectives Classic to SLOs Service-Level Objectives to maximize capabilities and benefit from the newest enhancements.

Dynatrace offers an improved experience for SLOs Service-Level Objectives (SLOs), allowing you to define tailored Service-Level Indicators (SLIs) using all available data points. This upgrade provides greater flexibility, customization, and integration with Grail.

Dynatrace provides two Service-Level Objectives application types:

  • SLOs Service-Level Objectives is our latest, Grail-powered application offering enhanced flexibility and customization options.

  • SLOs Classic Service-Level Objectives Classic is the previous application with limited capabilities.

The following examples show an SLO in SLOs Service-Level Objectives and multiple SLOs in Dashboards Dashboards.

SLO in DashboardsService availability SLOUser-conversion rate SLO
1 of 3SLO in Dashboards

Why upgrade?

The table below highlights the new functionality and shows the many reasons you should upgrade. It compares the capabilities of SLOs in SLOs Service-Level Objectives and SLOs Classic Service-Level Objectives Classic.

CapabilitySLOs Classic Service-Level Objectives ClassicSLOs Service-Level ObjectivesBusiness impact

Supported input for SLI definition

Limited to built-in or custom-calculated metrics

Supporting all data types in Grail, including business events, logs, spans, and time series

SLOs allow a finer granular configuration and tailored definition of the SLI.

Segmenting, data filtering for SLO evaluation

Management zones

Segments

Segments allow detailed filtering of the dataset used for the SLO evaluation.

Adding SLO tags

—

SLO tags

Add SLO tags (key-value pairs) and then use them to filter SLOs when querying them via the API.

Customized dashboard tiles

Classic dashboard tile

New dashboard SLO tiles

New dashboard SLO tiles allow more visual customization options, including what data should be shown and colorized. An additional SLO wizard overview allows for creating and editing SLOs in Dashboards Dashboards.

Integration with other Dynatrace Apps

Integrated with Dynatrace Classic Apps

Integrated with latest Dynatrace Apps

Difference between SLO and Classic SLO

The main difference between the SLO and the Classic SLO is that the SLI in the SLO is represented as a single DQL query. The DQL query allows extensive customization possibilities, unlike metric and entity selectors in the Classic SLO.

The benefits of DQL-based SLOs are as follows:

  • Use any telemetry data in Grail. For more information, see Upgrade from Metrics Classic to Metrics on Grail.
  • Apply custom filters and advanced options Dynatrace Query Language.
  • Benefit from simplified ratio calculations for SLI.

How core SLO components are defined in SLO and Classic SLO

For the core SLO components (SLI, target, evaluation period, status, and error budget), see Service-Level Objectives Classic basics.

The difference that matters for an upgrade is how the SLI is defined. In a Classic SLO, it's a metric expression and an entity selector. In an SLO, it's a single DQL query.

SLO Classic example using Metrics selectors

Below is an example of a Classic SLO using the classic metric selectors, similar to a DQL query.

A Classic SLO
A Classic SLO

SLO example using DQL

An SLO has two major parts: the Custom DQL and the Preview. In Custom DQL, you can define your DQL query. In Preview, you visualize the SLO.

Custom DQL

The SLO DQL query is structured to define the SLO and SLI. The SLO DQL example snippet defined in the Critical services or entities tab of the SLO has the following characteristics:

  • Define the data points.

    timeseries {total=sum(dt.service.request.count), failures=sum(dt.service.request.failure_count)},
  • Specify the entity scope.

    by: { dt.entity.service }
  • Display the information needed by using DQL filters.

    | fieldsAdd name = entityName(dt.entity.service)
    | filter in(name, "astroshop-checkoutservice", "astroshop-cartservice", "astroshop-paymentservice", "astroshop-shippingservice", "astroshop-currencyservice", "astroshop-frontend", "astroshop-recommendationservice")
  • Calculate the SLI.

    | fieldsAdd sli = (((total[] - failures[]) / total[]) * 100)
    | fields timeframe, interval, dt.entity.service, name, sli

Preview

Check the SLO and SLI statuses in Preview.

An SLI and SLO.
An SLI and SLO.

Upgrade Classic SLOs to SLOs

Classic SLOs with complex metric expressions

If the Classic SLO used entity selectors, management zones, or SLO tags, you may have to upgrade metrics, entities, and filters separately. For more on upgrading Classic SLOs with complex metric expressions, see Classic SLOs with complex metric expressions. For more information, see Upgrade metric selectors to DQL, and Primary Grail fields and tags.

To upgrade a Classic SLO to an SLO

  1. Go to SLOs Classic Service-Level Objectives Classic.

    Service-Level Objectives Classic showing an SLO
    Service-Level Objectives Classic showing an SLO
  2. Select the SLO you want to upgrade.

  3. From the Actions , select View in Data Explorer. The SLO opens in Data Explorer.

    Data Explorer opens with its own timeframe, so the Result value will not match the Classic SLO.

    	Data Explorer view after opening an SLO
    Data Explorer view after opening an SLO
  4. Select Open with… > Add to notebook.

    Data Explorer showing the Open with options
    Data Explorer showing the Open with options
    Data Explorer showing the Add to notebook option
    Data Explorer showing the Add to notebook option

    The SLO opens in Notebooks Notebooks.

  5. In the Select destination dialog, select an existing notebook from the dropdown list.

    If you don't have a notebook yet, select a New notebook.

  6. Select Confirm.

    A new notebook is created for you if you didn't have one before.

  7. Required In Notebooks Notebooks, go to the last line of the DQL query, and rename the result field to sli. The SLO requires the query to return a field named sli.

    Notebook with the DQL query, highlighting where expression was changed to sli
    Notebook with the DQL query, highlighting where expression was changed to sli
  8. Copy the DQL query from the notebook.

  9. Go to SLOs Service-Level Objectives.

  10. Select Service-level objective.

  11. Select Custom SLO.

    Service-Level Objectives showing the Custom SLO button
    Service-Level Objectives showing the Custom SLO button
  12. In the Critical services or entities tab, paste the DQL query in the Custom DQL field. In this step, management zones become segments.

  13. To validate the SLO DQL query, select Refresh to see the SLO in the Preview panel.

  14. Select Next.

  15. In the Criteria tab, enter the same Target and the evaluation period in the Over the evaluation period field as in the Classic SLO.

    Optional Turn on the Show warning option to show warning when value is below threshold.

  16. Select Next.

  17. In the Name and context tab, enter the name of the SLO.

    Optional Add an SLO description and Tags.

  18. Select Save.

    To verify the upgraded SLO, keep both SLOs running for one evaluation period and compare the values before you remove the Classic SLO.

You upgraded a Classic SLO to an SLO in Latest Dynatrace.

Upgrade Classic SLOs with complex metric expressions

  1. Map your Classic SLO metric expression to Grail.

    1. Check the comprehensive list in Upgrade from Metrics Classic to Metrics on Grail.
    2. Go through the Upgrade metric selectors to DQL steps.

    For complex metric expressions, you might need to manually adapt the DQL queries.

  2. Convert the entity selectors to the corresponding DQL statement. For more information, see DQL best practices.

    The following table shows the typical entity selectors for Classic SLOs and their DQL equivalent.

    Entity selector classicDQL representation

    type("SERVICE")

    by: {dt.entity.service}

    tag("myTag")

    | fieldsAdd tags=entityAttr(dt.entity.service, "tags")
    | filter in(tags, "myTag")

    entityId("SERVICE-XY")

    | filter in(dt.entity.service, "SERVICE-XY")

    entityName.contains/equals/in/startsWith("ENTITY-NAME")

    | fieldsAdd name = entityName(dt.entity.service)
    | filter in/contains/startsWith/endsWith(name, "ENTITY-NAME")

    mzId / mzName

    Use Segments.

    Segments aren't related to permissions or access control.

    toRelationship / fromRelationship

    See the relationship mapping table in Grail: Query monitored entities in Grail.

    For complex selectors, see classicEntitySelector.

    If you use management zones for permissions and access control, see Grant access to entities with security context.

  3. Enhance your SLI definition.

    While you can upgrade most Classic SLOs to a one-to-one match in Grail, consider enhancing your SLI definitions by leveraging options that are not available with traditional metric expressions.

    Take advantage of the new options:

    • Business hours
    • Key requests/endpoints in DQL
    • Advanced math operations
    • Use business events as leading indicators
    • Add SLO tags for filtering and grouping
    • Use segments for dynamic entity scope

Upgrade API integration

To automate SLO management and evaluation, use the dedicated API endpoints. Reference the table below to upgrade your API integration for Classic SLO to SLO leveraging the SLO Service Public API.

SLOs Classic Service-Level Objectives ClassicSLOs Service-Level Objectives

Service-level Objectives API classic

SLO Service Public API

Upgrade via Configuration as Code

For scalable SLO management and evaluation, use Configuration as Code overview on top of the SLO Service Public API.

To access the SLO Service Public API on your environment

  1. Go to Dynatrace.
  2. In the platform search, type API. In the search results, see Support resources section and Dynatrace API below it.
  3. Select Dynatrace API to access the Dynatrace API documentation. A new page opens with the Dynatrace API definitions.
  4. In the upper right corner, go to Select a definition.
  5. From the drop-down list, choose the endpoint.
  • Configuration as Code via Terraform overview support the SLO Service Public API since v1.78.0, and the Dynatrace Terraform provider can be found dynatrace-oss/dynatrace | Terraform Registry.

  • Configuration as Code via Monaco overview supports the SLO Service Public API since v2.22.

What's next?

An automated upgrade flow is under consideration; however, given the highly customized nature of SLOs, manual review is expected to yield the best results. Use this opportunity to reassess and improve your SLIs, rather than simply copying them one-to-one.

For further optimization and guidance, contact your Dynatrace support team to maximize business impact from your service-level objectives.

Related topics

  • Discover Dynatrace
  • Service-level objective templates
  • Service-level objective examples
Related tags
Application ObservabilityService-Level ObjectivesService-Level Objectives