dt-alerting
Configure and understand the full alerting lifecycle in Dynatrace — from anomaly
detector setup through Grail event storage, problem grouping, and workflow
notification delivery.
The Alerting Lifecycle
┌─────────────────────────────────────────────────────────────────────┐
│ Alert Sources — five categories, each fires a DAVIS_EVENT │
│ ───────────────────────────────────────────────────────────────── │
│ 1. DQL-based · Grail-scheduled server-side detector │
│ 2. Edge · OneAgent on monitored host or process │
│ 3. Pipeline · OpenPipeline ingest-stream filter matcher │
│ 4. Synthetic · Worldwide synthetic checker node │
│ 5. External · Events API, Workflow, or OneAgent local ingest │
└──────────────────────────────┬──────────────────────────────────────┘
│ DAVIS_EVENT created per trigger per entity
▼
┌─────────────────────────────────────┐
│ Event stored in Grail │ Persisted and queryable via DQL.
└──────────────────┬──────────────────┘ One event per trigger per entity.
│ correlated by root-cause and impact graph
▼
┌─────────────────────────────────────┐
│ Problem (Denoising) │ Events sharing the same root-cause
└──────────────────┬──────────────────┘ and impact graph → one Problem.
│ problem event triggers workflow
▼
┌─────────────────────────────────────┐
│ Workflow Notification │ Filters problems and routes to
└─────────────────────────────────────┘ email, Slack, ServiceNow, webhook.
When to Use This Skill
- Detector setup — "How do I create an anomaly detector?", "What kind of
detector should I use?", "What is the difference between adaptive and seasonal?"
- Alert event history — "Query all alert events for this service", "Show me
which metrics triggered alerts last week"
- Problem denoising — "Why did these two alerts merge into one problem?",
"How does Davis group alerts?"
- Notification setup — "How do I send a Slack message when a problem opens?",
"Set up a ServiceNow ticket on critical problems"
- Best practices — "How do I avoid alert storms?", "Which sensitivity setting
should I use?"
- Over-alerting analysis — "Why am I getting too many alerts?", "How do I
reduce alert fatigue?", "Which detector is firing the most?", "How do I tune
sensitivity or thresholds to avoid noise?"
- Notification routing — "How do I route alerts to the right team?", "Set up
scalable problem filters in workflows", "Send Slack notifications only to the
team responsible for the affected service"
Agent Instructions
First step for any alerting setup request — Before recommending a specific
detector or model, load references/anomaly-detectors.md and use its category
and model decision guide to identify which detector category (DQL-based, Edge,
Pipeline, Synthetic, External) and which model (Static, Adaptive, Seasonal)
best fits the user's use-case. Only proceed with configuration guidance once
the right detector type has been established.
Consolidate, don't multiply — When a user asks to alert on multiple
entities of the same kind (e.g. "alert on services A, B, and C"), always
recommend a single combined detector rather than one detector per entity.
Use by: { <dimension> } in the DQL timeseries call to split results per
entity, and a single filter: clause to scope to the relevant entities.
Pair the combined detector with a single dt.alert_group tag shared
across all alert conditions and the corresponding workflow notification filter.
This keeps the number of detector configs small, ensures consistent routing,
and makes the workflow notification channel reusable for future entities added
to the same group.
Example for three services — one detector, one workflow:
timeseries avg(dt.service.request.response_time),
by: { dt.smartscape.service },
filter: { in(dt.smartscape.service, {toSmartscapeId("SERVICE-0000000000000001"), toSmartscapeId("SERVICE-0000000000000002"), toSmartscapeId("SERVICE-0000000000000003")}) }
Set dt.alert_group: "checkout-team" in the detector's event properties, then
filter the notification workflow on matchesPhrase(dt.alert_group, "checkout-team").
If a new service must be covered, add it to the single filter: list — no new
detector or workflow rule needed.
Intent Mapping
| User Request |
Action |
Reference |
| "how to alert on ...", "create an alert on ...", "create anomaly detector", "set up alerting", "configure alert rule" |
Explain detector categories and variants, guide through model selection |
anomaly-detectors.md |
| "what kinds of anomaly detectors", "edge alert", "pipeline alert", "synthetic alert", "OneAgent alert" |
Explain the five alert source categories and their trade-offs |
anomaly-detectors.md |
| "static vs adaptive", "which detector model", "seasonal detector" |
Compare models, apply decision guide |
anomaly-detectors.md |
| "query alert history", "which alerts fired", "Davis events in Grail" |
Query dt.davis.events in Grail via fetch dt.davis.events |
davis-events.md |
| "why did alerts merge", "problem grouping", "denoising" |
Do NOT explain merging rules here — load dt-obs-problems and refer to problem-merging.md for the full merge logic |
dt-obs-problems/references/problem-merging.md |
| "send Slack notification", "email on problem", "ServiceNow ticket", "notify on alert" |
Explain problem-triggered workflow setup |
workflow-notifications.md |
| "alert storm", "too many notifications", "reduce noise" |
Filtering strategy, denoising, sensitivity tuning |
workflow-notifications.md + anomaly-detectors.md |
Analyzing existing problems — If the user wants to query or investigate
active/closed problems (root cause, impact, trending), load dt-obs-problems
instead. This skill covers configuration and flow, not problem query analytics.
Detector health monitoring — If the user asks whether detectors are
running or failing, load dt-platform (ANALYZER_EXECUTION_EVENT,
ANOMALY_DETECTOR_STATUS_EVENT). This skill covers setup, not operational health.
Prerequisites
- Access to a Dynatrace environment with Settings v2 write permissions for
detector configuration
- For querying alert history: DQL permissions on
dt.davis.events
- Load
dt-dql-essentials before writing DQL queries
Knowledge Base Structure
| # |
Reference |
Content |
| 1 |
anomaly-detectors.md |
Detector types, model selection, configuration, best practices |
| 2 |
davis-events.md |
Davis event storage in Grail, key fields, DQL query patterns |
| 3 |
workflow-notifications.md |
Problem-triggered workflows, filtering, notification channels |
Key Concepts
Alert Source Categories
Five fundamental categories of anomaly detectors, distinguished by where detection
runs and how the alert event reaches Dynatrace:
| # |
Category |
Detection runs on |
Latency |
Alert logic owner |
| 1 |
DQL-based |
Grail (server-side, scheduled) |
Minutes |
Dynatrace |
| 2 |
Edge |
OneAgent on the monitored host/process |
Seconds |
Dynatrace (OneAgent) |
| 3 |
Pipeline |
OpenPipeline ingest path (in-stream) |
Near-zero |
Dynatrace (pipeline rule) |
| 4 |
Synthetic |
Synthetic checker node (worldwide) |
Seconds |
Dynatrace (synthetic node) |
| 5 |
External |
Customer / external tool |
Caller-defined |
Customer |
See references/anomaly-detectors.md for the full breakdown of each category,
including trade-offs and configuration entry points.
Detector Models at a Glance
| Model |
Threshold |
Best for |
| Static |
Fixed value you define |
Known hard limits (e.g. error rate > 5%) |
| Adaptive baseline |
Learned from recent history |
Metrics with no fixed limit but clear normal behavior |
| Seasonal baseline |
Learned with time-of-day / day-of-week awareness |
Traffic, request rate, or any metric with recurring patterns |
Davis Events vs. Problems
| Concept |
Table |
Scope |
| Davis event |
fetch dt.davis.events |
One record per detector trigger per entity |
| Problem |
fetch dt.davis.problems |
One record per correlated group of events sharing root-cause and impact |
A single problem typically contains multiple events. Querying problems gives
the operational view; querying events gives the raw alert history.
Problem Denoising
For questions about why alerts merged into a problem or how Davis groups
events, load dt-obs-problems — the merge logic and rules are documented in
dt-obs-problems/references/problem-merging.md. This skill covers alert
configuration and flow only.
Quick Start
Check What Alerts Fired in the Last 24 Hours
fetch dt.davis.events, from: -24h
| filter event.status == "ACTIVE"
| summarize alert_count = count(), by: {event.name, event.category, dt.smartscape_source.id}
| sort alert_count desc
| limit 20
Check Alert Volume by Category
fetch dt.davis.events, from: -24h
| summarize count = count(), by: {event.category, event.status}
| sort count desc
See All Active Problems (→ load dt-obs-problems for full query patterns)
fetch dt.davis.problems, from: -24h
| filter not(dt.davis.is_duplicate) and event.status == "ACTIVE"
| fields event.start, display_id, event.name, event.category
| sort event.start desc
| limit 20
Best Practices
- Match the model to the metric's behavior — Use static for hard SLO
boundaries, adaptive for metrics without a natural fixed limit, seasonal for
anything that follows business hours or weekly patterns.
- Scope detectors narrowly — An entity selector that covers only relevant
entities reduces noise and makes problems more actionable.
- Tune sensitivity before going to production — Start with LOW sensitivity
and move to MEDIUM or HIGH only after observing false-positive rates.
- Let Davis denoise before notifying — Trigger workflow notifications on
problems, not individual alert events. A problem groups correlated alerts
so you notify once per incident, not once per metric.
- Filter notifications by severity level — Route
event.severity <= 2 problems to
on-call channels immediately; route event.severity >= 3 problems to lower-
urgency channels. Either set severity in the detector config or assign in a pipeline rule or workflow.
- Use
dt.alert_group event property for routing — Assign dt.alert_group to route alerts to the right team. Either set a static value in the detector config, use dynamic assignment through DQL query result mapping or assign in a pipeline rule.
- Combine same-condition alerts into one detector and one workflow — When
alerting on multiple entities with the same metric and threshold, merge them
into a single DQL-based detector using
by: { <dimension> } and a combined
filter: clause. Assign the same dt.alert_group value to every condition
in that detector and point the workflow notification channel at that single
group. One detector + one workflow per logical alert group scales better than
N detectors + N notification rules, and adding a new entity is a one-line
filter change rather than a full detector/workflow addition.
Related Skills
- dt-obs-problems — Querying, analyzing, and trending detected problems
- dt-obs-predictive-analytics — Ad-hoc anomaly and novelty detection using
MCP analyzer tools (not persistent alert configs)
- dt-platform — Operational health of anomaly detectors (execution events,
failure rates)
- dt-platform-costs — Query costs generated by anomaly detector DQL
- dt-sdlc-quality-gates — Site Reliability Guardian for deployment gate alerting
- dt-dql-essentials — DQL syntax for writing detector queries and alert history
queries
1---2name: dt-alerting3description: End-to-end Dynatrace alerting lifecycle — anomaly detector setup and model selection (static threshold, adaptive baseline, seasonal baseline), alert event storage in Grail, problem grouping and denoising by root cause analysis, and workflow-based notification routing (email, Slack, ServiceNow, webhook). Use when configuring alerting, choosing between detector types, querying alert event history, understanding why alerts merged into a problem, or setting up problem-triggered notifications.4license: Apache-2.05---6
7# dt-alerting
8
9Configure and understand the full alerting lifecycle in Dynatrace — from anomaly
10detector setup through Grail event storage, problem grouping, and workflow
11notification delivery.
12
13## The Alerting Lifecycle
14
15```
16┌─────────────────────────────────────────────────────────────────────┐
17│ Alert Sources — five categories, each fires a DAVIS_EVENT │
18│ ───────────────────────────────────────────────────────────────── │
19│ 1. DQL-based · Grail-scheduled server-side detector │
20│ 2. Edge · OneAgent on monitored host or process │
21│ 3. Pipeline · OpenPipeline ingest-stream filter matcher │
22│ 4. Synthetic · Worldwide synthetic checker node │
23│ 5. External · Events API, Workflow, or OneAgent local ingest │
24└──────────────────────────────┬──────────────────────────────────────┘
25 │ DAVIS_EVENT created per trigger per entity
26 ▼
27 ┌─────────────────────────────────────┐
28 │ Event stored in Grail │ Persisted and queryable via DQL.
29 └──────────────────┬──────────────────┘ One event per trigger per entity.
30 │ correlated by root-cause and impact graph
31 ▼
32 ┌─────────────────────────────────────┐
33 │ Problem (Denoising) │ Events sharing the same root-cause
34 └──────────────────┬──────────────────┘ and impact graph → one Problem.
35 │ problem event triggers workflow
36 ▼
37 ┌─────────────────────────────────────┐
38 │ Workflow Notification │ Filters problems and routes to
39 └─────────────────────────────────────┘ email, Slack, ServiceNow, webhook.
40```
41
42## When to Use This Skill
43
44- **Detector setup** — "How do I create an anomaly detector?", "What kind of
45 detector should I use?", "What is the difference between adaptive and seasonal?"
46- **Alert event history** — "Query all alert events for this service", "Show me
47 which metrics triggered alerts last week"
48- **Problem denoising** — "Why did these two alerts merge into one problem?",
49 "How does Davis group alerts?"
50- **Notification setup** — "How do I send a Slack message when a problem opens?",
51 "Set up a ServiceNow ticket on critical problems"
52- **Best practices** — "How do I avoid alert storms?", "Which sensitivity setting
53 should I use?"
54- **Over-alerting analysis** — "Why am I getting too many alerts?", "How do I
55 reduce alert fatigue?", "Which detector is firing the most?", "How do I tune
56 sensitivity or thresholds to avoid noise?"
57- **Notification routing** — "How do I route alerts to the right team?", "Set up
58 scalable problem filters in workflows", "Send Slack notifications only to the
59 team responsible for the affected service"
60
61## Agent Instructions
62
63**First step for any alerting setup request** — Before recommending a specific
64detector or model, load `references/anomaly-detectors.md` and use its category
65and model decision guide to identify which detector category (DQL-based, Edge,
66Pipeline, Synthetic, External) and which model (Static, Adaptive, Seasonal)
67best fits the user's use-case. Only proceed with configuration guidance once
68the right detector type has been established.
69
70**Consolidate, don't multiply** — When a user asks to alert on multiple
71entities of the same kind (e.g. "alert on services A, B, and C"), always
72recommend a **single combined detector** rather than one detector per entity.
73Use `by: { <dimension> }` in the DQL `timeseries` call to split results per
74entity, and a single `filter:` clause to scope to the relevant entities.
75Pair the combined detector with a **single `dt.alert_group` tag** shared
76across all alert conditions and the corresponding workflow notification filter.
77This keeps the number of detector configs small, ensures consistent routing,
78and makes the workflow notification channel reusable for future entities added
79to the same group.
80
81Example for three services — one detector, one workflow:
82
83```dql
84timeseries avg(dt.service.request.response_time),
85 by: { dt.smartscape.service },
86 filter: { in(dt.smartscape.service, {toSmartscapeId("SERVICE-0000000000000001"), toSmartscapeId("SERVICE-0000000000000002"), toSmartscapeId("SERVICE-0000000000000003")}) }
87```
88
89Set `dt.alert_group: "checkout-team"` in the detector's event properties, then
90filter the notification workflow on `matchesPhrase(dt.alert_group, "checkout-team")`.
91If a new service must be covered, add it to the single `filter:` list — no new
92detector or workflow rule needed.
93
94### Intent Mapping
95
96| User Request | Action | Reference |
97|---|---|---|
98| "how to alert on ...", "create an alert on ...", "create anomaly detector", "set up alerting", "configure alert rule" | Explain detector categories and variants, guide through model selection | anomaly-detectors.md |
99| "what kinds of anomaly detectors", "edge alert", "pipeline alert", "synthetic alert", "OneAgent alert" | Explain the five alert source categories and their trade-offs | anomaly-detectors.md |
100| "static vs adaptive", "which detector model", "seasonal detector" | Compare models, apply decision guide | anomaly-detectors.md |
101| "query alert history", "which alerts fired", "Davis events in Grail" | Query `dt.davis.events` in Grail via `fetch dt.davis.events` | davis-events.md |
102| "why did alerts merge", "problem grouping", "denoising" | Do NOT explain merging rules here — load `dt-obs-problems` and refer to `problem-merging.md` for the full merge logic | dt-obs-problems/references/problem-merging.md |
103| "send Slack notification", "email on problem", "ServiceNow ticket", "notify on alert" | Explain problem-triggered workflow setup | workflow-notifications.md |
104| "alert storm", "too many notifications", "reduce noise" | Filtering strategy, denoising, sensitivity tuning | workflow-notifications.md + anomaly-detectors.md |
105
106> **Analyzing existing problems** — If the user wants to query or investigate
107> active/closed problems (root cause, impact, trending), load `dt-obs-problems`
108> instead. This skill covers *configuration and flow*, not problem query analytics.
109
110> **Detector health monitoring** — If the user asks whether detectors are
111> running or failing, load `dt-platform` (ANALYZER_EXECUTION_EVENT,
112> ANOMALY_DETECTOR_STATUS_EVENT). This skill covers *setup*, not operational health.
113
114## Prerequisites
115
116- Access to a Dynatrace environment with Settings v2 write permissions for
117 detector configuration
118- For querying alert history: DQL permissions on `dt.davis.events`
119- Load `dt-dql-essentials` before writing DQL queries
120
121## Knowledge Base Structure
122
123| # | Reference | Content |
124|---|-----------|---------|
125| 1 | [anomaly-detectors.md](references/anomaly-detectors.md) | Detector types, model selection, configuration, best practices |
126| 2 | [davis-events.md](references/davis-events.md) | Davis event storage in Grail, key fields, DQL query patterns |
127| 3 | [workflow-notifications.md](references/workflow-notifications.md) | Problem-triggered workflows, filtering, notification channels |
128
129## Key Concepts
130
131### Alert Source Categories
132
133Five fundamental categories of anomaly detectors, distinguished by where detection
134runs and how the alert event reaches Dynatrace:
135
136| # | Category | Detection runs on | Latency | Alert logic owner |
137|---|----------|-------------------|---------|-------------------|
138| 1 | **DQL-based** | Grail (server-side, scheduled) | Minutes | Dynatrace |
139| 2 | **Edge** | OneAgent on the monitored host/process | Seconds | Dynatrace (OneAgent) |
140| 3 | **Pipeline** | OpenPipeline ingest path (in-stream) | Near-zero | Dynatrace (pipeline rule) |
141| 4 | **Synthetic** | Synthetic checker node (worldwide) | Seconds | Dynatrace (synthetic node) |
142| 5 | **External** | Customer / external tool | Caller-defined | Customer |
143
144See `references/anomaly-detectors.md` for the full breakdown of each category,
145including trade-offs and configuration entry points.
146
147### Detector Models at a Glance
148
149| Model | Threshold | Best for |
150|-------|-----------|----------|
151| **Static** | Fixed value you define | Known hard limits (e.g. error rate > 5%) |
152| **Adaptive baseline** | Learned from recent history | Metrics with no fixed limit but clear normal behavior |
153| **Seasonal baseline** | Learned with time-of-day / day-of-week awareness | Traffic, request rate, or any metric with recurring patterns |
154
155### Davis Events vs. Problems
156
157| Concept | Table | Scope |
158|---------|-------|-------|
159| **Davis event** | `fetch dt.davis.events` | One record per detector trigger per entity |
160| **Problem** | `fetch dt.davis.problems` | One record per correlated group of events sharing root-cause and impact |
161
162A single problem typically contains multiple events. Querying problems gives
163the operational view; querying events gives the raw alert history.
164
165### Problem Denoising
166
167For questions about why alerts merged into a problem or how Davis groups
168events, load `dt-obs-problems` — the merge logic and rules are documented in
169`dt-obs-problems/references/problem-merging.md`. This skill covers alert
170*configuration and flow* only.
171
172## Quick Start
173
174### Check What Alerts Fired in the Last 24 Hours
175
176```dql
177fetch dt.davis.events, from: -24h
178| filter event.status == "ACTIVE"
179| summarize alert_count = count(), by: {event.name, event.category, dt.smartscape_source.id}
180| sort alert_count desc
181| limit 20
182```
183
184### Check Alert Volume by Category
185
186```dql
187fetch dt.davis.events, from: -24h
188| summarize count = count(), by: {event.category, event.status}
189| sort count desc
190```
191
192### See All Active Problems (→ load dt-obs-problems for full query patterns)
193
194```dql
195fetch dt.davis.problems, from: -24h
196| filter not(dt.davis.is_duplicate) and event.status == "ACTIVE"
197| fields event.start, display_id, event.name, event.category
198| sort event.start desc
199| limit 20
200```
201
202## Best Practices
203
2041. **Match the model to the metric's behavior** — Use static for hard SLO
205 boundaries, adaptive for metrics without a natural fixed limit, seasonal for
206 anything that follows business hours or weekly patterns.
2072. **Scope detectors narrowly** — An entity selector that covers only relevant
208 entities reduces noise and makes problems more actionable.
2093. **Tune sensitivity before going to production** — Start with LOW sensitivity
210 and move to MEDIUM or HIGH only after observing false-positive rates.
2114. **Let Davis denoise before notifying** — Trigger workflow notifications on
212 *problems*, not individual alert events. A problem groups correlated alerts
213 so you notify once per incident, not once per metric.
2145. **Filter notifications by severity level** — Route `event.severity <= 2` problems to
215 on-call channels immediately; route `event.severity >= 3` problems to lower-
216 urgency channels. Either set severity in the detector config or assign in a pipeline rule or workflow.
2176. **Use `dt.alert_group` event property for routing** — Assign `dt.alert_group` to route alerts to the right team. Either set a static value in the detector config, use dynamic assignment through DQL query result mapping or assign in a pipeline rule.
2187. **Combine same-condition alerts into one detector and one workflow** — When
219 alerting on multiple entities with the same metric and threshold, merge them
220 into a single DQL-based detector using `by: { <dimension> }` and a combined
221 `filter:` clause. Assign the same `dt.alert_group` value to every condition
222 in that detector and point the workflow notification channel at that single
223 group. One detector + one workflow per logical alert group scales better than
224 N detectors + N notification rules, and adding a new entity is a one-line
225 filter change rather than a full detector/workflow addition.
226
227## Related Skills
228
229- **dt-obs-problems** — Querying, analyzing, and trending detected problems
230- **dt-obs-predictive-analytics** — Ad-hoc anomaly and novelty detection using
231 MCP analyzer tools (not persistent alert configs)
232- **dt-platform** — Operational health of anomaly detectors (execution events,
233 failure rates)
234- **dt-platform-costs** — Query costs generated by anomaly detector DQL
235- **dt-sdlc-quality-gates** — Site Reliability Guardian for deployment gate alerting
236- **dt-dql-essentials** — DQL syntax for writing detector queries and alert history
237 queries