Unified alerting and notifications for all BrainzLab products.
# With Docker Compose (from brainzlab root)
docker-compose --profile signal up
# Access at http://localhost:4005From the brainzlab root directory:
docker-compose --profile signal upcd signal
bundle install
bin/rails db:create db:migrate
bin/rails server -p 4005| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection | - |
REDIS_URL |
Redis for Sidekiq | redis://localhost:6379/0 |
FLUX_URL |
Flux service URL | http://flux:3000 |
PULSE_URL |
Pulse service URL | http://pulse:3000 |
REFLEX_URL |
Reflex service URL | http://reflex:3000 |
RECALL_URL |
Recall service URL | http://recall:3000 |
SIGNAL_URL |
Public URL for links | https://signal.brainzlab.ai |
- Alert Rules - Threshold, anomaly detection, absence detection, composite rules
- Data Sources - Integrates with Flux (metrics), Pulse (APM), Reflex (errors), Recall (logs)
- Notification Channels - Slack, PagerDuty, Email, Webhook, Discord, Microsoft Teams, Opsgenie
- Incidents - Automatic incident grouping with timeline tracking
- Escalation Policies - Multi-step escalation with configurable delays
- On-call Schedules - Weekly and rotation-based scheduling
- Maintenance Windows - Scheduled alert muting
POST /api/v1/rules
{
"rule": {
"name": "High Error Rate",
"source": "reflex",
"source_name": "error_count",
"rule_type": "threshold",
"operator": "gt",
"threshold": 100,
"window": "5m",
"severity": "critical",
"notify_channels": ["<channel-uuid>"]
}
}POST /api/v1/channels
{
"channel": {
"name": "ops-alerts",
"channel_type": "slack",
"config": {
"webhook_url": "https://hooks.slack.com/...",
"channel": "#ops"
}
}
}POST /api/v1/channels
{
"channel": {
"name": "pagerduty-critical",
"channel_type": "pagerduty",
"config": {
"routing_key": "your-routing-key",
"severity_map": {
"critical": "critical",
"warning": "warning"
}
}
}
}Signal
├── Alert Rules # Define conditions for alerts
├── Alerts # Active alert instances
├── Incidents # Groups related alerts
├── Channels # Notification destinations
├── Policies # Escalation configurations
├── Schedules # On-call rotations
└── Windows # Maintenance periods
RuleEvaluationJob- Evaluates all active rules (runs every minute)NotificationJob- Sends notifications to channelsEscalationJob- Handles escalation stepsDigestJob- Sends periodic alert digestsCleanupJob- Removes old alerts and history
GET /api/v1/alerts- List alertsPOST /api/v1/alerts/:id/acknowledge- Acknowledge alert
GET /api/v1/rules- List alert rulesPOST /api/v1/rules- Create rulePOST /api/v1/rules/:id/mute- Mute rule
GET /api/v1/channels- List notification channelsPOST /api/v1/channels/:id/test- Test channel
GET /api/v1/incidents- List incidents
| Tool | Description |
|---|---|
signal_list_alerts |
List active alerts |
signal_acknowledge |
Acknowledge an alert |
signal_create_rule |
Create alert rule |
signal_mute |
Mute a rule |
signal_incidents |
List incidents |
Full documentation: docs.brainzlab.ai/products/signal
services:
signal:
image: brainzllc/signal:latest
ports:
- "4005:3000"
environment:
DATABASE_URL: postgres://user:pass@db:5432/signal
REDIS_URL: redis://redis:6379/0
FLUX_URL: http://flux:3000
PULSE_URL: http://pulse:3000
REFLEX_URL: http://reflex:3000
RECALL_URL: http://recall:3000
depends_on:
- db
- redisbin/rails test
bin/rubocopSee CONTRIBUTING.md for development setup and contribution guidelines.
This project is licensed under the OSAaSy License.