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:
- Set up the migration environment
- Generate and review a migration plan
- Execute the migration process
Before you begin
Before starting, ensure that you:
- Have Docker installed and running
- Obtain a Grafana IRM API token and API URL from the Settings page of your Grafana IRM instance
- Obtain the necessary API credentials from PagerDuty or Splunk OnCall:
1. Set up the migration environment
First, build the OnCall Migrator Tool Docker image:
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
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
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
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
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:
-e UNSUPPORTED_INTEGRATION_TO_WEBHOOKS="true"
Migrate without importing users
If you want to test Grafana IRM without migrating users:
-e MIGRATE_USERS="false"
Migrate only specific teams, users, or schedules
You can filter the migration by using regex patterns or specific team names:
-e PAGERDUTY_FILTER_TEAM="Engineering"
-e PAGERDUTY_FILTER_USERS="user123,user456"
-e PAGERDUTY_FILTER_SCHEDULE_REGEX=".*Primary.*"
Post-migration steps
After migration, ensure that:
- Users configure their notification preferences in Grafana IRM
- Integrations are reconnected by clicking “How to connect” on the integration page
- Schedules migrated via iCal are manually adjusted if needed