Outcome
By the end of this lesson, you will be able to read activity-log signals, distinguish activity-data from metrics-data, and confirm abandonment of stopped or rarely-used resources before action.
| Tier | Engineer |
| JTBD | ”Confirm that a recommendation’s target resource is truly abandoned before terminating: using cloud activity logs as a second source of truth.” |
| Personas | Platform Engineer · SRE · FinOps Engineer |
| Prerequisites | M2.1 · M2.2.L1 |
| Time | 9 minutes |
| Bloom verb | Read (Apply), Distinguish (Analyze), Confirm (Evaluate) |
1. Concept
Monitoring tells you how hard something is working. Activity logs tell you what has been done to it, and by whom.
The two can disagree in both directions. A stopped machine reports 0% processor use and may still be getting API calls against it, usually from monitoring tools. A Kubernetes service can look busy in monitoring while serving nobody.
The Recent Activity tab in the evidence panel shows operations against the resource: pulled from CloudTrail (AWS) / Cloud Logging (GCP) / Azure Activity Log via the daily activity-sync cron.
TWO DIFFERENT QUESTIONS:
METRICS: "What did the resource do?" CPU, memory, network, IOPS Resource's behavior
ACTIVITY: "What happened TO the resource?" Operations: Describe, Modify, Start, Stop, Delete, Create snapshot Resource's lifecycle eventsBoth matter; both have different signals.
What activity-sync collects
SOURCE COLLECTS─────────────────────────────────────────────────────────AWS CloudTrail Management events, data events (opt-in)GCP Cloud Logging Audit logs, admin logsAzure Activity Log Resource-level operationsPer resource, the system surfaces per-slot operation counts (24-hour slots typically) over the lookback window (default 30 days).
What the tab shows
RECENT ACTIVITY: i-0abc123def─────────────────────────────────────────────────────────LAST 30 DAYS
Operations breakdown: Describe / Get 1,247 (mostly ZopNight discovery) Start 2 (manual restarts) Stop 2 (matching the 2 starts) Modify 0 Create snapshot 3 (backup pattern) Delete 0
ZERO-ACTIVITY DAYS: 22 of 30 ← clear idle signal
LAST HUMAN OPERATION 2026-04-15 manual stop by ops-team@zopcloud.com (35 days ago)Three signals matter most:
1. ZERO-ACTIVITY DAYS Count of days where nothing happened to the resource 22 of 30 zero-activity days = strong idle signal
2. LAST HUMAN OPERATION When did a human last touch this resource 35 days ago = potentially abandoned 90 days ago = strongly abandoned
3. OPERATION MIX Heavy Describe/Get + zero Start/Stop/Modify = resource exists but isn't being managed Typical pattern for orphansThe three signals compound. All three pointing to abandonment = high confidence.
Why this is different from metrics
EXAMPLE: stopped EC2 instance
METRICS: CPU = 0% (always; it's stopped) Memory = 0% (always; it's stopped) Network = 0% (always; it's stopped)
CONCLUSION FROM METRICS ALONE: Stopped resource using no compute. Idle? Maybe? Could be hot-swap DR target.
ACTIVITY (Recent Activity tab): Last 90 days: 0 human operations Last human stop: 6 months ago (by engineer who left org) Owner tag: empty Snapshot frequency: 0 in 90 days
CONCLUSION FROM ACTIVITY: Nobody has cared about this in 6 months. The original owner is gone. Almost certainly abandoned. Safe to terminate.
COMBINED: Metrics + Activity = high confidence Multiple independent signals agreeing This is the canonical "safe to terminate" patternMetrics tell you the resource’s state. Activity tells you the organization’s relationship with it.
Cross-checking idle recommendations
The Recent Activity tab is the second source of truth for idle rules:
RC-001 (Idle EC2) fires on: 1. status=stopped (cloud state) 2. 30+ days stopped (history)
CROSS-CHECK with Recent Activity: 3. Zero-activity days = how many days untouched 4. Last human operation = who last cared 5. Operation mix = is anyone managing it
TRIPLE CONFIRMATION before terminating: All three signals align → high confidence
TYPICAL HIGH-CONFIDENCE PROFILE: Stopped 47 days Zero-activity 22 of 30 days Last human op: 35 days ago
→ Terminate with snapshot; almost certainly safeThe cross-check is what separates “auto-rem safe” from “needs human review.”
Recent Activity for production resources
FOR RUNNING PRODUCTION RESOURCES: Recent Activity less useful (everything's active) Operations: thousands per day Hard to tease out signals
WHERE THE TAB SHINES: Stopped resources (confirm abandonment vs hot-standby) Rarely-used resources (confirm true low usage) Snapshots and orphans (confirm nobody touched) Cross-account resources (catch un-owned ones)
NOT USEFUL FOR: Detecting traffic patterns (use ALB / CloudFront logs) Performance debugging (use APM / tracing) Security incidents (use proper SIEM)The tab is purpose-built for cost-recovery scenarios. Match the use case.
Activity signal interpretation
SIGNAL INTERPRETATION─────────────────────────────────────────────────────────────Zero-activity 28 of 30 days Likely abandoned (highest signal)Zero-activity 15 of 30 days Sporadic use; investigate patternZero-activity 5 of 30 days Active use; not idle
Last human op <7 days ago Active managementLast human op 30-90 days ago Possible abandonmentLast human op 90+ days ago Probable abandonment
Operations all Describe/Get Read-only; nobody changing itOperations include Modify/Start Active managementRecent Delete Cleanup in progress (don't action)
Owner tag empty + 60+ days quiet Strong abandonmentOwner tag valid + recent op Active managementThe combinations tell different stories. The triple-check is the canonical pattern.
What activity-sync doesn’t capture
NOT IN ACTIVITY-SYNC: Read operations from inside the resource (e.g., RDS query count) Application-level activity (HTTP requests, db queries) Internal service-to-service calls without cloud-API involvement
ACTIVITY-SYNC ONLY CAPTURES: Cloud-API operations (CloudTrail equivalent) Operations that touch the cloud control plane
FOR INTERNAL APPLICATION ACTIVITY: Use app-level monitoring Logs, metrics from the application Not in scope for cost-optimization rule evidenceThe boundary matters: cloud-control-plane activity is in the tab; application-internal activity isn’t.
Frequency / freshness
ACTIVITY-SYNC cron: Daily at 20:50 UTC (fetches the previous day's logs) Higher frequency would hit cloud-log-API rate limits
DATA FRESHNESS: Max ~24 hours stale Cost optimization tolerates this
ALTERNATIVE for real-time activity: CloudTrail console directly (not via ZopNight) For incident response, not cost optimizationThe daily cadence is right for the use case.
2. Demo
A team’s deep audit of a $1,400/mo idle RDS:
SCENARIO: Resource: db-temp-staging (RDS db.r5.large in production account) Original purpose: temporary database for a Q3 2024 project Status: still running (forgotten?) Current cost: $1,400/mo
ZopNight finding: RC-169 (idle resource pattern) Triggers: low utilization + no connections + 30+ day stable state Confidence: needs cross-check before terminating
EVIDENCE: METRICS TAB: DatabaseConnections (30 days): Average: 0 Maximum: 0 Minimum: 0
CPU (30 days): Average: 1.2% (just monitoring overhead) Maximum: 3.4%
EVIDENCE: RECENT ACTIVITY TAB: Last 30 days: 4 operations total - 4 DescribeDBInstances calls (all from ZopNight) - 0 ModifyDBInstance - 0 DeleteDBInstance - 0 connections
Last human operation: 2026-02-08 by jane@zopcloud.com (101 days ago)
Lookup jane@zopcloud.com: Status: offboarded 2026-03-15 Not in current organization
Owner tag: blank (no current owner) Zero-activity days: 30 of 30
CONCLUSION: Database has 0 connections in 30 days No human has touched it in 101 days Original owner gone from org No remaining engineering owner
Multiple data sources confirm: abandoned
ACTION: Apply with high confidence Snapshot-first (default) Terminate Saved: $1,400/mo recurring
TIMELINE: Investigation: 10 minutes Apply: 1 click Annual savings: $16,800 ROI: 100,000:1 on time investedThe Recent Activity tab closed the loop. Without it, the decision would have been ambiguous.
3. Hands-on (5 min)
Verify a stopped-resource recommendation:
□ STEP 1: Open Recommendations Filter: category = idle OR orphan Pick a stopped resource
□ STEP 2: Open Recent Activity tab Operations breakdown: Describe/Get: _____ Start: _____ Stop: _____ Modify: _____ Delete: _____
Zero-activity days: ___ of 30
□ STEP 3: Last human operation Date: __________ Operator: __________ Days ago: _____
□ STEP 4: Cross-check with metrics CPU avg (30 days): _____% Connections (if applicable): _____
□ STEP 5: Decision □ Apply (multiple signals confirm abandonment) □ Snooze (uncertain; investigate further) □ Dismiss (false positive; resource is intentional) Reason: __________10 minutes per high-value recommendation. Confidence in decisions = faster apply rate.
4. Knowledge check
Q1
A stopped EC2 has CPU = 0% and the Recent Activity tab shows 0 human operations in 90 days. Confidence to terminate:
A. High: multiple sources confirm abandonment
B. Low
C. Medium
D. Cannot determine without any more data
Show answer
Correct: A. Safe to apply with snapshot-first. The triple-check (status + age + activity) is the canonical high-confidence pattern. Plus snapshot makes it reversible. Multiple data sources agreeing is the canonical high-confidence signal.
Q2
The Recent Activity tab is most useful for:
A. Real-time monitoring of very busy production resources
B. Performance debugging
C. Confirming abandonment of stopped or rarely-used resources
D. Security incidents
Show answer
Correct: C. Best for low-activity scenarios where metrics alone don’t tell the story. Orphans, idle, archived resources are the sweet spot. Best for low-activity scenarios; metrics tell you behavior, activity tells you lifecycle.
Q3
The activity-sync cron runs at:
A. Every 5 minutes
B. Real-time
C. Only when it is manually triggered by a person somewhere
D. Daily at 20:50 UTC: fetches the previous day’s activity log
Show answer
Correct: D. Raw activity-log API too expensive for higher frequency. Cost optimization tolerates daily cadence. Daily sync. The cadence balances freshness with API rate limits.
5. Apply
Recent Activity is in the Evidence panel on relevant rules. For deeper investigation, Resource detail → Activity tab shows the full operation history.
For your team: combine Metrics drawer (behavior) + Recent Activity tab (lifecycle) for high-confidence apply decisions on idle/orphan recommendations.
Related lessons
- L1: Metrics drawer
- L3: Pricing gap + DLQ (next)
- L4: Evidence vs bill
- M2.1.L5: Reading a recommendation card
Glossary terms touched
Recent Activity tab · Activity-sync · Zero-activity days · Last human operation