| name | monitoring |
| description | Monitor Vercel deployments, debug production issues, check logs, and understand logging patterns. Use when investigating errors, checking deployment logs, debugging failures, or improving observability. |
| allowed-tools | Bash, Read, Edit, Write, Grep |
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
vercel logs <deployment-url>
vercel logs <deployment-url> --follow
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:
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:
console.log("[WORKFLOW] Posts cache invalidated");
console.log("[COE]", coeResult);
console.error("Error getting post view count:", error);
console.error("Download failed:", { url, status });
Log Prefixes Used:
[WORKFLOW] - Workflow execution events
[COE] - COE data processing
[CARS] - Car data processing
Health Checks
The app has a health check endpoint at /api/health:
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:
import { FatalError, RetryableError } from "workflow";
if (message.includes("429")) {
throw new RetryableError("AI rate limited", { retryAfter: "1m" });
}
if (message.includes("401") || message.includes("403")) {
throw new FatalError("AI authentication failed");
}
Error Types:
RetryableError - Temporary failures (rate limits, network issues)
FatalError - Permanent failures (auth errors, invalid config)
Debugging Production Issues
1. Check Vercel Logs
vercel ls
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
export const config = {
maxDuration: 60,
};
Cron Job Monitoring
Workflows are triggered by Vercel Cron:
{
"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
[CONTEXT] prefix for easy filtering
- 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