beginner By Mathias Paulenko

Monitoring and Alerting Policy Template

A policy template that defines how alerts are configured, routed, escalated, and reviewed across services and infrastructure.

Note: This guide follows English-language naming conventions and terminology standards common in international development teams. Examples use English identifiers and comments to maximize compatibility across codebases and tooling.

Overview

A Monitoring and Alerting Policy defines how an organization detects problems, notifies the right people, and escalates when issues are not resolved quickly. Without a clear policy, teams suffer from alert fatigue, missed incidents, or inconsistent response times. This template provides a structured framework for alert thresholds, severity levels, routing rules, escalation paths, and regular review.

When to Use

  • For alternatives, see Complete Guide to Observability with the Grafana Stack.

  • Setting up a new observability platform or monitoring stack.

  • Onboarding a new service or team into the alerting system.

  • Reviewing alert quality after a period of noise or missed incidents.

  • Defining on-call responsibilities and escalation paths.

  • Preparing for an audit of operational maturity or incident response.

Prerequisites

  • A monitoring and observability platform such as Prometheus, Datadog, Grafana, New Relic, or PagerDuty.
  • A list of critical services and infrastructure components.
  • Defined on-call rotations and escalation contacts.
  • A communication channel for alerts, such as Slack, Microsoft Teams, or email.
  • An incident response process that alerts will trigger.

Solution

Policy Template

1. Alert Severity Levels

SeverityResponse TimeExampleNotification Channel
P1 - CriticalImmediate (5 min)Service down, data loss, revenue impactPage on-call + executive notification
P2 - High15 minutesDegraded performance, failed backupsPage on-call + Slack alert
P3 - Medium1 hourHigh error rate, resource pressureSlack or email to owning team
P4 - LowNext business dayCapacity warning, non-urgent driftEmail or dashboard notice
P5 - InformationalNoneUsage metrics, trend dataDashboard only

2. Alert Categories

CategoryPurposeExamples
AvailabilityDetect service unreachabilityHTTP 5xx, connection timeout, health check failure
PerformanceDetect latency and throughput issuesp99 latency > 500ms, queue depth high
CapacityDetect resource exhaustionCPU > 85%, disk > 80%, memory pressure
Error rateDetect unusual failure ratesError rate > 1% for 5 minutes
SecurityDetect suspicious activityFailed logins, rate limit hits, blocked traffic
BusinessDetect revenue or workflow impactFailed payments, order drop, signup failure
Data healthDetect pipeline or data quality issuesStale data, missing partitions, sync lag

3. Alert Routing Matrix

TeamPrimary HoursOn-Call HoursChannelsEscalation Path
Platform team08:00 - 18:00 UTC24/7PagerDuty, #platform-alertsManager, then VP Engineering
Application team08:00 - 18:00 UTC24/7PagerDuty, #app-alertsTeam lead, then Engineering manager
Security team24/724/7PagerDuty, #security-alertsSecurity lead, then CISO
Database team08:00 - 18:00 UTC24/7PagerDuty, #db-alertsDBA lead, then Platform manager
Business operationsBusiness hoursNoneEmail, SlackOperations manager

4. Alert Threshold Guidelines

SignalWarning ThresholdCritical ThresholdEvaluation Window
HTTP error rate> 1% for 5 min> 5% for 2 minRolling 5 min
Response latency p99> 500ms for 10 min> 1s for 5 minRolling 10 min
CPU utilization> 70% for 10 min> 90% for 5 minRolling 5 min
Disk utilization> 75% for 1 hour> 90% for 15 minRolling 15 min
Memory utilization> 80% for 10 min> 95% for 5 minRolling 5 min
Queue depth> 1000 for 10 min> 5000 for 5 minRolling 5 min
Failed backupN/AAny failed backupPer job run
SSL certificate expiry< 30 days< 7 daysDaily check

5. Escalation Rules

SeverityInitial AlertNo AcknowledgmentStill UnresolvedFinal Escalation
P1Page on-call immediately5 min15 minExecutive notification + war room
P2Page on-call15 min30 minManager page
P3Slack to owning team1 hour4 hoursManager notification
P4Email or dashboardNext business dayN/AWeekly review

6. Alert Review and Maintenance

ActivityFrequencyOwnerOutput
Alert quality reviewWeeklyOn-call engineerTop noisy alerts, tuning actions
Alert runbook reviewMonthlySRE teamUpdated runbooks for each alert
Threshold calibrationQuarterlyObservability teamThreshold adjustments with evidence
On-call retroAfter major incidentIncident commanderAlert improvements, follow-up tasks
Policy reviewAnnuallyEngineering leadershipUpdated policy document

Explanation

This policy turns raw monitoring signals into useful alerts. By assigning severity, routing, and escalation rules, the organization ensures that critical problems get fast attention while low-priority warnings do not disrupt on-call engineers. The review and maintenance section prevents alert fatigue by continuously tuning thresholds and removing noisy alerts.

Prometheus Alert Rules Example

groups:
  - name: api_alerts
    interval: 30s
    rules:
      - alert: HighErrorRate
        expr: |
          sum(rate(http_requests_total{status=~"5.."}[5m])) by (service)
          / sum(rate(http_requests_total[5m])) by (service) > 0.05
        for: 2m
        labels:
          severity: P1
          team: platform
        annotations:
          summary: "{{ $labels.service }} error rate > 5%"
          description: "{{ $labels.service }} has {{ $value | humanizePercentage }} error rate for 2 minutes"
          runbook: "https://runbooks.example.com/high-error-rate"

      - alert: HighLatencyP99
        expr: |
          histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[10m])) by (le, service)) > 1
        for: 5m
        labels:
          severity: P2
          team: platform
        annotations:
          summary: "{{ $labels.service }} p99 latency > 1s"
          runbook: "https://runbooks.example.com/high-latency"

      - alert: DiskSpaceLow
        expr: |
          (node_filesystem_avail_bytes{mountpoint="/"}
          / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
        for: 15m
        labels:
          severity: P2
          team: infrastructure
        annotations:
          summary: "Disk space < 10% on {{ $labels.instance }}"
          runbook: "https://runbooks.example.com/disk-space"

Alertmanager Routing Configuration

route:
  receiver: default
  group_by: ["alertname", "service", "severity"]
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  routes:
    - matchers:
        - severity = "P1"
      receiver: pagerduty-critical
      group_wait: 0s
      repeat_interval: 30m
    - matchers:
        - severity = "P2"
      receiver: pagerduty-warning
      group_wait: 30s
      repeat_interval: 2h
    - matchers:
        - severity = "P3"
      receiver: slack-alerts
      group_wait: 5m
    - matchers:
        - severity = "P4"
      receiver: email-alerts
      group_wait: 1h

receivers:
  - name: pagerduty-critical
    pagerduty_configs:
      - service_key: "P1_KEY"
  - name: pagerduty-warning
    pagerduty_configs:
      - service_key: "P2_KEY"
  - name: slack-alerts
    slack_configs:
      - channel: "#alerts"
        api_url: "SLACK_WEBHOOK_URL"
  - name: email-alerts
    email_configs:
      - to: "team@example.com"
  - name: default
    slack_configs:
      - channel: "#alerts"

Alert Quality Scorecard

Review each alert quarterly using this scorecard:

CriterionScore (1-5)Notes
Actionable: Does the alert trigger a clear response?
Accuracy: Is the false-positive rate below 5%?
Timely: Does the alert fire before user impact?
Routed: Does it reach the team that can fix it?
Documented: Is there a runbook linked?
Unique: Is this alert redundant with another?

Total score below 18 means the alert needs tuning or removal.

Variants

  • Cloud-native alerting policy: Uses Prometheus Alertmanager, Grafana Oncall, or PagerDuty for container and serverless environments.
  • Enterprise IT monitoring policy: Focuses on infrastructure, network, and service desk integration.
  • Security alerting policy: Emphasizes SIEM rules, threat detection, and incident response triggers.
  • Business operations alerting: Tracks KPIs, revenue, and customer-facing metrics with business-hour notifications.
  • Developer self-service alerting: Allows teams to define their own alert rules within guardrails.
  • Multi-cloud alerting policy: Uses cloud-agnostic tools (Grafana, Datadog) to unify alerts across AWS, GCP, and Azure.
  • Cost alerting policy: Monitors cloud spend with budget thresholds and anomaly detection on cost metrics.
  • Compliance alerting policy: Tracks audit log gaps, failed access reviews, and policy violations for regulated environments.

What Works

  • Alert on symptoms that affect users, not just internal metrics.
  • Use multi-window or multi-burn rate thresholds to reduce false positives.
  • Require every alert to have an associated runbook or troubleshooting link.
  • Route alerts to the team that can fix the problem, not a central queue.
  • Keep alert messages concise and include context such as severity, service, and impact.
  • Review noisy alerts weekly and tune or delete them.
  • Test escalation paths during regular drills.
  • Document alert thresholds and the rationale for changes.
  • Use alert grouping to batch related alerts into a single notification during incidents.
  • Implement alert suppression for known maintenance windows and deployments.

Common Mistakes

  • Alerting on every metric threshold without considering user impact.
  • Sending all alerts to a single channel with no routing.
  • Using the same severity for every alert.
  • Not requiring acknowledgment or tracking resolution time.
  • Ignoring alerts that fire repeatedly without action.
  • Missing escalation paths for severe incidents.
  • Failing to review and retire stale alerts after system changes.
  • Setting thresholds based on gut feeling instead of historical data.
  • Not including service name and environment in alert labels, making triage harder.
  • Alerting on absolute values instead of rates or ratios, causing false positives during traffic spikes.

Troubleshooting

  • No logs for a failing request: verify log shipping, retention, and that the request reached the service.
  • Alert fires but the service is healthy: tune thresholds and use multi-signal alerts.
  • Dashboard shows stale data: check refresh intervals, query range, and data source lag. Verify that the metric still exists.
  • High cardinality metrics explode costs: drop high-cardinality labels, aggregate before ingest, or use sampling.
  • Trace is incomplete across services: ensure all services propagate trace context. Instrument async and background jobs.

Production Notes

  • Deploy gradually using canary or blue-green to catch regressions early.
  • Configure alerts for error rate, p99 latency, and failure rate before enabling in production.
  • Document the rollback in the runbook; test the procedure in staging at least once per quarter.
  • Review structured logs with correlation IDs to trace requests end-to-end during incidents.

Key Takeaways

  • Apply monitoring and alerting policy template when you need a practical solution for your use case.
  • Monitor performance after implementation; measure latency, errors, and resource usage before and after.
  • Check the Troubleshooting section for common failures; most have documented root causes with fixes.
  • Keep dependencies updated and run tests in CI to prevent production regressions.

Common Production Pitfalls

  • Leaving required fields blank or using vague one-word answers.
  • Filling the document once and never updating it after scope or decisions change.
  • Storing the document where the team does not look during incidents or reviews.
  • Not assigning an owner, due date, or review cadence.
  • Copying boilerplate without removing sections that do not apply.
  • Skipping version control, which makes rollback and accountability impossible.
  • Failing to link the document to related decisions or follow-up actions.
  • Avoiding quarterly reviews that would retire stale or unused sections.

Frequently Asked Questions

What is alert fatigue and how do we avoid it?
Alert fatigue happens when on-call engineers receive too many low-value alerts. Avoid it by tuning thresholds, grouping related alerts, suppressing known issues, and regularly deleting alerts that do...
Should every alert page someone?
No. Only P1 and P2 alerts should page the on-call engineer. Lower-severity alerts should use Slack, email, or dashboard notifications to avoid disrupting response time for critical issues.
How do we know if our thresholds are right?
Track the ratio of useful alerts to total alerts, measure mean time to acknowledge and resolve, and review false-positive rates. If an alert fires frequently without action, it is a candidate for...
What is multi-window alerting and why should I use it?
Multi-window alerting evaluates a condition over both a short and long time window before firing. For example, error rate above 5% for both 1m and 5m windows. This prevents alerts from firing on...
How do we handle alerts during planned maintenance?
Use alert suppression or silencing in your alerting tool. In Alertmanager, create a silence rule with start/end times and matchers for the affected services. Document the maintenance window in an...
Should we use SLO-based alerting instead of threshold-based alerting?
SLO-based alerting (error budget burn rate) is more solid for user-facing services because it directly measures user impact. Threshold-based alerting is simpler and works well for infrastructure...
How many alerts should an on-call engineer receive per shift?
A healthy on-call shift has 0-2 pages (P1/P2) and 5-15 Slack/email alerts (P3/P4). If an engineer receives more than 5 pages per shift, the alerting policy needs immediate tuning. Track alert volume...
How do we prevent alert fatigue during incidents?
During active incidents, suppress dependent alerts that fire as a direct consequence of the root cause. Use alert grouping in Alertmanager to bundle related alerts into a single notification....