Loading...
Loading...
Manage Oodle notifiers, notification policies, and muting rules — routing alerts to the right channels and silencing during maintenance.
npx skill4agent add oodle-ai/agent-skills oodle-alertingbrew install oodle-ai/oodle/oodle
oodle configureoodle notifiers list -o json | jq 'length'
oodle notification-policies list -o json | jq 'length'
oodle muting-rules list -o json | jq 'length'oodle notifiers list -o jsondelete| Task | Command |
|---|---|
| List notifiers | |
| Get notifier | |
| Create notifier | |
| Update notifier | |
| Delete notifier | |
| List policies | |
| Get policy | |
| Create policy | |
| Update policy | |
| Delete policy | |
| List muting rules | |
| Get muting rule | |
| Create muting rule | |
| Update muting rule | |
| Delete muting rule | |
configtype{
"name": "slack-ops",
"type": "slack",
"config": { "webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX" }
}{
"name": "pd-platform",
"type": "pagerduty",
"config": { "integrationKey": "abc123def456" }
}{
"name": "email-platform",
"type": "email",
"config": { "addresses": ["oncall@example.com", "alerts@example.com"] }
}{
"name": "webhook-incident-bot",
"type": "webhook",
"config": { "url": "https://incidents.example.com/oodle" }
}# ✅ CORRECT
oodle notifiers create -f notifier.json
# ❌ WRONG — missing config block, server returns 400
oodle notifiers create -f <(echo '{"name":"x","type":"slack"}'){
"name": "platform-prod",
"matchers": [
{"name": "team", "value": "platform"},
{"name": "env", "value": "prod"}
],
"receiver": "slack-ops",
"routes": [
{
"matchers": [{"name": "severity", "value": "critical"}],
"receiver": "pd-platform"
}
]
}# ✅ CORRECT
oodle notification-policies create -f policy.json
# ❌ WRONG — references a notifier that doesn't exist; server returns 400
# (no `receiver` set or `receiver: "non-existent"`)startsAtendsAt{
"name": "deploy-window-2024-01-15",
"matchers": [
{"name": "service", "value": "api"},
{"name": "env", "value": "prod"}
],
"startsAt": "2024-01-15T02:00:00Z",
"endsAt": "2024-01-15T06:00:00Z"
}# ✅ CORRECT — bounded window
oodle muting-rules create -f mute.json
# ❌ WRONG — endsAt before startsAt (rejected by server)
# {"startsAt": "2024-01-15T06:00:00Z", "endsAt": "2024-01-15T02:00:00Z"}# ✅ CORRECT — create notifier, attach to a `severity=info` test monitor, fire it once,
# confirm message arrives, then attach to the production policy.
oodle notifiers create -f notifier.json
oodle monitors create -f test-monitor.json # severity=info, low threshold
# wait for fire, confirm receipt, then:
oodle notification-policies update pol_123 -f policy.json # adds the new notifier
# ❌ WRONG — attach an untested notifier directly to a `severity=critical` policy
oodle notifiers create -f notifier.json
oodle notification-policies create -f policy-critical.jsonget# ✅ CORRECT — find references first
oodle notifiers get notif_slack_ops -o json
oodle notification-policies list -o json | jq '.[] | select(.receiver=="slack-ops" or (.routes[]?.receiver=="slack-ops")) | .id'
# update those policies to a different receiver, then:
oodle notifiers delete notif_slack_ops --force
# ❌ WRONG — delete without checking; live policies suddenly route to a missing receiver
oodle notifiers delete notif_slack_ops --forceendsAt# ✅ CORRECT — bounded mute window
"startsAt": "2024-01-15T02:00:00Z", "endsAt": "2024-01-15T06:00:00Z"
# ❌ WRONG — open-ended; alerts stay silenced forever
"startsAt": "2024-01-15T02:00:00Z", "endsAt": null{env: prod}# ✅ CORRECT
"matchers": [{"name":"team","value":"platform"},{"name":"env","value":"prod"}]
# ❌ WRONG — every prod alert in the org routes here
"matchers": [{"name":"env","value":"prod"}]routesseverity=critical# ✅ CORRECT
"matchers": [{"name":"team","value":"platform"}],
"receiver": "slack-ops",
"routes": [{"matchers":[{"name":"severity","value":"critical"}],"receiver":"pd-platform"}]
# ❌ WRONG — two top-level policies, both match, both fire| Error | Cause | Fix |
|---|---|---|
| 401 Unauthorized | Invalid or missing API key | Run |
| 404 Not Found | Notifier / policy / muting-rule ID does not exist | Verify with the matching |
| connection refused | Wrong | Check |
| Policy references a notifier name that doesn't exist | Run |
| Slack messages not arriving | Wrong webhook URL or webhook deactivated | Re-issue the Slack incoming webhook; update notifier |
| PagerDuty incidents not created | Wrong | Confirm the routing key in PagerDuty; update notifier |
| Mute didn't take effect | | |
| 429 Too Many Requests | Bulk policy sync | Add |