lgtm-migrate User Guide

Everything you need to convert Datadog dashboards and monitors to Grafana.

What lgtm-migrate does

lgtm-migrate is a command-line tool that converts Datadog dashboard and monitor JSON exports into Grafana dashboards and Grafana-managed alert rules — metric queries become PromQL, log queries become LogQL. Anything that can't be automatically mapped ships as a clearly-labeled TODO placeholder rather than being silently dropped, so nothing goes missing without you knowing about it.

Installing

Grab the binary for your platform from the link in your confirmation email, or from the pricing section. Unzip it and put it somewhere on your PATH (e.g. /usr/local/bin).

Confirm it's installed:

lgtm-migrate --help

Free tier vs. a paid license

Without a license, lgtm-migrate runs on the free tier: 10 dashboard conversions and 10 alert rule conversions, total. A paid license removes the limit entirely; see Activating a license.

Signing up for the free tier (required before your first conversion)

You'll need to sign up before running convert or convert-alerts for the first time. Run:

lgtm-migrate signup

This opens the signup page — enter your email there and you'll get a confirmation link. Click it, click the confirm button on the page that opens, then activate the token it shows you — this only needs to happen once per machine:

lgtm-migrate --free-tier-token <token> license status

After that, every convert/convert-alerts run picks up the saved token automatically — you don't need to pass it again.

Converting your first dashboard

Export a dashboard from Datadog as JSON, then:

lgtm-migrate convert dashboard.json

This writes dashboard_grafana.json next to the input by default. Import that file into Grafana (Dashboards → New → Import), or use -o to control where it's written:

lgtm-migrate convert dashboard.json -o out.json
lgtm-migrate convert dashboard.json -o -   # print to stdout instead of a file
lgtm-migrate convert *.json                # convert a whole directory at once

Each conversion prints a one-line summary — panels found, targets found, how many converted, and how many became TODO placeholders — so you can see conversion quality at a glance before opening Grafana.

AI-assisted TODO fixing (optional)

If a query can't be automatically mapped, add --ai to have an LLM attempt a fix instead of leaving a TODO placeholder. It auto-detects a provider from your environment (Anthropic, OpenAI, or Gemini API keys), or you can be explicit:

lgtm-migrate convert dashboard.json --ai --ai-provider anthropic --ai-key sk-...

Converting alert rules / monitors

Export a monitor from Datadog as JSON, then:

lgtm-migrate convert-alerts monitor.json

The output is Grafana's alert-rule provisioning JSON. --mimir-uid/--loki-uid should match the datasource UIDs configured in your own Grafana instance (defaults: mimir and loki), since alert rules reference a fixed datasource rather than a template variable the way dashboards do:

lgtm-migrate convert-alerts monitor.json \
  --mimir-uid your-mimir-uid \
  --loki-uid  your-loki-uid \
  --folder-uid your-target-folder

Activating a paid license

Your purchase confirmation email contains a license key. Activate it once on each machine you use — it's saved for future runs, so you don't need to pass it again:

lgtm-migrate --license <key> license status

From then on, every convert/convert-alerts run is unlimited — no need to keep passing --license. Check what's active anytime with:

lgtm-migrate license status

This also shows your included email-support window, which starts at purchase and runs for 30 days (Starter), 90 days (Professional), or 12 months (Enterprise) — your license to convert unlimited assets itself never expires.

Validating against your own Grafana instance (optional)

If you've already pushed dashboards/alert rules into Grafana and want to check that every query actually runs (rather than just that the conversion succeeded), audit/audit-alerts run each query against your Grafana + Mimir/Loki and report errors or no-data:

lgtm-migrate audit        --grafana https://your-grafana --mimir https://your-mimir/prometheus
lgtm-migrate audit-alerts --grafana https://your-grafana --mimir https://your-mimir/prometheus --errors-only

Troubleshooting

A lot of my alert rules are TODO placeholders

This is expected for monitors using proprietary SaaS metrics with no Prometheus equivalent (ML-based Datadog functions like anomalies()/forecast() also can't be mapped). TODO rules are inert — they never fire — rather than being dropped or silently converted into something wrong. Try --ai on a re-run; it resolves a meaningful share of these automatically.

"free tier requires signing up first"

Expected on a fresh install — free-tier usage has to be tied to your account before your first conversion. See Signing up for the free tier above.

"free tier is limited to 10 ... files total" but I haven't converted that many recently

The cap is lifetime, not per-run. Check lgtm-migrate license status to see what's currently active, or purchase a license to remove the limit.

My license key doesn't activate

Double check you copied the whole key, including everything after the . — it's two base64url segments joined by a period, and a truncated copy/paste is the most common cause of an "invalid license key" error. If it still doesn't work, email us (below) with the email address you purchased under and we'll reissue it.

Getting support

Paid licenses include email support for the window shown by lgtm-migrate license status. Reach us at info@shiftmetrics.com — include your license email and, if it's a conversion issue, the specific dashboard/monitor JSON that isn't converting the way you expect.