Homeโ€บ๐Ÿ”” Alerting & Automationโ€บModule 141 min read ยท 15/21

Classic SLOs โ†’ Platform SLOs

Hands-on2 exercises

Classic SLOs โ†’ Platform SLOs

Gen2 SLOs used metric selectors. Gen3 Platform SLOs use DQL-based SLIs โ€” more flexible and queryable.

Key Differences

GEN2 Classic SLO                        GEN3 Platform SLO
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Metric selector for SLI                 DQL timeseries for SLI
Fixed evaluation window                 Configurable timeframe
API: /api/v2/slo                        API: /platform/slo/v1/slos
Terraform: dynatrace_slo               Terraform: dynatrace_platform_slo
Limited to metric expressions           Full DQL power

Platform SLO API

// POST /platform/slo/v1/slos
{
  "name": "Service Availability",
  "criteria": [{
    "target": 99.5,
    "warning": 99.8,
    "timeframeFrom": "now-7d",
    "timeframeTo": "now"
  }],
  "customSli": "timeseries sli=avg(dt.host.cpu.idle), by:{dt.entity.host}"
}
๐Ÿ›  Try it

Write a Platform SLO API body for a service availability SLO with 99.5% target over 7 days.

extension.yamlYAML
Loading...

SLI Templates

// Service availability (% of successful requests)
timeseries sli = (
  sum(dt.service.request.count) - sum(dt.service.request.failure_count)
) / sum(dt.service.request.count) * 100

// Response time P95 under threshold
timeseries sli = percentile(dt.service.request.response_time, 95)

// Host CPU idle (availability proxy)
timeseries sli = avg(dt.host.cpu.idle), by:{dt.entity.host}

// Synthetic availability
timeseries sli = avg(dt.synthetic.browser.availability)

Important Rules

  • criteria MUST be an array (not an object)
  • customSli is a DQL string โ€” must be a single timeseries query
  • SLO names must be unique (duplicate โ†’ 400 error)
  • GET response wraps as customSli.indicator โ€” don't use that format for POST
  • SLO list returns response.slos[] (not results)