PluginBench
Skill
Pass
Audit score 90

dt-obs-predictive-analytics

dynatrace/dynatrace-for-ai

Forecast resource saturation, detect trends, and identify anomalies across Dynatrace infrastructure using time-series analysis.

What is dt-obs-predictive-analytics?

Predictive analytics skill for Dynatrace that enables time-series forecasting, capacity saturation planning, and anomaly detection. Use it when you need to forecast future metric values, detect when signal behavior changed, identify current violations, or characterize metric seasonality and trends before setting up alerts.

  • Forecast future metric values for capacity planning and cost estimation using univariate time-series forecasting
  • Detect when metrics shifted or changed character (spikes, trends, variability changes) without requiring predefined thresholds
  • Identify entities currently violating acceptable ranges using static, adaptive, or seasonal-baseline anomaly detection
  • Characterize signal behavior including seasonality, noise level, and trend direction
  • Analyze saturation risk and estimate days-to-saturation for resource planning
  • Discover available metrics and run DQL queries against Dynatrace data

How to install dt-obs-predictive-analytics

npx skills add https://github.com/dynatrace/dynatrace-for-ai --skill dt-obs-predictive-analytics
Prerequisites
  • Dynatrace tenant with data access
  • DQL query permissions to execute timeseries and metric queries
Claude Code
Cursor
Windsurf
Cline

How to use dt-obs-predictive-analytics

  1. 1.Choose your analysis discipline: are you detecting a change, checking current violations, forecasting future values, or characterizing signal behavior?
  2. 2.Select the appropriate tool: timeseries-novelty-detection for changes, anomaly detectors for current state, timeseries-forecast for predictions
  3. 3.Run the tool or DQL query against your metric and time range
  4. 4.Analyze results using the structured table format with Last Actual, Forecast, Range, Trend indicators, and recommended Actions
  5. 5.Follow up with Key Findings summary ranked by priority

Use cases

Good for
  • Forecast CPU usage across hosts to identify which will hit 90% capacity in the next 30 days
  • Detect when service request volume started trending upward to trigger proactive scaling
  • Identify services with unusual error rates compared to their weekly baseline pattern
  • Characterize memory usage patterns on Kubernetes nodes before configuring alerting thresholds
  • Compare today's traffic against last week's baseline to spot anomalies
Who it's for
  • Infrastructure and platform engineers planning capacity
  • SREs setting up proactive alerting and anomaly detection
  • DevOps teams forecasting resource needs for cost estimation
  • Observability engineers analyzing metric behavior before tuning thresholds

dt-obs-predictive-analytics FAQ

Should I use timeseries-novelty-detection or an anomaly detector?

Use timeseries-novelty-detection when asking 'did this metric change?' — it detects when signal character shifted without needing a threshold. Use anomaly detectors (adaptive, seasonal, static) when asking 'is this currently wrong?' — they measure ongoing violations relative to an expected range.

Can I forecast using multiple metrics as inputs?

No. Dynatrace Forecast Analyzer supports univariate forecasting only (one metric based on its own history). For multivariate forecasting, use external tools like Python, R, or Azure AutoML.

What DQL functions should I use for trend analysis?

Use arrayMovingAvg() for smoothed trends, arrayPercentile() for saturation risk, arrayLast() and arrayFirst() for growth calculation, and arrayAvg() for baseline comparison. Always filter isNotNull() before sorting to avoid null ordering issues.

How do I discover which metrics are available in my Dynatrace tenant?

Run a metric discovery query filtering by keyword: `metrics from: now() - 1h | filter contains(metric.key, "cpu") | summarize count(), by: {metric.key}`

What is the correct entity reference in DQL queries?

Use dt.smartscape.* (not deprecated dt.entity.*) for both display fields and grouping clauses in entity-level queries.

Full instructions (SKILL.md)

Source of truth, from dynatrace/dynatrace-for-ai.


name: dt-obs-predictive-analytics description: Predictive analytics for Dynatrace — time series forecasting with the timeseries-forecast tool, capacity saturation planning, trend and anomaly detection across hosts, services, and infrastructure. license: Apache-2.0

Predictive Analytics Skill

Forecast resource saturation, detect trends, analyze anomalies, and characterize signal behavior using DQL and Dynatrace analyzer tools.

Analysis Disciplines

#DisciplineUse when …
1Forecast and PredictionPredicting future metric values for capacity planning, cost estimation, or proactive alerting
2Detecting ChangesA metric shifted — find when the character of the signal changed, regardless of whether it crossed a limit
3Detecting ViolationsA metric is currently out of bounds — find entities that exceed or fall below an acceptable range
4Timeseries CharacteristicsCharacterizing a signal's seasonality, noise level, and trend before further analysis

Choosing the Right Detection Tool

The single most important decision: are you asking "did this metric change?" or "is this metric currently wrong?"

QuestionToolWhy
"Did this metric change in the last N hours?"timeseries-novelty-detectionDetects when the signal's character changed (spike, step, trend onset, variability shift) without requiring a known acceptable limit
"Which services spiked or dropped recently?"timeseries-novelty-detection with SPIKE / CHANGE_IN_VALUESFinds the specific entities and timestamps where change occurred; returns empty for stable signals
"When did CPU start trending up?"timeseries-novelty-detection with TREND_IN_VALUESPinpoints the onset of a directional shift
"Which hosts are currently above 90% CPU?"static-threshold-analyzerKnown fixed limit — fire alerts when exceeded
"Which services are currently above their usual load?"adaptive-anomaly-detectorLearns the normal distribution from the data and flags sustained threshold violations
"Which services are high right now vs. their weekly pattern?"seasonal-baseline-anomaly-detectorAccounts for time-of-day/day-of-week patterns before deciding what is anomalous

Decision rule in plain language

  • Use timeseries-novelty-detection when the question contains "changed", "shifted", "spiked", "dropped", "started", "when did", or "did anything unusual happen". The tool answers whether a change occurred and when. It requires no predefined threshold.
  • Use an anomaly detector (adaptive, seasonal, or static) when the question is about ongoing or current state relative to an expected range: "which are highest", "who is violating", "what is above X". These tools count violation samples inside a sliding window — they confirm how long something has been bad, not whether the signal changed.

Pitfall: Running adaptive-anomaly-detector on a broad fleet to answer "which service changed load?" typically flags every service that has any variation, producing low-signal results. Use timeseries-novelty-detection first to identify entities where the load character genuinely shifted, then use the anomaly detectors to measure the severity of those specific signals.

When to Use This Skill

  • Capacity: "Which hosts will hit 90% CPU in the next 30 days?"
  • Forecast: "Forecast service request volume for the next 7 days"
  • Trend: "Is memory usage growing across our Kubernetes nodes?"
  • Anomaly: "Which services have unusual error rates right now?"
  • Baseline: "How does today's traffic compare to last week?"
  • Signal profile: "Is this metric seasonal or trending before I set up alerting?"

Important Constraints

Dynatrace Forecast Analyzer supports univariate forecasting only — predicting one metric based on its own historical values. Multivariate forecasting (using multiple metrics as inputs) requires external tools (Python, R, Azure AutoML).

Tooling Rule: Run analyses using Dynatrace tools: timeseries-forecast, adaptive-anomaly-detector, seasonal-baseline-anomaly-detector, static-threshold-analyzer, and timeseries-novelty-detection. Use execute-dql for DQL queries.

Result Analysis Rule: Always analyse and summarise results directly from the raw tool output. Derive all numbers, trends, and conclusions inline.


Result Presentation Format

Always present forecast results as a structured table:

ColumnContent
Rank🥇 🥈 🥉 ordered by urgency or magnitude
Signal / EntityMetric name and entity or dimension
Last ActualMost recent non-null value from the historical series
ForecastPoint forecast at the end of the horizon
RangeLower – Upper confidence band at the same horizon point
Trend% change from Last Actual to Forecast: 🔴 >+20% / 🟠 +5–20% / 🟢 ±5% stable / 🔵 −5–20% declining / ⚫ <−20% sharp drop
Action✅ No action / ⚠️ Monitor / 🔴 Act now

Always follow the table with a Key Findings section (3–5 bullet points, ranked by priority).


Core DQL Techniques

DQL has no native forecast function. For forward-looking forecasts, use timeseries-forecast (see references/forecasting-analyzer.md).

Key DQL Rules

  1. timeseries returns arrays — one value per time slot per entity
  2. arrayLast(arr) = most recent value; arrayFirst(arr) = oldest
  3. Growth = (arrayLast - arrayFirst) / number_of_intervals
  4. Always filter isNotNull(field) before sorting to avoid null ordering issues
  5. Use toLong() when dividing Long fields to avoid type errors
  6. Use dt.smartscape.* not deprecated dt.entity.* in DQL display fields; use dt.smartscape.* in by:{} grouping clauses for entity-level queries

Standard Query Patterns

Moving Average Trend

timeseries cpu = avg(dt.host.cpu.usage), from: now()-24h, interval: 1h, by: {dt.smartscape.host}
| fieldsAdd moving_avg = arrayMovingAvg(cpu, 4)
| fieldsAdd current = arrayLast(cpu)
| fieldsAdd trend = arrayLast(cpu) - arrayFirst(cpu)
| filter isNotNull(current)
| sort trend desc
| limit 20
| fields dt.smartscape.host, current, trend, moving_avg

Saturation Risk Classification

timeseries cpu = avg(dt.host.cpu.usage), from: now()-7d, interval: 1h, by: {dt.smartscape.host}
| fieldsAdd p95 = arrayPercentile(cpu, 95)
| fieldsAdd saturation_risk = if(p95 > 85, "HIGH", else: if(p95 > 70, "MEDIUM", else: "LOW"))
| filter isNotNull(p95)
| sort p95 desc
| fields dt.smartscape.host, p95, saturation_risk

Days to Saturation Forecast

timeseries cpu = avg(dt.host.cpu.usage), from: now()-30d, interval: 1d, by: {dt.smartscape.host}
| fieldsAdd current = arrayLast(cpu)
| fieldsAdd daily_growth = (arrayLast(cpu) - arrayFirst(cpu)) / 30
| filter isNotNull(current)
| fieldsAdd days_to_saturation = if(daily_growth > 0, toLong((90 - current) / daily_growth), else: 9999)
| sort days_to_saturation asc
| limit 20
| fields dt.smartscape.host, current, daily_growth, days_to_saturation

Anomaly Scoring

timeseries cpu = avg(dt.host.cpu.usage), from: now()-24h, interval: 1h, by: {dt.smartscape.host}
| fieldsAdd baseline_avg = arrayAvg(cpu)
| fieldsAdd current = arrayLast(cpu)
| fieldsAdd anomaly_score = if(isNotNull(current) and isNotNull(baseline_avg), abs(current - baseline_avg), else: 0)
| sort anomaly_score desc
| limit 20
| fields dt.smartscape.host, current, baseline_avg, anomaly_score

Metric Discovery

Before forecasting, discover available metrics by keyword:

metrics from: now() - 1h
| filter contains(metric.key, "cpu")
| summarize count(), by: {metric.key}
| sort `count()` desc

Reference Guides

  • references/forecasting-analyzer.md — timeseries-forecast tool: data requirements, parameter reference, interval selection, horizon limits, common pitfalls
  • references/capacity-forecasting.md — CPU/memory/disk/K8s saturation forecasts; multi-resource risk scoring; days-to-saturation DQL patterns
  • references/anomaly-scoring.md — adaptive-anomaly-detector, seasonal-baseline-anomaly-detector, static-threshold-analyzer; DQL deviation scoring
  • references/novelty-detection.md — timeseries-novelty-detection tool: spike, drop, step change, trend onset, and variability change detection; all novelty types; parameter reference; worked examples
  • references/trend-detection.md — timeseries-novelty-detection for trend onset and change points; week-over-week joins; growth rate and acceleration detection

Related Skills

  • dt-dql-essentials — DQL syntax, timeseries command rules, array function reference
  • dt-obs-hosts — Host and process metrics catalog
  • dt-obs-services — Service RED metrics for service-level trend analysis
  • dt-obs-problems — Davis AI problem history for anomaly correlation