Skip to main content

Overview

Grafana is a popular open-source platform for monitoring and observability. Easyalert supports both Grafana Unified Alerting (8+) and Legacy Alerting (7.x) formats.
Grafana 8+ uses Unified Alerting by default. Legacy alerting is deprecated but still supported for older installations.

Requirements

  • Grafana 8.0+ (for Unified Alerting) or Grafana 7.x (Legacy)
  • Easyalert account and active tenant
  • Admin or Editor permissions in Grafana

Setup Instructions

1

Create Integration in Easyalert

  1. Go to Integrations page from left menu
  2. Click Add Integration button
  3. Select Grafana as Source Type
  4. Enter a name (e.g., Grafana 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 Contact Point (Unified Alerting)

  1. Go to Alerting → Contact points
  2. Click Add contact point button
  3. Fill in the form:
FieldValue
NameEasyalert
IntegrationSelect Webhook
URLYour copied Webhook URL
HTTP MethodPOST
  1. Click Test button to verify connection
  2. Click Save contact point
3

Configure Notification Policy

  1. Go to Alerting → Notification policies
  2. Edit Default policy or add New nested policy:
FieldValue
Contact pointSelect Easyalert
Group byalertname, severity
Group wait30s
Group interval5m
Repeat interval4h
4

Test the Integration

Use the Test button in the contact point configuration to send a test alert

Legacy Alerting Configuration (Grafana 7.x)

For Grafana 7.x and earlier with legacy alerting:
1

Create Notification Channel

  1. Go to Alerting → Notification channels 2. Click Add channel 3. Select webhook as the type
2

Configure Webhook

  • Name: Easyalert - URL: Your Easyalert webhook URL - HTTP Method: POST - Send on all alerts: Yes - Include image: Optional

Creating Alert Rules

Labels you define in alert rules become tags in Easyalert.

Add Labels (IMPORTANT)

In Section 3: Add annotations and labels, add labels for routing:
LabelValueDescription
severitywarning or criticalAlert severity
customerAcmeCorpCustomer name (for MSPs)
teambackendResponsible team
environmentproductionEnvironment

Add Annotations

AnnotationExample Value
summaryHigh CPU usage on {{ $labels.instance }}
descriptionCPU usage is {{ $values.A }}%

Field Mapping

Unified Alerting

Grafana FieldEasyalert Field
labels.alertnameTitle
annotations.summaryTitle (fallback)
annotations.descriptionDescription
statusStatus (firing → problem, resolved → ok)
labels.severitySeverity
labels.instanceHost
labels.jobService
fingerprintEvent ID

Legacy Alerting

Grafana FieldEasyalert Field
ruleNameTitle
messageDescription
stateStatus
ruleUrlURL
evalMatchesMetric details

Severity Mapping

Grafana SeverityEasyalert Severity
criticalCritical
errorHigh
warningWarning
infoInfo

Legacy State Mapping

Grafana StateEasyalert Status
alertingProblem
okOK
pendingProblem (warning)
no_dataProblem (warning)

Label → Tag Conversion

All labels from Grafana are automatically available as tags in Easyalert.

Example Conversion

Labels in Alert Rule:
alertname = HighCPUUsage
severity = critical
customer = acme
team = backend
environment = production
Available Tags in Easyalert:
tags.alertname = "HighCPUUsage"
tags.severity = "critical"
tags.customer = "acme"
tags.team = "backend"
tags.environment = "production"

Routing Examples

Escalation Routing:
tags.customer equals "acme" → Acme Corp Policy
tags.team equals "database" → DBA Team Policy
tags.environment equals "production" → Critical Policy
Notification Rules:
tags.severity equals "critical" → call + sms + email
tags.severity equals "warning" → sms + email

Fingerprint and Duplicate Detection

Grafana generates a unique fingerprint for each alert. Easyalert uses this fingerprint to:
  1. Not create new incident if same alert comes again
  2. Auto-close incident when resolved status arrives

Example Alert Rules

CPU Alert

# Query (Prometheus)
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# Condition
IS ABOVE 80

# Labels
severity: warning
team: infra
customer: acme

# Annotations
summary: High CPU usage on {{ $labels.instance }}

Memory Alert

# Query
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

# Condition
IS ABOVE 85

# Labels
severity: critical
team: infra

Grafana-Specific Features

Grafana includes helpful links in alerts:
FieldDescription
dashboardURLLink to the dashboard
panelURLDirect link to the panel
silenceURLQuick link to silence the alert
generatorURLLink to the alert rule
These are captured and displayed in the incident details.

Test

curl -X POST "YOUR_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "receiver": "Easyalert",
    "status": "firing",
    "orgId": 1,
    "alerts": [{
      "status": "firing",
      "labels": {
        "alertname": "TestAlert",
        "severity": "warning",
        "customer": "test",
        "team": "backend"
      },
      "annotations": {
        "summary": "Test Alert",
        "description": "This is a test"
      },
      "startsAt": "2024-12-03T10:00:00Z",
      "fingerprint": "test-123"
    }],
    "externalURL": "http://grafana:3000"
  }'

Troubleshooting

  1. Test the contact point from Grafana UI 2. Check Grafana server logs for webhook errors 3. Verify network connectivity to Easyalert 4. Ensure notification policy routes to correct contact point
  1. Check Labels section in alert rule 2. Verify labels are properly defined
  2. Review webhook samples in Easyalert
  1. Verify “Disable Resolved Message” is NOT checked in contact point 2. Check notification policy includes resolved alerts 3. Verify alert rule has proper conditions for resolution
  1. Check which alerting system is enabled in Grafana 2. Easyalert auto-detects format, but verify payload structure 3. Review webhook samples for actual format being sent

Best Practices

Migrate to Unified Alerting for better features and consistency with Prometheus/Alertmanager format.
Add runbook_url annotation to help responders quickly find remediation steps.
Use Grafana folders to organize alerts and include folder name in labels.
Set Grafana’s external URL properly so dashboard links work correctly.
Add labels like customer, team, environment for escalation routing in Easyalert.