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.
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
Step 2: Deploy Versus Incident (With Multi-Channel Fallback)
Create a configuration folder:
mkdir -p ./config
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"
docker-compose.yml – Always-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"
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}}
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}}
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"}}'
Cost Comparison:
Opsgenie charges $199.5/month (10 users) for basic routing rules – for something Versus does better for free.
Migration Checklist
- Redirect Alertmanager webhooks to Versus
- 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)