Skip to main content

Overview

Easyalert automatically detects and processes webhooks from New Relic Workflows.
New Relic Workflows is the recommended method for new integrations. Classic Alerts is deprecated but still supported.

Requirements

  • New Relic account (One platform)
  • Easyalert account and active tenant
  • Access to Alerts & AI → Workflows in New Relic

Setup Instructions

1

Create Integration in Easyalert

  1. Go to Integrations page from left menu
  2. Click Add Integration button
  3. Select New Relic as Source Type
  4. Enter a name (e.g., New Relic Production)
  5. Click Create to save
  6. Copy the generated Webhook URL
Example: https://api.easyalert.io/api/v1/webhooks/ingest/wh_abc123...
2

Create Workflow in New Relic

Go to Alerts & AI → Workflows → Add a workflow
3

Create Webhook Destination

  1. In Notify section, select Webhook
  2. Click Create new destination
  3. Paste Easyalert Webhook URL as Endpoint URL
4

Configure Payload Template

Use this recommended payload:
{
  "id": {{ json issueId }},
  "issueUrl": {{ json issuePageUrl }},
  "title": {{ json annotations.title.[0] }},
  "priority": {{ json priority }},
  "impactedEntities": {{ json entitiesData.names }},
  "totalIncidents": {{ json totalIncidents }},
  "state": {{ json state }},
  "trigger": {{ json triggerEvent }},
  "sources": {{ json accumulations.source }},
  "alertPolicyNames": {{ json accumulations.policyName }},
  "alertConditionNames": {{ json accumulations.conditionName }},
  "workflowName": {{ json workflowName }},
  "description": {{ json annotations.description.[0] }},
  "customer": "YOUR_CUSTOMER_NAME",
  "team": "YOUR_TEAM_NAME",
  "environment": "production"
}
NOTE: Handlebars syntax uses {{ }}. The {{ json ... }} helper produces JSON-safe output.
5

Test the Integration

Use the Send test notification feature in New Relic

Handlebars Variables

New Relic Workflows use Handlebars syntax:
VariableDescription
{{ json issueId }}Issue ID
{{ json issuePageUrl }}New Relic UI link
{{ json annotations.title.[0] }}Issue title
{{ json annotations.description.[0] }}Issue description
{{ json state }}ACTIVATED, CLOSED, CREATED, ACKNOWLEDGED
{{ json priority }}CRITICAL, HIGH, MEDIUM, LOW
{{ json triggerEvent }}STATE_CHANGE, INCIDENT_ADDED, etc.
{{ json entitiesData.names }}Impacted entities
{{ json totalIncidents }}Number of incidents
{{ json accumulations.policyName }}Policy names
{{ json accumulations.conditionName }}Condition names
{{ json accumulations.source }}Alert sources
{{ json workflowName }}Workflow name

Field Mapping

New Relic FieldEasyalert Field
issueId / idEvent ID
annotations.title[0] / titleTitle
annotations.description[0] / descriptionDescription
prioritySeverity
stateStatus
entitiesData.names / impactedEntitiesHost/Service
issuePageUrl / issueUrlURL

State and Severity Mapping

Status Mapping

New Relic StateEasyalert Status
ACTIVATEDProblem
CREATEDProblem
ACKNOWLEDGEDProblem (acknowledged)
CLOSEDOK
DEACTIVATEDOK

Severity Mapping

New Relic PriorityEasyalert Severity
CRITICALCritical
HIGHCritical
MEDIUMWarning
LOWInfo

Trigger Events

Trigger EventDescription
STATE_CHANGEIssue state changed
INCIDENT_ADDEDNew incident added to issue
INCIDENT_CLOSEDIncident closed
PRIORITY_CHANGEDPriority updated
ACKNOWLEDGEDIssue acknowledged

Custom Field → Tag Conversion

All custom fields you add to the template are automatically captured as tags.

Example

Template:
{
  "id": {{ json issueId }},
  "state": {{ json state }},
  "customer": "AcmeCorp",
  "datacenter": "EU-West"
}
In Easyalert:
tags.policy = "Production Policy"
tags.condition = "High CPU"
tags.customer = "AcmeCorp"
tags.datacenter = "EU-West"

Routing Examples

Escalation Routing:
tags.customer equals "AcmeCorp" → Acme Corp Policy
tags.environment equals "production" → Production Policy
tags.alertPolicyNames contains "Critical" → Critical Policy
Notification Rules:
tags.priority equals "CRITICAL" → call + sms + email
tags.sources contains "Infrastructure" → Infra Team channel

Workflow Filter Examples

Critical Issues Only

priority = 'CRITICAL'

Specific Policies

accumulations.policyName LIKE '%Production%'

Specific Entity Types

entitiesData.types = 'HOST'

Test

curl -X POST "YOUR_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "NR1-123",
    "title": "High CPU Usage",
    "state": "ACTIVATED",
    "trigger": "STATE_CHANGE",
    "priority": "CRITICAL",
    "impactedEntities": ["web-server-01"],
    "alertPolicyNames": ["Production Policy"],
    "alertConditionNames": ["High CPU"],
    "createdAt": 1733234400000,
    "customer": "TestCustomer"
  }'

Recovery Test

curl -X POST "YOUR_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "NR1-123",
    "state": "CLOSED",
    "trigger": "STATE_CHANGE"
  }'

Classic Alerts Setup (Legacy)

For legacy New Relic alerts:
1

Create Notification Channel

  1. Go to Alerts → Notification channels 2. Click New notification channel 3. Select Webhook
2

Configure Webhook

  • Channel name: Easyalert - Base URL: Your Easyalert webhook URL
3

Add to Policies

  1. Go to your alert policy 2. Add the webhook channel to notification settings

Classic Alerts Field Mapping

New Relic FieldEasyalert Field
incident_idEvent ID
condition_nameTitle
detailsDescription
severitySeverity
current_stateStatus
targets[0].nameHost
incident_urlURL

Troubleshooting

  1. Test destination from New Relic UI
  2. Verify workflow filter matches your issues
  3. Check workflow is enabled
  4. Verify destination URL is correct
  1. Verify field is added to webhook payload template
  2. Check field name spelling
  3. View webhook samples in Easyalert
  1. Use {{ json ... }} helper for proper formatting
  2. Verify Handlebars template syntax
  3. Check field names match New Relic schema
  4. Test with simplified payload first
  1. Verify CLOSED state triggers workflow
  2. Check issueId matches between states
  3. Ensure workflow sends on all state changes
  1. Check priority field in payload
  2. Configure custom severity mapping
  3. Verify priority is set on alert conditions

Best Practices

Migrate to Workflows for better control and flexibility over Classic Alerts.
Add entitiesData.names to identify affected infrastructure or services.
Configure priority on your alert conditions for accurate severity mapping.
Include customer, team, environment in payload for escalation routing.
Add runbook links in alert conditions for quick remediation access.
Leverage accumulations.tag.* for routing and filtering in Easyalert.