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?
→ Versus don't support on-call schedules now, but it's in the roadmap
Top comments (0)