alertsift
Turn an alert storm into the few incidents that actually matter — dedupe, correlate, rank, and (optionally) AI-explain alerts from any source, then push a clean digest to Slack.
It's 2 a.m., you're on-call, and 214 alerts are firing. Your real question isn't "what fired?" — it's "what's actually broken, and where do I start?" Studies show 40–60% of alerts never even get investigated because the signal drowns in noise.
alertsift does that triage for you, in one command:
🔔 214 alert(s) → 3 incident(s) (deduped to 60, suppressed 22)
● checkout-svc (critical, 47 alerts) ← start here
types: HighLatency, High5xxRate, PodRestart
checkout-svc is crash-looping and timing out payment calls.
likely cause: a bad deploy or failing dependency in checkout-svc.
● node-7 (medium, 1 alerts)
types: DiskUsage
Source-agnostic by design. It normalizes alerts from Prometheus/Alertmanager, generic JSON, or plain logs into one shape, then dedupes, groups related alerts into incidents, ranks them, and (optionally) has an LLM explain the likely root cause. Adding a new platform (Datadog, CloudWatch, PagerDuty…) is just one new parser.
Why alertsift
| Raw alert channel | alertsift | |
|---|---|---|
| Collapses duplicate alerts | ❌ | ✅ |
| Groups related alerts into incidents | ❌ | ✅ |
| Ranks "what to look at first" | ❌ | ✅ |
| Suppresses known noise | ❌ | ✅ .alertsiftignore |
| Plain-English likely cause | ❌ | ✅ (optional LLM) |
| Works with no API key | — | ✅ --no-ai / mock / local Ollama |
| Posts a clean digest to Slack | ❌ | ✅ |
Install
git clone https://github.com/jay-tank/alertsift.git
cd alertsift
pip install .
# optional LLM providers:
pip install '.[claude]' # or '.[openai]'
Usage
# Triage a file (auto-detects Alertmanager / JSON / logs)
alertsift alerts.json
# From a pipe — e.g. Alertmanager, kubectl, a log tail
amtool alert -o json | alertsift --stdin
# Pure/offline — no LLM, no key (dedupe + correlate + rank only)
alertsift alerts.json --no-ai
# Post a digest to Slack (webhook from env; preview first with --dry-run)
export ALERTSIFT_SLACK_WEBHOOK="https://hooks.slack.com/services/..."
alertsift alerts.json --slack --dry-run # preview the payload
alertsift alerts.json --slack # actually post
# Machine-readable
alertsift alerts.json --json
Exit codes: 0 = nothing actionable, 1 = actionable incident(s) found, 2 =
usage/parse error — so it slots into cron or CI (only pages you when it matters).
How it works
INPUT ──► parse (pluggable) ──► normalize ──► dedupe ──► suppress ──►
correlate ──► rank ──► [AI enrich] ──► render / --json / Slack
Steps up to rank are pure and fully offline; the LLM only writes the
plain-English explanation (and is skippable with --no-ai). See
docs/USAGE.md and docs/PROVIDERS.md.
Safety
- Secrets never leave your machine. Alert summaries are run through best-effort redaction before being sent to an LLM or posted to Slack.
- Read-only. alertsift never mutates your systems; it reads alerts and reports.
- Slack webhook comes from the environment (
$ALERTSIFT_SLACK_WEBHOOK), never a flag literal, never logged.
Supported sources
Prometheus/Alertmanager, generic JSON, and plain logs today. The core is source-agnostic — Datadog, CloudWatch, and PagerDuty are drop-in parsers on the roadmap.
Limitations
- Correlation in v1 is heuristic (groups by service/namespace) — solid and explainable, but not a full dependency-graph. Treat "likely cause" as an assist to your judgment, not gospel.
- Log parsing is best-effort.
License
MIT — see LICENSE.
Metadata
Release files for alertsift 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| alertsift-0.1.0.tar.gz | 22.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| alertsift-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 45.6 kB
Release files / alertsift-0.1.0.tar.gz
| Download URL | alertsift-0.1.0.tar.gz |
|---|---|
| Size | 22.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
14d260fbf2dfff22d8422c007f5e0d76ae3b45deca9dd118f839c2c2bba2b3e5
|
|
BLAKE2b-256 checksum How to use checksums |
adb5d34b4130bf0389d805d4ceaf7c42fca6aaa6c06c08b0a068ba40da1bda39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / alertsift-0.1.0-py3-none-any.whl
| Download URL | alertsift-0.1.0-py3-none-any.whl |
|---|---|
| Size | 23.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ca02693fe76417725d49ad5c82561a75390c81ec39298a8ceb285ae10e4b2336
|
|
BLAKE2b-256 checksum How to use checksums |
f9464825c7a5a9f688fffeb0dea596097d5e489856754b31c0334f4220fee0be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|