dt-alerting
End-to-end Dynatrace alerting lifecycle — anomaly detector setup and model selection (static threshold, adaptive baseline,…
3rd-party test and monitor result ingestion into Dynatrace Grail via the platform events ingest API (platform/ingest/custom/events/). Use when sending external synthetic test outcomes, CI monitor data, or third-party check results to Dynatrace. Covers token scope, full event
$ npx -y skills add Dynatrace/dynatrace-for-ai --skill dt-obs-ext-monitors --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/dt-obs-ext-monitorsContext preview
The summary Claude sees to decide when to auto-load this skill.
3rd-party test and monitor result ingestion into Dynatrace Grail via the platform events ingest API (platform/ingest/custom/events/). Use when sending external synthetic test outcomes, CI monitor data, or third-party check results to Dynatrace. Covers token scope, full event
name: dt-obs-ext-monitors description: >- 3rd-party test and monitor result ingestion into Dynatrace Grail via the platform events ingest API (platform/ingest/custom/events/). Use when sending external synthetic test outcomes, CI monitor data, or third-party check results to Dynatrace. Covers token scope, full event schema for external_test_run and external_test_step (including dt.security_context, ci.*, trace correlation, and pipeline-added fields), curl and Java DTO examples, and DQL verification. Triggers: "ingest test results", "send monitor results", "third party monitor", "external test ingestion", "send synthetic results to Grail", "external test run event schema". Not for Dynatrace-native Synthetic Monitoring browser/HTTP checks, or RUM (use dt-obs-frontends). For migrating from the deprecated POST /api/v1/synthetic/ext/tests API, load dt-upgrade instead. license: Apache-2.0
Send 3rd-party test and monitor results to Dynatrace Grail using the events ingest API. This is the canonical replacement for the deprecated `POST /api/v1/synthetic/ext/tests` endpoint.
Events posted to `/platform/ingest/custom/events/{endpoint}` land in Grail and are processed by OpenPipeline, which:
attach to a named entity ("External test X went down") rather than floating without topology context
Two event types form a test result:
| Type | Purpose | |------|---------| | `external_test_run` | Overall pass/fail result for one test execution | | `external_test_step` | One step within that run (optional; enables step-level metrics) |
Two token types are accepted:
| Token type | Scope | |------------|-------| | Classic Api-Token | `openpipeline.events.custom` | | Platform Token / OAuth | `openpipeline:events.custom:ingest` |
Common wrong guess that does NOT work: `events.ingest`.
> **Prerequisite:** The ingest endpoint must be created in OpenPipeline before sending events. > The `external.tests` endpoint is provisioned automatically by the > default Dynatrace 3rd-party monitors Monaco bundle. > See `references/event-ingestion.md` for setup details and custom endpoint creation.
Send one minimal test result (replace `external.tests` with your configured endpoint name):
curl -X POST "https://{env-id}.live.dynatrace.com/platform/ingest/custom/events/external.tests" \
-H "Authorization: Api-Token {token}" \
-H "Content-Type: application/json" \
-d '[{
"event.kind": "EXTERNAL_TEST_EVENT",
"event.type": "external_test_run",
"test.id": "my-api-health-check",
"test.run.id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"test.name": "My API Health Check",
"test.type": "api",
"test.run.status": "passed",
"test.run.availability": 1,
"test.run.duration_ms": 245,
"test.run.location": "us-east-1",
"dt.security_context": "team-checkout",
"timestamp": "2024-01-15T10:30:00Z"
}]'**Expected response:** HTTP 200 (empty body).
> Full event schema, step events, extended examples with error fields and CI metadata, > Java DTO shapes, and DQL queries: `references/event-ingestion.md`
After sending, confirm the event appears:
fetch events, from:now()-1h | filter event.type == "external_test_run" | fields timestamp, test.id, test.name, test.run.status, test.run.duration_ms, test.run.location | sort timestamp desc | limit 20
Routing to the correct pipeline is driven by `event.type`, not `event.kind`.
the pipeline after ingestion and will be overwritten if included.
per-team access control and cost attribution in multi-team tenants.
Send the same `test.id` from multiple locations — each with a different `test.run.location` value — to build a multi-location test. OpenPipeline creates one `EXT_TEST` node per `test.id` and one availability metric timeseries per `(test.id, location)` pair.
This enables two alerting tiers out of the box:
| Alert type | Fires when | |------------|-----------| | Local outage | A single location's availability drops (per-location timeseries) | | Global outage | Average across all locations drops below threshold (e.g. majority failing) |
Threshold maths for a 3-location test: 1 location failing → avg 0.67 (no alert at 0.5 threshold); 2 failing → avg 0.33 (fires); all 3 failing → avg ≈ 0 (fires immediately).
Keep `test.id` stable across all locations — changing it creates a new Smartscape node and breaks metric history.
draw EXT_TEST → FRONTEND dependency edges in Smartscape
Everything AI agents need to work with Dynatrace, starting with skills. Skills are portable knowledge packages following the Agent Skills open format. They give AI coding agents the domain-specific context to query, analyze, and interpret Dynatrace data.
End-to-end Dynatrace alerting lifecycle — anomaly detector setup and model selection (static threshold, adaptive baseline,…
Work with Dynatrace dashboards - create, modify, query, and analyze dashboard JSON including tiles, layouts, DQL queries,…
Work with Dynatrace notebooks - create, modify, query, and analyze notebook JSON including sections, DQL queries, and…
Core DQL syntax, pitfalls, query patterns, and query optimization. Load to write, build, fix, or OPTIMIZE a DQL query — prevents…
Dynatrace server-side JS runtime — function contract, runtime limits, Web APIs, Node.js modules, fetch with credential vault, and…
Migrate Dynatrace classic and Gen2 entity-based DQL to Smartscape equivalents. Covers three scenarios. (1) mass data queries…