
September 11, 2026
11 min read
By Kokil Thapa | Last reviewed: September 2026
Production outages do not wait for office hours. When a Laravel queue worker dies, a payment webhook stalls, or disk fills on a shared EC2 host, someone must respond fast. Opsgenie for on-call and alerting sits between your monitors and your engineers. It turns raw signals into owned incidents with clear escalation paths. If you already run Prometheus Alertmanager or log-based checks, Opsgenie adds the human layer: schedules, deduplication, and delivery to phone, SMS, push, or chat. This guide covers what it does, how to configure it, and where it fits beside tools you likely already use.
What is Opsgenie and how does on-call alerting work?
Opsgenie is Atlassian's incident management platform. It ingests alerts from dozens of integrations and applies rules before anyone's phone buzzes. Think of it as a switchboard, not a monitor. Prometheus tells you CPU is high. Opsgenie decides who owns that alert tonight and whether a second page is warranted if nobody answers.
The core objects are straightforward. A team owns a service area. A schedule defines who is primary and secondary on each shift. An escalation policy defines what happens when an alert is not acknowledged within N minutes. An integration receives inbound alerts from Grafana, Datadog, UptimeRobot, or a generic webhook. Each alert becomes an incident that responders can acknowledge, escalate, or close.
On sister sites I maintain with Deployer 7 and GitLab CI, one noisy cron job can spam five domains at once. Opsgenie's deduplication groups alerts that share the same alias within a time window. That alone saves sleep. The official Atlassian Opsgenie documentation describes alert grouping, suppression, and maintenance windows in detail.
Opsgenie also supports heartbeats. Your cron sends a periodic ping. If the ping stops, Opsgenie opens an alert. That pattern catches silent failures—jobs that exit zero but do nothing—better than process-up checks alone.
How do you set up Opsgenie on-call rotations and escalation policies?
Start with teams that mirror real ownership. Do not create one giant "DevOps" team unless one person truly owns everything. On production Laravel applications I work on, I split web app, database, and infrastructure at minimum. Legal-tech portals with document uploads get a separate queue from marketing brochure sites.
Create the team and schedule
- Sign in to Opsgenie and create a team (for example,
platform-nepal). - Add members with correct time zones—Nepal is UTC+5:45, which matters for handoffs.
- Build a weekly rotation: primary Mon–Sun, secondary as backup.
- Attach the schedule to an escalation policy as step zero.
Use overlapping coverage during Dashain and Tihar if your team takes leave. Override schedules manually for holidays rather than editing the whole rotation each year.
Define escalation that matches severity
A practical three-step policy for production web apps:
- Step 0 (0 min): Notify primary on-call via mobile app and SMS.
- Step 1 (5 min): Notify secondary on-call if unacknowledged.
- Step 2 (15 min): Notify team lead and post to a Slack or Microsoft Teams channel.
Reserve "notify everyone" policies for true SEV-1 only. Pair this with SLO-driven alerting that does not page at 3am so low-priority warnings land in email or chat instead of SMS.
Configure notification rules
Each user should install the Opsgenie mobile app and confirm SMS delivery. Voice call is a last resort—it works when mobile data fails but adds stress. Set quiet hours only for non-production teams. Production on-call means production on-call.
Document the rotation in your incident response runbook. Include who can declare maintenance windows and how to page the database owner separately from the front-end owner.
How do you connect Opsgenie to Prometheus, logs, and Laravel apps?
Most teams already emit metrics or log lines. Opsgenie does not replace those layers. It receives their output.
Prometheus and Alertmanager
Alertmanager can forward to Opsgenie via the built-in Opsgenie receiver or a webhook integration. In Alertmanager config:
receivers:
- name: 'opsgenie-critical'
opsgenie_configs:
- api_key: '<OPSGENIE_INTEGRATION_API_KEY>'
message: '{{ .GroupLabels.alertname }}'
description: '{{ .CommonAnnotations.description }}'
priority: 'P1'
tags: 'env:production,team:platform'
Map Alertmanager severity labels to Opsgenie priority (P1–P5). Critical payment failures on an eCommerce stack deserve P1. High queue depth might be P3 until SLO burn confirms impact. See the Prometheus Opsgenie receiver documentation for all supported fields.
Generic webhook from Laravel or cron scripts
When a health check fails outside Prometheus, POST JSON directly to the Opsgenie Create Alert API:
curl -X POST 'https://api.opsgenie.com/v2/alerts' \
-H 'Authorization: GenieKey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"message": "Laravel queue worker stopped on prod-01",
"alias": "queue-worker-prod-01",
"description": "supervisor status shows FATAL",
"priority": "P2",
"tags": ["laravel", "queue", "production"]
}'
Use a stable alias so repeat failures deduplicate instead of opening fifty incidents. I use this pattern when php artisan queue:work dies silently after a deploy—exactly the kind of issue that passes a simple HTTP 200 check.
Validate JSON payloads with a JSON formatter before you paste them into Postman or CI scripts. A trailing comma has caused more failed drills than broken servers.
Log-based and shell checks
Not every client runs Kubernetes or a full metrics stack. A cron job that greps Laravel logs for ERROR or payment gateway timeouts still belongs in Opsgenie. Combine log parsing with awk, grep, and journalctl with a small shell wrapper that calls the API when thresholds breach.
For regex-heavy log filters, test patterns in a regex tester first. False positives at 2 a.m. train teams to ignore pages.
Opsgenie vs PagerDuty vs Alertmanager — which should you choose?
You rarely pick only one tool. Alertmanager routes and silences Prometheus alerts—it is free and stays close to your metrics. Opsgenie and PagerDuty add enterprise on-call workflows, mobile apps, and broader integrations. For a small Nepal agency running Laravel on Ubuntu with tight budgets, the decision is operational cost versus sleep protected.
| Criteria | Opsgenie | PagerDuty | Alertmanager alone |
|---|---|---|---|
| On-call schedules | Full rotations, overrides, calendars | Full rotations, advanced analytics | None—pair with external tool |
| Escalation policies | Multi-step, team-based | Multi-step, event orchestration | Basic grouping and inhibition only |
| Integrations | Strong Atlassian/Jira tie-in | Very broad SaaS catalog | Prometheus-native receivers |
| Cost (small team) | Free tier limited; paid per user | Paid tiers from small team up | Free (self-hosted) |
| Best fit | Teams on Jira/JSM already | Large ops orgs needing analytics | Metrics-only shops adding Opsgenie later |
My default for Linux system administration clients: keep Alertmanager for Prometheus, forward P1/P2 to Opsgenie, send P3+ to email or Slack. That split mirrors how I structure support and maintenance retainers—critical paths get pages, everything else gets tickets.
If you are fully on Atlassian Cloud, Opsgenie (now woven into Jira Service Management operations) reduces vendor sprawl. If you live in Datadog or Grafana Cloud, check their native on-call modules before adding another subscription.
What Opsgenie mistakes cause alert fatigue and missed incidents?
The software works when the operating model is disciplined. These failures show up on every production Laravel deployment I have inherited.
Paging on symptoms instead of user impact
CPU at 85% is not an incident. Checkout error rate above 2% for ten minutes is. Tie pages to SLOs or business metrics, not raw infrastructure thresholds alone. Read AIOps basics if you want anomaly detection—but fix alert rules first.
Missing maintenance windows during deploys
Zero-downtime Deployer releases still restart PHP-FPM and flush opcache. Without a maintenance window, health checks flap and Opsgenie pages the whole rotation. I open a fifteen-minute window automatically from GitLab CI before symlink swap on sensitive hosts—same pipeline pattern used on Notary Kathmandu sister sites.
No runbook link on the alert
Every integration should pass a runbook URL in the description field. "Disk full on /var" is useless without steps for log rotation, MySQL binlog cleanup, or df -h triage. Your on-call engineer should not grep Confluence at 3 a.m.
Shared API keys and no test drills
Rotate integration API keys when staff leave. Run a monthly game day: deliberately fail a staging heartbeat and confirm the primary acknowledges within five minutes. Testing and optimization applies to alerting pipelines too—not just page speed.
On booking platforms like Adventure Third Pole Trek, payment and supplier API failures need immediate routing. Marketing blog downtime can wait until morning. Opsgenie team routing makes that separation enforceable instead of hopeful.
Key Takeaways
- Opsgenie sits between monitors and humans—configure schedules, escalations, and integrations; it does not replace Prometheus or log checks.
- Map alert severity to Opsgenie priority (P1–P5) and use stable aliases so deduplication prevents duplicate incidents.
- Forward Alertmanager critical alerts via
opsgenie_configs; use the REST API for Laravel queue, cron, and heartbeat failures. - Run monthly game-day drills and maintenance windows during Deployer or PHP-FPM reloads to stop deploy flapping.
- Attach runbook URLs to every alert description so on-call engineers act fast without guessing.
- Combine Opsgenie with SLO-based rules so only user-impacting failures page overnight.
People Also Ask
Does Opsgenie work with Jira Service Management?
Yes. Atlassian acquired Opsgenie and integrates it with Jira Service Management. Alerts can create or link to JSM incidents, and on-call schedules appear inside the Atlassian ops workflow. Teams already paying for Atlassian Cloud often enable ops features without a separate vendor contract.
How much does Opsgenie cost for a small team?
Pricing is per user and changes with Atlassian bundling. Small teams should compare JSM ops licensing against standalone PagerDuty quotes. Budget roughly USD 15–30 per user/month for paid tiers at small scale, but verify current Atlassian pricing for Nepal-based billing in NPR before you commit.
Can Opsgenie replace Prometheus Alertmanager?
No. Alertmanager handles Prometheus-specific grouping, inhibition, and silencing. Opsgenie handles people, schedules, and multi-channel delivery. The usual architecture keeps both: Alertmanager filters metrics alerts, Opsgenie pages on-call.
What is the difference between an Opsgenie alert and an incident?
An alert is the inbound signal from a monitoring tool. Opsgenie may group multiple alerts into one incident. Responders acknowledge and close incidents; alerts are the raw events that feed them. Use aliases and tags so related alerts collapse correctly.
Build on-call alerting that matches your production stack
Opsgenie for on-call and alerting earns its place when you have real rotations, real escalations, and monitors that already emit trustworthy signals. Start with one team, one schedule, and one Prometheus integration. Add Laravel webhook alerts for the failure modes metrics miss—queue workers, payment callbacks, silent crons. Keep Alertmanager for inhibition rules. Document everything in a runbook your next engineer can follow at 3 a.m.
If you want help wiring alerting into a Laravel production stack, CI pipeline, or shared hosting fleet, see enterprise application development and API development services—or review how similar systems were built on the portfolio. For infrastructure hardening alongside alerting, Ansible playbooks for PHP servers pair well with heartbeat checks. Ready to audit your current setup? Contact us for a practical review focused on pages that matter, not noise that burns out your team.
Frequently Asked Questions
0 Comments
Leave a comment
Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

