Menu
Grafana Cloud RSS

Migrate to Grafana IRM

This guide explains how to migrate your existing on-call configurations from PagerDuty or Splunk OnCall (VictorOps) to Grafana IRM.

Overview

The Migrator Tool automates the migration of resources such as:

  • User notification rules
  • On-call schedules
  • Escalation policies
  • Service integrations
  • Event rules (experimental, for global event rulesets)

The migration process consists of three key steps:

  1. Set up the migration environment
  2. Generate and review a migration plan
  3. Execute the migration process

Before you begin

Before starting, ensure that you:

1. Set up the migration environment

First, build the OnCall Migrator Tool Docker image:

bash
docker build -t oncall-migrator .

2. Generate and review a migration plan

Before migrating, generate a migration plan to preview what will be transferred.

Run a migration plan from PagerDuty

bash
docker run --rm \
-e MIGRATING_FROM="pagerduty" \
-e MODE="plan" \
-e ONCALL_API_URL="<ONCALL_API_URL>" \
-e ONCALL_API_TOKEN="<ONCALL_API_TOKEN>" \
-e PAGERDUTY_API_TOKEN="<PAGERDUTY_API_TOKEN>" \
oncall-migrator

Run a migration plan from Splunk OnCall

bash
docker run --rm \
-e MIGRATING_FROM="splunk" \
-e MODE="plan" \
-e ONCALL_API_URL="<ONCALL_API_URL>" \
-e ONCALL_API_TOKEN="<ONCALL_API_TOKEN>" \
-e SPLUNK_API_ID="<SPLUNK_API_ID>" \
-e SPLUNK_API_KEY="<SPLUNK_API_KEY>" \
oncall-migrator

The tool will generate a migration report summarizing what will be migrated, modified, or skipped.

Example migration report

  • John Doe (john.doe@example.com) – existing notification rules will be preserved
  • Ben Thompson (ben@example.com) – no Grafana IRM user found with this email
  • Support schedule – existing schedule will be deleted and replaced
  • DevOps escalation policy – references unmatched users

Important

If the migration plan reports missing users, ensure they exist in Grafana IRM before proceeding.

3. Execute the migration

Once you are satisfied with the migration plan, run the tool in migrate mode.

Migrate from PagerDuty

bash
docker run --rm \
-e MIGRATING_FROM="pagerduty" \
-e MODE="migrate" \
-e ONCALL_API_URL="<ONCALL_API_URL>" \
-e ONCALL_API_TOKEN="<ONCALL_API_TOKEN>" \
-e PAGERDUTY_API_TOKEN="<PAGERDUTY_API_TOKEN>" \
oncall-migrator

Migrate from Splunk OnCall

bash
docker run --rm \
-e MIGRATING_FROM="splunk" \
-e MODE="migrate" \
-e ONCALL_API_URL="<ONCALL_API_URL>" \
-e ONCALL_API_TOKEN="<ONCALL_API_TOKEN>" \
-e SPLUNK_API_ID="<SPLUNK_API_ID>" \
-e SPLUNK_API_KEY="<SPLUNK_API_KEY>" \
oncall-migrator

Note

The migration tool is idempotent, meaning you can safely run it multiple times. It will check if resources already exist in Grafana IRM before creating them.

Advanced options

Migrate unsupported integration types as webhooks

If some integration types are not supported, you can migrate them to Grafana IRM webhooks by setting:

bash
-e UNSUPPORTED_INTEGRATION_TO_WEBHOOKS="true"

Migrate without importing users

If you want to test Grafana IRM without migrating users:

bash
-e MIGRATE_USERS="false"

Migrate only specific teams, users, or schedules

You can filter the migration by using regex patterns or specific team names:

bash
-e PAGERDUTY_FILTER_TEAM="Engineering"
-e PAGERDUTY_FILTER_USERS="user123,user456"
-e PAGERDUTY_FILTER_SCHEDULE_REGEX=".*Primary.*"

Post-migration steps

After migration, ensure that:

  1. Users configure their notification preferences in Grafana IRM
  2. Integrations are reconnected by clicking “How to connect” on the integration page
  3. Schedules migrated via iCal are manually adjusted if needed