DEV Community

DevOps VN
DevOps VN

Posted on • Edited on

Replace Opsgenie with this open-source alert router

Tired of paying $199.5/month (10 users) for Opsgenie? Here’s how teams like yours are slashing costs by 90% while gaining full control over alert routing and templates using Versus Incident – an open-source alternative trusted by DevOps teams managing 10k+ servers.

Why Teams Are Switching

Feature Opsgenie Versus Incident
Cost $2,280/year (10 users) Free
Custom Templates Limited Go Templating
Multi-Channel Routing Add-on Fees Built-in
Lock-in Risk High None

In this guide, you’ll learn how to route Prometheus Alertmanager alerts to Slack and Telegram using the Versus Incident, while fully customizing alert messages.

Versus

Step 1: Redirect Alertmanager to Versus (5 Minutes)

Update your alertmanager.yml to bypass Opsgenie’s webhook:

route: receiver: 'versus-incident' group_wait: 10s # Faster than Opsgenie's 30s default! receivers: - name: 'versus-incident' webhook_configs: - url: 'http://versus-host:3000/api/incidents' send_resolved: true # Get resolution notices for free 
Enter fullscreen mode Exit fullscreen mode

Step 2: Deploy Versus Incident (With Multi-Channel Fallback)

Create a configuration folder:

mkdir -p ./config 
Enter fullscreen mode Exit fullscreen mode

Create a configuration file config/config.yaml:

name: versus host: 0.0.0.0 port: 3000 alert: slack: enable: true token: ${SLACK_TOKEN} channel_id: ${SLACK_CHANNEL_ID} template_path: "/app/config/slack_message.tmpl" telegram: enable: true bot_token: ${TELEGRAM_BOT_TOKEN} chat_id: ${TELEGRAM_CHAT_ID} template_path: "/app/config/telegram_message.tmpl" 
Enter fullscreen mode Exit fullscreen mode

docker-compose.ymlAlways-on alerting with Slack + Telegram backup:

version: '3.8' services: versus: image: ghcr.io/versuscontrol/versus-incident ports: - "3000:3000" volumes: - ./config:/app/config # Persist templates environment: SLACK_ENABLE: "true" SLACK_TOKEN: "xoxb-..." SLACK_CHANNEL_ID: "C123" TELEGRAM_ENABLE: "true" # Failover channel TELEGRAM_BOT_TOKEN: "123:ABC" TELEGRAM_CHAT_ID: "-456" 
Enter fullscreen mode Exit fullscreen mode

Key Advantage: Unlike Opsgenie’s per-channel pricing, Versus lets you blast alerts to unlimited channels for $0.

Step 3: Create Context-Rich Templates

Slack Template (config/slack_message.tmpl):

🔥 {{.commonLabels.severity | upper}} ALERT: {{.commonLabels.alertname}} 📦 *Cluster*: {{.commonLabels.cluster | default "N/A"}} 🚨 *Status*: {{.status | title}} {{range .alerts}} ⏰ {{.startsAt | formatTime}} {{.annotations.description | indent 2}} {{end}} {{if .commonLabels.runbook}}📖 <{{.commonLabels.runbook}}|Runbook>{{end}} 
Enter fullscreen mode Exit fullscreen mode

Telegram Template (config/telegram_message.tmpl):

🚩 <b>{{.commonLabels.alertname}}</b> ({{.status}}) {{range .alerts}} 🕒 {{.startsAt | formatTime}} {{.annotations.summary}} {{end}} {{if eq .commonLabels.severity "critical"}}🔴 <i>PAGE ON-CALL</i>{{end}} 
Enter fullscreen mode Exit fullscreen mode

Step 4: Advanced Routing

Route to different channels based on labels:

# Send database alerts to DBA team curl -X POST http://versus-host:3000/api/incidents?slack_channel_id=C001DB \ -H "Content-Type: application/json" \ -d '{"commonLabels":{"alertname":"PostgresqlDown","team":"dba"}}' # Send frontend alerts to web-team curl -X POST http://versus-host:3000/api/incidents?slack_channel_id=C002FE \ -H "Content-Type: application/json" \ -d '{"commonLabels":{"alertname":"FrontendLatency","team":"web"}}' 
Enter fullscreen mode Exit fullscreen mode

Cost Comparison:

Opsgenie charges $199.5/month (10 users) for basic routing rules – for something Versus does better for free.


Migration Checklist

  1. Redirect Alertmanager webhooks to Versus
  2. Set up multi-channel fallbacks (Slack + Telegram + Email)

Cons

Q: How do we handle on-call schedules?

Now we support AWS Incident Manager

Top comments (0)