Discord isn't just for gamingβit's a powerful platform for team communication and alerts. Many development and SRE teams use Discord for monitoring notifications. Here's how to set it up.
Why Discord for Alerts?
- Free and reliable - No per-user costs
- Great mobile app - Push notifications work well
- Rich embeds - Beautiful formatted alerts
- Role mentions - Alert specific team members
- Community-friendly - Great for open source projects
Setting Up Discord Webhooks
Step 1: Create a Webhook
- Open your Discord server
- Go to Server Settings β Integrations β Webhooks
- Click "New Webhook"
- Name it (e.g., "Uptime Alerts")
- Select the target channel
- Copy the webhook URL
Step 2: Add to Monitoring
In your monitoring service:
- Go to notification settings
- Add Discord webhook integration
- Paste the webhook URL
- Save and test
Step 3: Verify
Trigger a test alert to confirm it arrives in Discord.
Channel Organization
Recommended Structure
π’ ALERTS
βββ #production-critical - Critical production alerts only
βββ #production-warnings - Performance degradation
βββ #staging-alerts - All staging environment
βββ #status-updates - Public status updates
π MONITORING
βββ #daily-reports - Automated daily summaries
βββ #incident-discussion - Active incident threads
Role-Based Access
Create roles for alert routing:
@oncall- Current on-call engineer@sre-team- Full SRE team@devs- Development team@everyone- Major outages only
Message Formatting with Embeds
Discord supports rich embeds for beautiful alerts:
Down Alert Example
{
"embeds": [{
"title": "π΄ Service DOWN",
"description": "Production API is not responding",
"color": 15158332,
"fields": [
{"name": "Monitor", "value": "api.example.com", "inline": true},
{"name": "Status", "value": "HTTP 500", "inline": true},
{"name": "Duration", "value": "5 minutes", "inline": true},
{"name": "Location", "value": "US-East", "inline": true}
],
"timestamp": "2026-01-31T14:30:00.000Z",
"footer": {"text": "WizStatus Monitoring"}
}]
}
Recovery Alert Example
{
"embeds": [{
"title": "π’ Service RECOVERED",
"description": "Production API is back online",
"color": 3066993,
"fields": [
{"name": "Monitor", "value": "api.example.com", "inline": true},
{"name": "Downtime", "value": "12 minutes", "inline": true}
],
"timestamp": "2026-01-31T14:42:00.000Z"
}]
}
Color Coding
Use colors to indicate severity:
| Status | Color (Decimal) | Hex |
|---|---|---|
| Critical/Down | 15158332 | #E74C3C |
| Warning | 15105570 | #E67E22 |
| OK/Recovered | 3066993 | #2ECC71 |
| Info | 3447003 | #3498DB |
Role Mentions
Alert specific roles based on severity:
{
"content": "<@&ROLE_ID> Critical alert!",
"embeds": [...]
}
Get role ID by typing \@rolename in Discord and copying the number.
Mention Strategy
Critical (production down): @oncall + @sre-team
Warning (degraded): @sre-team only
Info (resolved): No mention
Multiple Webhooks
Use different webhooks for different purposes:
| Environment | Channel | Webhook |
|---|---|---|
| Production Critical | #prod-critical | webhook1 |
| Production Warning | #prod-warnings | webhook2 |
| Staging | #staging-alerts | webhook3 |
| SSL Expiry | #ssl-alerts | webhook4 |
Discord Bot Alternative
For advanced features, consider a Discord bot:
- Interactive buttons (acknowledge, resolve)
- Thread creation per incident
- Database of incidents
- Custom commands (/status, /oncall)
Most monitoring services support webhooks, making them the simpler option.
Notification Settings
Per-Channel Settings
Configure Discord notifications per channel:
- Mute low-priority channels
- Enable push for critical channels
- Use @mentions for urgent only
Server Notification Settings
Right-click server β Notification Settings:
- Suppress @everyone for non-critical channels
- Mobile push notifications for critical only
Testing Your Setup
Manual Webhook Test
curl -H "Content-Type: application/json" \
-d '{"content":"Test alert from monitoring"}' \
YOUR_WEBHOOK_URL
Test with Embed
curl -H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "Test Alert",
"description": "This is a test",
"color": 3447003
}]
}' \
YOUR_WEBHOOK_URL
Best Practices
- Use embeds - Much cleaner than plain text
- Include timestamps - Know when issues occurred
- Color code - Visual severity indication
- Limit mentions - Avoid alert fatigue
- Separate channels - Don't mix environments
- Name webhooks clearly - Know which is which
Troubleshooting
Messages Not Arriving
- Verify webhook URL is correct
- Check channel permissions
- Confirm webhook isn't deleted
- Test with curl manually
Rate Limiting
Discord rate limits: ~30 messages per minute per webhook.
Solutions:
- Reduce alert frequency
- Use deduplication
- Aggregate alerts
Formatting Issues
- Validate JSON before sending
- Test embeds in Discord webhook tester
- Check field value lengths (max 1024 chars)