Backend monitoring
Monitor Vercel deployments, debug production issues, check logs, and understand logging patterns. Use when investigating errors, checking deployment logs, debugging failures, or improving observability.
install
source · Clone the upstream repo
git clone https://github.com/sgcarstrends/sgcarstrends
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sgcarstrends/sgcarstrends "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/monitoring" ~/.claude/skills/sgcarstrends-backend-monitoring && rm -rf "$T"
manifest:
.claude/skills/monitoring/SKILL.mdsource content
Monitoring Skill
Monitor Vercel deployments, check logs, and track errors.
Viewing Logs
Vercel Dashboard
- Go to Vercel Dashboard → Project → Logs
- Filter by:
- Function logs
- Build logs
- Edge function logs
- Time range
Vercel CLI
# View recent logs vercel logs <deployment-url> # Stream logs in real-time vercel logs <deployment-url> --follow # Filter by status vercel logs <deployment-url> --status error
Vercel Analytics
Web Vitals
Monitor in Vercel Dashboard → Analytics:
- LCP (Largest Contentful Paint)
- FID (First Input Delay)
- CLS (Cumulative Layout Shift)
- TTFB (Time to First Byte)
Speed Insights
Already integrated in the app:
// apps/web/src/app/layout.tsx import { Analytics } from "@vercel/analytics/next"; import { SpeedInsights } from "@vercel/speed-insights/next"; const RootLayout = ({ children }) => ( <html> <body> {children} <Analytics /> <SpeedInsights /> </body> </html> );
Logging Patterns
The codebase uses standard
console.log/error/warn for logging:
// Workflow logging pattern console.log("[WORKFLOW] Posts cache invalidated"); console.log("[COE]", coeResult); // Error logging pattern console.error("Error getting post view count:", error); console.error("Download failed:", { url, status });
Log Prefixes Used:
- Workflow execution events[WORKFLOW]
- COE data processing[COE]
- Car data processing[CARS]
Health Checks
The app has a health check endpoint at
/api/health:
// apps/web/src/app/api/health/route.ts export const GET = () => { return NextResponse.json( { status: "ok", timestamp: new Date().toISOString() }, { status: 200, headers: { "Cache-Control": "public, s-maxage=60, stale-while-revalidate=300", }, }, ); };
Test health endpoint:
curl -f https://sgcarstrends.com/api/health || echo "Web unhealthy"
Workflow Error Handling
Workflows use Vercel WDK's built-in error handling:
// apps/web/src/workflows/cars/index.ts import { FatalError, RetryableError } from "workflow"; // Retryable errors (will be retried automatically) if (message.includes("429")) { throw new RetryableError("AI rate limited", { retryAfter: "1m" }); } // Fatal errors (will not be retried) if (message.includes("401") || message.includes("403")) { throw new FatalError("AI authentication failed"); }
Error Types:
- Temporary failures (rate limits, network issues)RetryableError
- Permanent failures (auth errors, invalid config)FatalError
Debugging Production Issues
1. Check Vercel Logs
# Get deployment URL vercel ls # Check logs vercel logs <url> --follow
2. Check Build Output
- Vercel Dashboard → Deployments
- Click on deployment
- View "Build Logs"
3. Test Endpoint
curl -v https://sgcarstrends.com/api/health
4. Check Function Runtime
Vercel Dashboard → Project → Settings → Functions
- View runtime version
- Check memory allocation
- Review timeout settings
Common Issues
| Issue | Investigation | Solution |
|---|---|---|
| High latency | Check Vercel Analytics, slow queries | Optimize queries, add caching |
| Build failures | Check build logs | Fix build errors, update dependencies |
| Function timeout | Check function logs | Optimize code, increase timeout |
| Cold starts | Check function invocations | Consider edge functions |
| Workflow failures | Check Vercel logs for workflow ID | Review error type, check retries |
Vercel Function Configuration
// API route config export const config = { maxDuration: 60, // seconds (Pro plan allows up to 60s) };
Cron Job Monitoring
Workflows are triggered by Vercel Cron:
// apps/web/vercel.json { "crons": [ { "path": "/api/workflows/cars", "schedule": "0 10 * * *" }, { "path": "/api/workflows/coe", "schedule": "0 10 * * *" }, { "path": "/api/workflows/deregistrations", "schedule": "0 10 * * *" } ] }
Monitor cron executions:
- Vercel Dashboard → Project → Cron Jobs
- View execution history and status
- Check logs for each execution
Best Practices
- Use Log Prefixes: Add
prefix for easy filtering[CONTEXT] - Log Meaningful Data: Include relevant context (month, record counts)
- Don't Log Secrets: Never log passwords, tokens, API keys
- Use Vercel Analytics: Monitor performance metrics
- Check Cron Jobs: Monitor scheduled workflow executions
References
- Vercel Logs: https://vercel.com/docs/observability/runtime-logs
- Vercel Analytics: https://vercel.com/docs/analytics
- Speed Insights: https://vercel.com/docs/speed-insights
- Vercel Cron Jobs: https://vercel.com/docs/cron-jobs