1. Écrire des requêtes efficaces #
Le coût dépend des données lues.
Ordre #
Bonne Pratique : Une requête DQL est facturée sur les données parcourues : la fenêtre de temps et le premier filter comptent plus que tout le reste.2. Jointures et enrichissement #
Croiser les données.
Exemples #
// lookup : enrichir des logs avec un référentiel
fetch logs, from: -1h
| filter loglevel == "ERROR"
| lookup [ fetch bizevents | filter event.type == "customer.tier" | fields customer.id, tier ],
sourceField: customer.id, lookupField: customer.id
| summarize errors = count(), by: { lookup.tier }
// join : relier logs et spans par trace_id
fetch spans, from: -30m
| filter http.response.status_code >= 500
| join [ fetch logs, from: -30m | filter isNotNull(trace_id) ], on: { left[trace_id] == right[trace_id] }, fields: { content }3. Séries temporelles #
Des courbes à partir de tout.
Timeseries #
// Métrique existante
timeseries avg(dt.host.cpu.usage), by: { host.name }, from: -24h
// Série construite à partir de logs
fetch logs, from: -24h
| filter contains(content, "payment failed")
| makeTimeseries failures = count(), interval: 5m, by: { service.name }À savoir : La topologie (Smartscape) s'interroge aussi en DQL sur la nouvelle plateforme ; les commandes disponibles évoluent : consultez la référence DQL de votre environnement. Dynatrace évolue très vite (nouvelle plateforme, Grail, applications) : vérifiez les noms d'écrans et les versions d'API dans la documentation de votre environnement.
