๐ŸŽฎ Foundations โ€” Module 0

Welcome to the Arena

Tutorial

Welcome to the Arena

You're about to learn how to build custom applications that run inside Dynatrace. Not dashboards. Not extensions. Full React applications with their own UI, backend logic, and access to every byte of data in the platform.

And to prove the platform can handle anything โ€” we're going to start by running DOOM inside it.

What Are Dynatrace Apps?

Dynatrace Apps are self-contained web applications that run on AppEngine โ€” the platform's built-in app hosting layer. Each app is a React + TypeScript frontend paired with optional serverless backend functions, deployed as a single bundle.

They're fundamentally different from extensions:

  • Extensions collect data โ€” SNMP polls, API calls, metric ingestion. They feed the platform.
  • Apps consume data โ€” custom UIs, dashboards, workflows, tools. They use the platform.

An app can query any data in Grail using DQL, render it with Dynatrace's own design system (Strato), call external APIs through serverless functions, and navigate to other apps via intents. It's a full application framework that happens to live inside your observability platform.

The Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Dynatrace Platform                         โ”‚
โ”‚                                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  Your App    โ”‚    โ”‚  Grail Data Lake โ”‚   โ”‚
โ”‚  โ”‚  (React+TS)  โ”‚โ”€โ”€โ”€โ–ถโ”‚  metrics, logs,  โ”‚   โ”‚
โ”‚  โ”‚  in iframe   โ”‚โ—€โ”€โ”€โ”€โ”‚  entities, eventsโ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚         โ”‚                                   โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ App Functions โ”‚    โ”‚  Strato Design   โ”‚   โ”‚
โ”‚  โ”‚ (serverless)  โ”‚    โ”‚  System (UI kit) โ”‚   โ”‚
โ”‚  โ”‚ 256MB / 120s  โ”‚    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Key components:

  • Frontend โ€” React + TypeScript, rendered in a sandboxed iframe. Uses Strato components for consistent DT look and feel.
  • App Functions โ€” Serverless TypeScript functions in the api/ directory. Each .function.ts file becomes an endpoint. 256MB RAM, 120-second timeout.
  • Grail โ€” The unified data lake. All metrics, logs, traces, entities, and events live here. You query it with DQL.
  • Strato Design System โ€” Dynatrace's component library. DataTable, charts, buttons, layouts โ€” everything you need to build UIs that look native.

DQL โ€” The Query Language

DQL (Dynatrace Query Language) is how your app talks to Grail. Two key commands:

// Metric timeseries โ€” CPU usage per host over 2 hours
timeseries avg(dt.host.cpu.usage), by:{dt.entity.host}, from:-2h

// Entity fetch โ€” all hosts with their properties
fetch dt.entity.host
| fields entity.name, cpuCores, osType
| filter cpuCores > 4

In your React code, you use the useDql hook:

import { useDql } from "@dynatrace-sdk/react-hooks";

const { data, error, isLoading } = useDql({
  query: `timeseries avg(dt.host.cpu.usage), by:{dt.entity.host}, from:-2h`
});

That's it. One hook, one query, live data from the platform.

Why DOOM?

Running DOOM inside Dynatrace isn't just a party trick. It proves several things about the platform:

  • CSP is configurable โ€” Content Security Policy can be relaxed for legitimate use cases (asm.js emulators, WebGL shaders)
  • The iframe sandbox is powerful โ€” You can embed complex interactive content using srcdoc
  • Static assets work โ€” Files in ui/assets/ are served alongside your app
  • The platform doesn't limit you โ€” If you can build it in React, you can run it in Dynatrace

By Module 3, you'll have DOOM running. By Module 7, you'll have a real observability dashboard. Same skills, different payload.

What You'll Build

Across 15 modules in 4 tracks:

  • Track 1: Foundations โ€” Environment setup, first app, DOOM running inside DT
  • Track 2: Data & UI โ€” DQL queries, Strato components, charts, tables, building a real HUD
  • Track 3: Advanced โ€” App functions, intents, workflows, production deployment
  • Track 4: Boss Level โ€” Build a complete app from scratch, case studies of real apps

Prerequisites

  • TypeScript basics โ€” interfaces, types, async/await. You don't need to be an expert.
  • React basics โ€” components, hooks (useState, useEffect), JSX. Functional components only.
  • Node.js 22+ โ€” The dt-app CLI requires it. Check with node --version.
  • A Dynatrace environment โ€” SaaS or sprint. You need the apps URL (https://{id}.apps.dynatrace.com).

No prior Dynatrace experience needed. If you've done the Extensions course, great โ€” but it's not required.

What's Next

In Module 1, we set up the development environment โ€” Node.js, the dt-app CLI, and your first project scaffold. Think of it as picking up your BFG before entering the arena.