Prerequisites: Before setting up freshness monitoring, you need:
- A connected data source with discovery completed
- Assets with timestamp columns (
created_at,updated_at, or similar)
Why Freshness Matters
Data has an expected update cadence. When that cadence breaks, something is wrong:How Freshness Monitoring Works
AnomalyArmor tracks freshness by monitoring timestamp columns:- You specify which column indicates “when data was updated”
- Discovery queries the maximum value of that column
- We compare against your configured SLA
- Alert fires if data is older than allowed
Setting Up Freshness Monitoring
Select Timestamp Column
Choose the column that best represents data recency:
| Column Type | Best For |
|---|---|
created_at | Append-only tables (events, logs) |
updated_at | Tables with updates (user profiles) |
loaded_at | ETL destination tables |
_etl_timestamp | Warehouse staging tables |
Set Expected Frequency
Define how often you expect new data:
- Every 15 minutes
- Hourly
- Every 6 hours
- Daily
- Weekly
- Custom (specify hours)
Configure Alert Threshold
Set when to trigger alerts:Alert Configuration:
- Warning threshold: 80% of expected (optional)
- Violation threshold: 100%+ of expected
- Warning: Data is 48+ minutes old
- Violation: Data is 60+ minutes old
SLA Strategies
Start Conservative
Set SLAs with buffer room to avoid false positives:| Actual Cadence | Recommended SLA | Why |
|---|---|---|
| Every hour | 2 hours | Allows for occasional delays |
| Every day | 36 hours | Accounts for timing variations |
| Every 15 min | 30 minutes | Double the expected window |
By Data Criticality
| Criticality | SLA Approach | Example |
|---|---|---|
| Critical | Expected + 25% | Revenue: 1hr expected → 75min SLA |
| High | Expected + 50% | Orders: 1hr expected → 90min SLA |
| Medium | Expected × 2 | Analytics: 1hr expected → 2hr SLA |
| Low | Expected × 3 | Reports: daily expected → 3 day SLA |
By Update Pattern
- Streaming/Real-time
- Batch/Hourly
- Daily
For data expected within minutes:
| Setting | Value |
|---|---|
| Expected | Every 5 minutes |
| Warning | 10 minutes |
| Violation | 15 minutes |
| Alert | Slack + PagerDuty |
Freshness Alerts
Setting Up Alert Rules
Create rules to notify you of freshness violations:| Field | Value |
|---|---|
| Rule | Critical Table Freshness |
| Event | Freshness Violation |
| Assets | orders, payments, users |
| Destinations | Slack, PagerDuty |
Alert Content
Freshness alerts include:Handling Special Cases
Weekends and Holidays
Some data doesn’t update on weekends: Options:- Longer weekend SLA: Set different thresholds for Saturday/Sunday
- Pause monitoring: Temporarily disable freshness checks
- Adjust expectations: Set SLA to “72 hours” to cover full weekends
Maintenance Windows
During planned maintenance:- Disable rules: Toggle OFF freshness alert rules for affected assets
- Document: Note expected staleness
- Re-enable: Toggle rules back ON after maintenance
Infrequently Updated Tables
Some tables legitimately update rarely:| Table Type | Update Pattern | SLA Approach |
|---|---|---|
| Reference/lookup | Monthly | 45-day SLA or no monitoring |
| Historical archive | Never | Don’t monitor freshness |
| Dimension tables | Daily/weekly | Match actual pattern |
Viewing Freshness Status
Asset List View
In the Assets list, freshness status appears as indicators:| Indicator | Meaning |
|---|---|
| Green | Within SLA |
| Yellow | Warning threshold reached |
| Red | SLA violated |
| Gray | Freshness not configured |
Asset Detail View
Click an asset to see:- Current freshness status
- Last update timestamp
- Freshness history over time
- SLA configuration
| Field | Value |
|---|---|
| Status | ✓ Within SLA |
| Timestamp Column | created_at |
| Last Update | January 15, 2024 at 2:15 PM UTC |
| Data Age | 45 minutes |
| SLA Threshold | 2 hours |
| Progress | 37% of SLA (45 min / 2 hr) |
Troubleshooting
False positive alerts
False positive alerts
Problem: Freshness alerts fire when data is actually fine.Solutions:
- Verify timestamp column choice. Is it the right one?
- Loosen SLA threshold
- Check timezone handling (UTC vs. local)
- Review discovery schedule vs. SLA timing
Missed violations
Missed violations
Problem: Data was stale but no alert fired.Solutions:
- Verify freshness monitoring is enabled for the asset
- Check alert rule configuration
- Confirm discovery is running frequently enough
- Verify timestamp column has recent values
Wrong timestamp column
Wrong timestamp column
Problem: Freshness showing incorrect values.Solutions:
- Review column choice
- For tables with updates, use
updated_atnotcreated_at - For ETL tables, use the load timestamp column
- Ensure column is always populated (no NULLs)
Timezone issues
Timezone issues
Problem: Freshness calculations seem off by hours.Solutions:
- Check timestamp column timezone
- AnomalyArmor normalizes to UTC
- Ensure consistent timezone handling in your ETL
Best Practices
1. Start with Critical Tables
Focus monitoring on:- Revenue-impacting tables
- Customer-facing dashboard sources
- Compliance-required data
2. Align with Business Needs
Ask: “When would stale data cause a problem?”| Scenario | Acceptable Staleness | SLA |
|---|---|---|
| Real-time dashboard | Minutes | 15 min |
| Daily executive report | Hours | Same-day |
| Monthly compliance | Days | 1 week |
3. Coordinate with ETL Schedules
| Phase | Time |
|---|---|
| ETL Schedule | 2:00 AM daily |
| Processing time | ~30 minutes |
| Data available | ~2:30 AM |
| SLA | 4:00 AM (90 min buffer) |
4. Use Warning Thresholds
Configure two levels:- Warning: “Heads up, getting stale” → Slack
- Violation: “SLA breached” → PagerDuty
What’s Next
Set Up Metrics
Track row counts, null percentages, and detect anomalies
Configure Alerts
Get notified when freshness SLAs are violated
Report Badges
Embed freshness status in dashboards
Best Practices
Reduce alert fatigue
