Skip to content

PagerDuty Deep Dive

This page provides an in-depth look at how Qualytics manages PagerDuty integration behind the scenes — from event construction and routing to severity mapping and deduplication.

Architecture Overview

Qualytics communicates with PagerDuty through the Events API v2, a REST-based API that PagerDuty provides for programmatic incident management. There are two event endpoints involved:

Endpoint Purpose Creates Incidents?
/v2/enqueue Send trigger, acknowledge, or resolve events Yes
/v2/change/enqueue Send change events (used for validation) No

When a Flow action sends a PagerDuty notification, Qualytics constructs a trigger event and posts it to /v2/enqueue. When validating a Routing Key during integration setup, Qualytics sends a change event to /v2/change/enqueue, which safely validates the key without creating an incident.

Event Structure

Every PagerDuty event sent by Qualytics follows this structure:

{
  "routing_key": "your-routing-key",
  "event_action": "trigger",
  "dedup_key": "unique-event-identifier",
  "client": "Qualytics",
  "client_url": "https://your-instance.qualytics.io",
  "payload": {
    "summary": "Anomaly detected in orders (Production DWH): unexpected null values",
    "timestamp": "2026-03-12T10:30:00Z",
    "severity": "error",
    "source": "https://your-instance.qualytics.io",
    "component": "orders",
    "class": "anomaly",
    "custom_details": {
      "datastore": "Production DWH",
      "container": "orders",
      "check_type": "is_not_null"
    }
  },
  "links": [
    {
      "href": "https://your-instance.qualytics.io/anomalies/12345",
      "text": "Event Details"
    }
  ]
}

Event Fields Explained

Field Description
routing_key The Integration Key that routes the event to a specific PagerDuty service. Can be overridden per Flow action.
event_action Always trigger for Qualytics events. This creates a new incident or groups with an existing one if the dedup_key matches.
dedup_key A unique identifier for the event. PagerDuty uses this to deduplicate events — if an open incident already exists with the same key, a new incident is not created.
client Always Qualytics. Displayed in the PagerDuty incident timeline.
client_url Your Qualytics instance URL. Provides a clickable link in PagerDuty back to the platform.
payload.summary The rendered notification message. Composed using the message template configured in the Flow action.
payload.severity The severity level: info, warning, error, or critical. Controls PagerDuty's urgency and notification behavior.
payload.source The origin of the event — set to your Qualytics instance URL.
payload.component The affected component — typically the container name (e.g., table or file name).
payload.class The event class — categorizes the type of event (e.g., anomaly, operation, partition_scan).
payload.custom_details Additional context attached to the incident. Includes system-generated details plus any custom key-value pairs configured in the Flow action.
links A direct link back to the relevant resource in the Qualytics UI.

Severity Mapping

PagerDuty severity levels control how incidents are prioritized and which notification rules apply. Qualytics allows you to set the severity level per Flow action:

Severity PagerDuty Behavior Recommended Use
Info Low urgency — may not page on-call depending on service configuration Informational events, routine completions, status updates
Warning Moderate urgency — follows service notification rules Potential issues that need attention but are not immediately critical
Error High urgency — triggers notifications based on escalation policy Significant data quality issues requiring prompt resolution
Critical Highest urgency — immediate notification via all configured channels Severe incidents demanding immediate response (e.g., critical pipeline failures)

Tip

PagerDuty's behavior for each severity level depends on your service's urgency settings and notification rules. Configure your PagerDuty service appropriately to match the alerting behavior you expect from each severity level.

Routing and Routing Key Override

By default, all PagerDuty events are routed using the Routing Key configured in the integration settings. This key maps to a specific PagerDuty service.

However, you may want different types of events to go to different PagerDuty services. For example:

  • Critical anomaly alerts → Production Incidents service
  • Operational status updates → Data Platform Notifications service

To support this, each PagerDuty notification action in a Flow can include a Routing Key Override. When set, the override key is used instead of the default integration key for that specific action.

flowchart LR
    A["Default Routing Key\n(Integration)"] --> S1["PagerDuty Service A\n(default)"]
    F1["Flow Action 1\n(no override)"] --> S1
    F2["Flow Action 2\n(override key)"] --> S2["PagerDuty Service B\n(specific)"]

Event Deduplication

PagerDuty uses the dedup_key field to prevent duplicate incidents. Qualytics assigns a unique event identifier to each notification, which ensures:

  • The same event does not create multiple incidents if retried
  • Related events can be grouped under the same incident if they share a dedup key

The dedup key is generated from the event's unique internal identifier (such as the operation ID or anomaly ID), ensuring consistency across retries.

Message Templates

PagerDuty event summaries are rendered from configurable message templates. These templates support variable interpolation using the {{ variable_name }} syntax. Available variables include:

Variable Description
{{ flow_name }} The name of the Flow that triggered the notification
{{ operation_type }} The type of operation (e.g., Catalog, Profile, Scan)
{{ operation_result }} The result of the operation (e.g., Success, Failure)
{{ datastore_name }} The name of the affected datastore
{{ container_name }} The name of the affected container
{{ anomaly_message }} The anomaly description message
{{ anomaly_status }} The anomaly status (e.g., Active, Acknowledged)

Info

PagerDuty summaries are plain text (unlike Slack Block Kit or Microsoft Teams Adaptive Cards). The message template is rendered as a single-line summary that appears as the incident title in PagerDuty.

Custom Details

Custom Details allow you to attach additional key-value pairs to PagerDuty incidents. These appear in the incident's Custom Details section and provide extra context for responders.

Qualytics automatically populates some custom details based on the event type:

Event Type Auto-populated Details
Anomaly Datastore, container, check type
Operation Datastore, operation type, result
Partition Scan Datastore, container, partition info

You can add additional custom details through the Flow action configuration. These are merged with the auto-populated details, giving responders a complete picture of the event context.

Connection Validation

When you create or update a PagerDuty integration, Qualytics validates the Routing Key by sending a Change Event to PagerDuty's /v2/change/enqueue endpoint.

Change Events are specifically designed for informational purposes and do not create incidents. This makes them ideal for connection validation — Qualytics can confirm that the Routing Key is valid and the PagerDuty service is reachable without triggering any alerts.

Validation Result HTTP Status Meaning
Success 202 Routing Key is valid, PagerDuty service is reachable
Invalid Key 400/401 The Routing Key is incorrect or revoked
Network Error 502 Cannot reach PagerDuty API

Comparison with Other Alerting Integrations

Feature PagerDuty Slack Microsoft Teams
Authentication Routing Key OAuth tokens Azure App + OAuth
Message format Plain text summary Block Kit (rich) Adaptive Cards (rich)
Routing Routing Keys → Services Channels Teams → Channels
Channel selection No (key-based) Yes (channel picker) Yes (channel picker)
Severity support Native (info/warn/error/critical) Via message content Via message content
Incident management Native (trigger/ack/resolve) N/A N/A
Deduplication Native (dedup_key) N/A N/A
Per-action override Routing Key override Channel override Channel override