@intentsolutionsio/vercel-pack 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +67 -44
  3. package/package.json +4 -4
  4. package/skills/vercel-advanced-troubleshooting/SKILL.md +185 -195
  5. package/skills/vercel-advanced-troubleshooting/references/errors.md +11 -0
  6. package/skills/vercel-advanced-troubleshooting/references/evidence-collection-framework.md +34 -0
  7. package/skills/vercel-advanced-troubleshooting/references/examples.md +11 -0
  8. package/skills/vercel-advanced-troubleshooting/references/systematic-isolation.md +56 -0
  9. package/skills/vercel-advanced-troubleshooting/references/timing-analysis.md +35 -0
  10. package/skills/vercel-architecture-variants/SKILL.md +227 -216
  11. package/skills/vercel-architecture-variants/references/errors.md +11 -0
  12. package/skills/vercel-architecture-variants/references/examples.md +12 -0
  13. package/skills/vercel-architecture-variants/references/variant-a-monolith-(simple).md +44 -0
  14. package/skills/vercel-architecture-variants/references/variant-b-service-layer-(moderate).md +72 -0
  15. package/skills/vercel-architecture-variants/references/variant-c-microservice-(complex).md +81 -0
  16. package/skills/vercel-ci-integration/SKILL.md +183 -73
  17. package/skills/vercel-ci-integration/references/errors.md +10 -0
  18. package/skills/vercel-ci-integration/references/examples.md +36 -0
  19. package/skills/vercel-ci-integration/references/implementation.md +54 -0
  20. package/skills/vercel-common-errors/SKILL.md +164 -60
  21. package/skills/vercel-common-errors/references/errors.md +53 -0
  22. package/skills/vercel-common-errors/references/examples.md +23 -0
  23. package/skills/vercel-cost-tuning/SKILL.md +158 -145
  24. package/skills/vercel-cost-tuning/references/cost-estimation.md +34 -0
  25. package/skills/vercel-cost-tuning/references/cost-reduction-strategies.md +40 -0
  26. package/skills/vercel-cost-tuning/references/errors.md +11 -0
  27. package/skills/vercel-cost-tuning/references/examples.md +15 -0
  28. package/skills/vercel-data-handling/SKILL.md +202 -155
  29. package/skills/vercel-data-handling/references/errors.md +11 -0
  30. package/skills/vercel-data-handling/references/examples.md +27 -0
  31. package/skills/vercel-data-handling/references/implementation.md +223 -0
  32. package/skills/vercel-debug-bundle/SKILL.md +163 -67
  33. package/skills/vercel-debug-bundle/references/errors.md +12 -0
  34. package/skills/vercel-debug-bundle/references/examples.md +24 -0
  35. package/skills/vercel-debug-bundle/references/implementation.md +54 -0
  36. package/skills/vercel-deploy-integration/SKILL.md +163 -156
  37. package/skills/vercel-deploy-integration/references/errors.md +11 -0
  38. package/skills/vercel-deploy-integration/references/examples.md +21 -0
  39. package/skills/vercel-deploy-integration/references/google-cloud-run.md +36 -0
  40. package/skills/vercel-deploy-integration/references/vercel-deployment.md +35 -0
  41. package/skills/vercel-deploy-preview/SKILL.md +164 -39
  42. package/skills/vercel-edge-functions/SKILL.md +185 -37
  43. package/skills/vercel-enterprise-rbac/SKILL.md +185 -170
  44. package/skills/vercel-enterprise-rbac/references/errors.md +11 -0
  45. package/skills/vercel-enterprise-rbac/references/examples.md +12 -0
  46. package/skills/vercel-enterprise-rbac/references/role-implementation.md +33 -0
  47. package/skills/vercel-enterprise-rbac/references/sso-integration.md +35 -0
  48. package/skills/vercel-hello-world/SKILL.md +141 -55
  49. package/skills/vercel-incident-runbook/SKILL.md +186 -138
  50. package/skills/vercel-incident-runbook/references/errors.md +11 -0
  51. package/skills/vercel-incident-runbook/references/examples.md +10 -0
  52. package/skills/vercel-incident-runbook/references/immediate-actions-by-error-type.md +41 -0
  53. package/skills/vercel-install-auth/SKILL.md +130 -53
  54. package/skills/vercel-known-pitfalls/SKILL.md +235 -233
  55. package/skills/vercel-known-pitfalls/references/errors.md +11 -0
  56. package/skills/vercel-known-pitfalls/references/examples.md +12 -0
  57. package/skills/vercel-load-scale/SKILL.md +197 -204
  58. package/skills/vercel-load-scale/references/capacity-planning.md +47 -0
  59. package/skills/vercel-load-scale/references/errors.md +11 -0
  60. package/skills/vercel-load-scale/references/examples.md +26 -0
  61. package/skills/vercel-load-scale/references/load-testing-with-k6.md +59 -0
  62. package/skills/vercel-load-scale/references/scaling-patterns.md +65 -0
  63. package/skills/vercel-local-dev-loop/SKILL.md +159 -71
  64. package/skills/vercel-local-dev-loop/references/errors.md +11 -0
  65. package/skills/vercel-local-dev-loop/references/examples.md +21 -0
  66. package/skills/vercel-local-dev-loop/references/implementation.md +60 -0
  67. package/skills/vercel-migration-deep-dive/SKILL.md +202 -187
  68. package/skills/vercel-migration-deep-dive/references/errors.md +11 -0
  69. package/skills/vercel-migration-deep-dive/references/examples.md +12 -0
  70. package/skills/vercel-migration-deep-dive/references/implementation-plan.md +80 -0
  71. package/skills/vercel-migration-deep-dive/references/pre-migration-assessment.md +39 -0
  72. package/skills/vercel-multi-env-setup/SKILL.md +167 -164
  73. package/skills/vercel-multi-env-setup/references/configuration-structure.md +59 -0
  74. package/skills/vercel-multi-env-setup/references/errors.md +11 -0
  75. package/skills/vercel-multi-env-setup/references/examples.md +11 -0
  76. package/skills/vercel-observability/SKILL.md +205 -195
  77. package/skills/vercel-observability/references/alert-configuration.md +40 -0
  78. package/skills/vercel-observability/references/errors.md +11 -0
  79. package/skills/vercel-observability/references/examples.md +13 -0
  80. package/skills/vercel-observability/references/metrics-collection.md +65 -0
  81. package/skills/vercel-performance-tuning/SKILL.md +212 -156
  82. package/skills/vercel-performance-tuning/references/caching-strategy.md +49 -0
  83. package/skills/vercel-performance-tuning/references/errors.md +11 -0
  84. package/skills/vercel-performance-tuning/references/examples.md +13 -0
  85. package/skills/vercel-policy-guardrails/SKILL.md +276 -193
  86. package/skills/vercel-policy-guardrails/references/errors.md +11 -0
  87. package/skills/vercel-policy-guardrails/references/eslint-rules.md +46 -0
  88. package/skills/vercel-policy-guardrails/references/examples.md +10 -0
  89. package/skills/vercel-prod-checklist/SKILL.md +219 -94
  90. package/skills/vercel-prod-checklist/references/errors.md +11 -0
  91. package/skills/vercel-prod-checklist/references/examples.md +25 -0
  92. package/skills/vercel-prod-checklist/references/implementation.md +60 -0
  93. package/skills/vercel-rate-limits/SKILL.md +187 -100
  94. package/skills/vercel-rate-limits/references/errors.md +11 -0
  95. package/skills/vercel-rate-limits/references/examples.md +46 -0
  96. package/skills/vercel-rate-limits/references/implementation.md +66 -0
  97. package/skills/vercel-reference-architecture/SKILL.md +226 -180
  98. package/skills/vercel-reference-architecture/references/errors.md +11 -0
  99. package/skills/vercel-reference-architecture/references/examples.md +13 -0
  100. package/skills/vercel-reference-architecture/references/key-components.md +65 -0
  101. package/skills/vercel-reference-architecture/references/project-structure.md +40 -0
  102. package/skills/vercel-reliability-patterns/SKILL.md +272 -211
  103. package/skills/vercel-reliability-patterns/references/circuit-breaker.md +36 -0
  104. package/skills/vercel-reliability-patterns/references/dead-letter-queue.md +48 -0
  105. package/skills/vercel-reliability-patterns/references/errors.md +11 -0
  106. package/skills/vercel-reliability-patterns/references/examples.md +11 -0
  107. package/skills/vercel-reliability-patterns/references/idempotency-keys.md +36 -0
  108. package/skills/vercel-sdk-patterns/SKILL.md +264 -92
  109. package/skills/vercel-sdk-patterns/references/errors.md +11 -0
  110. package/skills/vercel-sdk-patterns/references/examples.md +45 -0
  111. package/skills/vercel-sdk-patterns/references/implementation.md +67 -0
  112. package/skills/vercel-security-basics/SKILL.md +186 -96
  113. package/skills/vercel-security-basics/references/errors.md +10 -0
  114. package/skills/vercel-security-basics/references/examples.md +70 -0
  115. package/skills/vercel-security-basics/references/implementation.md +39 -0
  116. package/skills/vercel-upgrade-migration/SKILL.md +167 -67
  117. package/skills/vercel-upgrade-migration/references/errors.md +10 -0
  118. package/skills/vercel-upgrade-migration/references/examples.md +51 -0
  119. package/skills/vercel-upgrade-migration/references/implementation.md +29 -0
  120. package/skills/vercel-webhooks-events/SKILL.md +208 -132
  121. package/skills/vercel-webhooks-events/references/errors.md +11 -0
  122. package/skills/vercel-webhooks-events/references/event-handler-pattern.md +37 -0
  123. package/skills/vercel-webhooks-events/references/examples.md +16 -0
  124. package/skills/vercel-webhooks-events/references/signature-verification.md +33 -0
@@ -1,250 +1,260 @@
1
1
  ---
2
2
  name: vercel-observability
3
- description: |
4
- Set up comprehensive observability for Vercel integrations with metrics, traces, and alerts.
5
- Use when implementing monitoring for Vercel operations, setting up dashboards,
6
- or configuring alerting for Vercel integration health.
3
+ description: 'Set up Vercel observability with runtime logs, analytics, log drains,
4
+ and OpenTelemetry tracing.
5
+
6
+ Use when implementing monitoring for Vercel deployments, setting up log drains,
7
+
8
+ or configuring alerting for function errors and performance.
9
+
7
10
  Trigger with phrases like "vercel monitoring", "vercel metrics",
8
- "vercel observability", "monitor vercel", "vercel alerts", "vercel tracing".
9
- allowed-tools: Read, Write, Edit
11
+
12
+ "vercel observability", "vercel logs", "vercel alerts", "vercel tracing".
13
+
14
+ '
15
+ allowed-tools: Read, Write, Edit, Bash(vercel:*), Bash(curl:*)
10
16
  version: 1.0.0
11
17
  license: MIT
12
18
  author: Jeremy Longshore <jeremy@intentsolutions.io>
19
+ tags:
20
+ - saas
21
+ - vercel
22
+ - monitoring
23
+ - observability
24
+ - logging
25
+ compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw
13
26
  ---
14
-
15
27
  # Vercel Observability
16
28
 
17
29
  ## Overview
18
- Set up comprehensive observability for Vercel integrations.
30
+
31
+ Configure comprehensive observability for Vercel deployments using built-in analytics, runtime logs, log drains to external providers, OpenTelemetry integration, and custom instrumentation. Covers the full observability stack from function-level metrics to end-user experience monitoring.
19
32
 
20
33
  ## Prerequisites
21
- - Prometheus or compatible metrics backend
22
- - OpenTelemetry SDK installed
23
- - Grafana or similar dashboarding tool
24
- - AlertManager configured
25
34
 
26
- ## Metrics Collection
35
+ - Vercel Pro or Enterprise plan (for log drains and extended retention)
36
+ - External logging provider (Datadog, Axiom, Sentry) — optional
37
+ - OpenTelemetry SDK — optional
27
38
 
28
- ### Key Metrics
29
- | Metric | Type | Description |
30
- |--------|------|-------------|
31
- | `vercel_requests_total` | Counter | Total API requests |
32
- | `vercel_request_duration_seconds` | Histogram | Request latency |
33
- | `vercel_errors_total` | Counter | Error count by type |
34
- | `vercel_rate_limit_remaining` | Gauge | Rate limit headroom |
39
+ ## Instructions
40
+
41
+ ### Step 1: Enable Vercel Analytics
42
+
43
+ In the Vercel dashboard:
35
44
 
36
- ### Prometheus Metrics
45
+ 1. Go to **Analytics** tab
46
+ 2. Enable **Web Analytics** (Core Web Vitals, page views)
47
+ 3. Enable **Speed Insights** (real user performance data)
37
48
 
38
49
  ```typescript
39
- import { Registry, Counter, Histogram, Gauge } from 'prom-client';
50
+ // For Next.js add the analytics component
51
+ // src/app/layout.tsx
52
+ import { Analytics } from '@vercel/analytics/react';
53
+ import { SpeedInsights } from '@vercel/speed-insights/next';
54
+
55
+ export default function RootLayout({ children }) {
56
+ return (
57
+ <html>
58
+ <body>
59
+ {children}
60
+ <Analytics />
61
+ <SpeedInsights />
62
+ </body>
63
+ </html>
64
+ );
65
+ }
66
+ ```
40
67
 
41
- const registry = new Registry();
68
+ Install: `npm install @vercel/analytics @vercel/speed-insights`
42
69
 
43
- const requestCounter = new Counter({
44
- name: 'vercel_requests_total',
45
- help: 'Total Vercel API requests',
46
- labelNames: ['method', 'status'],
47
- registers: [registry],
48
- });
70
+ ### Step 2: Runtime Logs
49
71
 
50
- const requestDuration = new Histogram({
51
- name: 'vercel_request_duration_seconds',
52
- help: 'Vercel request duration',
53
- labelNames: ['method'],
54
- buckets: [0.05, 0.1, 0.25, 0.5, 1, 2.5, 5],
55
- registers: [registry],
56
- });
72
+ ```bash
73
+ # View runtime logs via CLI
74
+ vercel logs https://my-app.vercel.app --follow
57
75
 
58
- const errorCounter = new Counter({
59
- name: 'vercel_errors_total',
60
- help: 'Vercel errors by type',
61
- labelNames: ['error_type'],
62
- registers: [registry],
63
- });
76
+ # Filter by level
77
+ vercel logs https://my-app.vercel.app --level=error
78
+
79
+ # View logs via API
80
+ curl -s -H "Authorization: Bearer $VERCEL_TOKEN" \
81
+ "https://api.vercel.com/v2/deployments/dpl_xxx/events?limit=50&direction=backward" \
82
+ | jq '.[] | {timestamp: .created, level: .level, message: .text}'
64
83
  ```
65
84
 
66
- ### Instrumented Client
85
+ Runtime logs include:
86
+
87
+ - Function invocation start/end with duration
88
+ - `console.log/warn/error` output from functions
89
+ - Edge Middleware execution logs
90
+ - HTTP request/response metadata
91
+
92
+ ### Step 3: Structured Logging in Functions
67
93
 
68
94
  ```typescript
69
- async function instrumentedRequest<T>(
70
- method: string,
71
- operation: () => Promise<T>
72
- ): Promise<T> {
73
- const timer = requestDuration.startTimer({ method });
95
+ // lib/logger.ts — structured JSON logging
96
+ interface LogEntry {
97
+ level: 'info' | 'warn' | 'error';
98
+ message: string;
99
+ requestId?: string;
100
+ duration?: number;
101
+ [key: string]: unknown;
102
+ }
74
103
 
75
- try {
76
- const result = await operation();
77
- requestCounter.inc({ method, status: 'success' });
78
- return result;
79
- } catch (error: any) {
80
- requestCounter.inc({ method, status: 'error' });
81
- errorCounter.inc({ error_type: error.code || 'unknown' });
82
- throw error;
83
- } finally {
84
- timer();
104
+ export function log(entry: LogEntry): void {
105
+ // Vercel captures console output as runtime logs
106
+ const output = JSON.stringify({
107
+ ...entry,
108
+ timestamp: new Date().toISOString(),
109
+ region: process.env.VERCEL_REGION,
110
+ env: process.env.VERCEL_ENV,
111
+ });
112
+
113
+ switch (entry.level) {
114
+ case 'error': console.error(output); break;
115
+ case 'warn': console.warn(output); break;
116
+ default: console.log(output);
85
117
  }
86
118
  }
87
- ```
88
-
89
- ## Distributed Tracing
90
119
 
91
- ### OpenTelemetry Setup
120
+ // Usage in API route:
121
+ export async function GET(request: Request) {
122
+ const requestId = crypto.randomUUID();
123
+ const start = Date.now();
92
124
 
93
- ```typescript
94
- import { trace, SpanStatusCode } from '@opentelemetry/api';
95
-
96
- const tracer = trace.getTracer('vercel-client');
97
-
98
- async function tracedVercelCall<T>(
99
- operationName: string,
100
- operation: () => Promise<T>
101
- ): Promise<T> {
102
- return tracer.startActiveSpan(`vercel.${operationName}`, async (span) => {
103
- try {
104
- const result = await operation();
105
- span.setStatus({ code: SpanStatusCode.OK });
106
- return result;
107
- } catch (error: any) {
108
- span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
109
- span.recordException(error);
110
- throw error;
111
- } finally {
112
- span.end();
113
- }
114
- });
125
+ try {
126
+ const data = await fetchData();
127
+ log({ level: 'info', message: 'Fetched data', requestId, duration: Date.now() - start });
128
+ return Response.json(data);
129
+ } catch (error) {
130
+ log({ level: 'error', message: 'Data fetch failed', requestId, error: String(error) });
131
+ return Response.json({ error: 'Internal error', requestId }, { status: 500 });
132
+ }
115
133
  }
116
134
  ```
117
135
 
118
- ## Logging Strategy
136
+ ### Step 4: Log Drains (External Providers)
137
+
138
+ Configure log drains to send all Vercel logs to your logging provider:
139
+
140
+ In dashboard: **Settings > Log Drains > Add**
141
+
142
+ Supported providers:
143
+
144
+ | Provider | Type | Setup |
145
+ |----------|------|-------|
146
+ | Datadog | HTTP | API key + site URL |
147
+ | Axiom | HTTP | API token + dataset |
148
+ | Sentry | HTTP | DSN |
149
+ | Custom | HTTP/NDJSON | Any HTTPS endpoint |
150
+ | Grafana Loki | HTTP | Push URL + auth |
151
+
152
+ Log drain delivers:
153
+
154
+ - **Runtime logs**: function invocations, console output
155
+ - **Build logs**: build step output, warnings, errors
156
+ - **Static logs**: CDN access logs (edge)
157
+ - **Firewall logs**: WAF events
158
+
159
+ ```bash
160
+ # Create a log drain via API
161
+ curl -X POST "https://api.vercel.com/v2/integrations/log-drains" \
162
+ -H "Authorization: Bearer $VERCEL_TOKEN" \
163
+ -H "Content-Type: application/json" \
164
+ -d '{
165
+ "name": "my-datadog-drain",
166
+ "type": "json",
167
+ "url": "https://http-intake.logs.datadoghq.com/api/v2/logs",
168
+ "headers": {"DD-API-KEY": "your-datadog-api-key"},
169
+ "sources": ["lambda", "edge", "build", "static"]
170
+ }'
171
+ ```
119
172
 
120
- ### Structured Logging
173
+ ### Step 5: OpenTelemetry Integration
121
174
 
122
175
  ```typescript
123
- import pino from 'pino';
124
-
125
- const logger = pino({
126
- name: 'vercel',
127
- level: process.env.LOG_LEVEL || 'info',
128
- });
129
-
130
- function logVercelOperation(
131
- operation: string,
132
- data: Record<string, any>,
133
- duration: number
134
- ) {
135
- logger.info({
136
- service: 'vercel',
137
- operation,
138
- duration_ms: duration,
139
- ...data,
176
+ // instrumentation.ts (Next.js 13.4+)
177
+ import { NodeSDK } from '@opentelemetry/sdk-node';
178
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
179
+ import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
180
+
181
+ export function register() {
182
+ const sdk = new NodeSDK({
183
+ traceExporter: new OTLPTraceExporter({
184
+ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,
185
+ }),
186
+ instrumentations: [getNodeAutoInstrumentations()],
187
+ serviceName: 'my-vercel-app',
140
188
  });
189
+ sdk.start();
141
190
  }
142
191
  ```
143
192
 
144
- ## Alert Configuration
145
-
146
- ### Prometheus AlertManager Rules
147
-
148
- ```yaml
149
- # vercel_alerts.yaml
150
- groups:
151
- - name: vercel_alerts
152
- rules:
153
- - alert: VercelHighErrorRate
154
- expr: |
155
- rate(vercel_errors_total[5m]) /
156
- rate(vercel_requests_total[5m]) > 0.05
157
- for: 5m
158
- labels:
159
- severity: warning
160
- annotations:
161
- summary: "Vercel error rate > 5%"
162
-
163
- - alert: VercelHighLatency
164
- expr: |
165
- histogram_quantile(0.95,
166
- rate(vercel_request_duration_seconds_bucket[5m])
167
- ) > 2
168
- for: 5m
169
- labels:
170
- severity: warning
171
- annotations:
172
- summary: "Vercel P95 latency > 2s"
173
-
174
- - alert: VercelDown
175
- expr: up{job="vercel"} == 0
176
- for: 1m
177
- labels:
178
- severity: critical
179
- annotations:
180
- summary: "Vercel integration is down"
181
- ```
182
-
183
- ## Dashboard
184
-
185
- ### Grafana Panel Queries
186
-
187
- ```json
188
- {
189
- "panels": [
190
- {
191
- "title": "Vercel Request Rate",
192
- "targets": [{
193
- "expr": "rate(vercel_requests_total[5m])"
194
- }]
195
- },
196
- {
197
- "title": "Vercel Latency P50/P95/P99",
198
- "targets": [{
199
- "expr": "histogram_quantile(0.5, rate(vercel_request_duration_seconds_bucket[5m]))"
200
- }]
201
- }
202
- ]
203
- }
193
+ ```javascript
194
+ // next.config.js
195
+ module.exports = {
196
+ experimental: {
197
+ instrumentationHook: true,
198
+ },
199
+ };
204
200
  ```
205
201
 
206
- ## Instructions
202
+ ### Step 6: Error Tracking with Sentry
207
203
 
208
- ### Step 1: Set Up Metrics Collection
209
- Implement Prometheus counters, histograms, and gauges for key operations.
204
+ ```bash
205
+ npx @sentry/wizard@latest -i nextjs
206
+ ```
210
207
 
211
- ### Step 2: Add Distributed Tracing
212
- Integrate OpenTelemetry for end-to-end request tracing.
208
+ ```typescript
209
+ // sentry.client.config.ts
210
+ import * as Sentry from '@sentry/nextjs';
211
+
212
+ Sentry.init({
213
+ dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
214
+ environment: process.env.VERCEL_ENV,
215
+ release: process.env.VERCEL_GIT_COMMIT_SHA,
216
+ tracesSampleRate: process.env.VERCEL_ENV === 'production' ? 0.1 : 1.0,
217
+ });
218
+ ```
213
219
 
214
- ### Step 3: Configure Structured Logging
215
- Set up JSON logging with consistent field names.
220
+ ## Monitoring Dashboard Checklist
216
221
 
217
- ### Step 4: Create Alert Rules
218
- Define Prometheus alerting rules for error rates and latency.
222
+ | Metric | Source | Alert Threshold |
223
+ |--------|--------|----------------|
224
+ | Error rate | Runtime logs | > 1% of requests |
225
+ | P95 function latency | Vercel Analytics | > 2s |
226
+ | Cold start frequency | Runtime logs | > 20% of invocations |
227
+ | Build success rate | Build logs | Any failure |
228
+ | Core Web Vitals (LCP) | Speed Insights | > 2.5s |
229
+ | Edge cache hit rate | Static logs | < 80% |
219
230
 
220
231
  ## Output
221
- - Metrics collection enabled
222
- - Distributed tracing configured
223
- - Structured logging implemented
224
- - Alert rules deployed
225
232
 
226
- ## Error Handling
227
- | Issue | Cause | Solution |
228
- |-------|-------|----------|
229
- | Missing metrics | No instrumentation | Wrap client calls |
230
- | Trace gaps | Missing propagation | Check context headers |
231
- | Alert storms | Wrong thresholds | Tune alert rules |
232
- | High cardinality | Too many labels | Reduce label values |
233
+ - Vercel Analytics and Speed Insights enabled
234
+ - Structured JSON logging in all functions
235
+ - Log drains configured to external provider
236
+ - Error tracking with Sentry or equivalent
237
+ - OpenTelemetry tracing for distributed systems
233
238
 
234
- ## Examples
239
+ ## Error Handling
235
240
 
236
- ### Quick Metrics Endpoint
237
- ```typescript
238
- app.get('/metrics', async (req, res) => {
239
- res.set('Content-Type', registry.contentType);
240
- res.send(await registry.metrics());
241
- });
242
- ```
241
+ | Error | Cause | Solution |
242
+ |-------|-------|----------|
243
+ | Logs missing | Log retention expired (1hr free, 30d with Plus) | Enable log drains for persistence |
244
+ | Analytics not tracking | Missing `<Analytics />` component | Add to root layout |
245
+ | Log drain not receiving | Wrong URL or auth headers | Test the endpoint directly with curl |
246
+ | Sentry not capturing errors | DSN not set in production env | Add `NEXT_PUBLIC_SENTRY_DSN` to Production scope |
247
+ | OTEL traces missing | instrumentation.ts not loaded | Enable `instrumentationHook` in next.config.js |
243
248
 
244
249
  ## Resources
245
- - [Prometheus Best Practices](https://prometheus.io/docs/practices/naming/)
246
- - [OpenTelemetry Documentation](https://opentelemetry.io/docs/)
247
- - [Vercel Observability Guide](https://vercel.com/docs/observability)
250
+
251
+ - [Vercel Observability](https://vercel.com/docs/observability)
252
+ - [Runtime Logs](https://vercel.com/docs/logs/runtime)
253
+ - [Vercel Analytics](https://vercel.com/docs/analytics)
254
+ - [Speed Insights](https://vercel.com/docs/speed-insights)
255
+ - [Log Drains](https://vercel.com/docs/observability/log-drains)
256
+ - [OpenTelemetry + Next.js](https://nextjs.org/docs/app/building-your-application/optimizing/open-telemetry)
248
257
 
249
258
  ## Next Steps
250
- For incident response, see `vercel-incident-runbook`.
259
+
260
+ For incident response, see `vercel-incident-runbook`.
@@ -0,0 +1,40 @@
1
+ # Alert Configuration
2
+
3
+ ## Alert Configuration
4
+
5
+ ### Prometheus AlertManager Rules
6
+
7
+ ```yaml
8
+ # vercel_alerts.yaml
9
+ groups:
10
+ - name: vercel_alerts
11
+ rules:
12
+ - alert: VercelHighErrorRate
13
+ expr: |
14
+ rate(vercel_errors_total[5m]) /
15
+ rate(vercel_requests_total[5m]) > 0.05
16
+ for: 5m
17
+ labels:
18
+ severity: warning
19
+ annotations:
20
+ summary: "Vercel error rate > 5%"
21
+
22
+ - alert: VercelHighLatency
23
+ expr: |
24
+ histogram_quantile(0.95,
25
+ rate(vercel_request_duration_seconds_bucket[5m])
26
+ ) > 2
27
+ for: 5m
28
+ labels:
29
+ severity: warning
30
+ annotations:
31
+ summary: "Vercel P95 latency > 2s"
32
+
33
+ - alert: VercelDown
34
+ expr: up{job="vercel"} == 0
35
+ for: 1m
36
+ labels:
37
+ severity: critical
38
+ annotations:
39
+ summary: "Vercel integration is down"
40
+ ```
@@ -0,0 +1,11 @@
1
+ # Error Handling Reference
2
+
3
+ | Issue | Cause | Solution |
4
+ |-------|-------|----------|
5
+ | Missing metrics | No instrumentation | Wrap client calls |
6
+ | Trace gaps | Missing propagation | Check context headers |
7
+ | Alert storms | Wrong thresholds | Tune alert rules |
8
+ | High cardinality | Too many labels | Reduce label values |
9
+
10
+ ---
11
+ *[Tons of Skills](https://tonsofskills.com) by [Intent Solutions](https://intentsolutions.io) | [jeremylongshore.com](https://jeremylongshore.com)*
@@ -0,0 +1,13 @@
1
+ ## Examples
2
+
3
+ ### Quick Metrics Endpoint
4
+
5
+ ```typescript
6
+ app.get('/metrics', async (req, res) => {
7
+ res.set('Content-Type', registry.contentType);
8
+ res.send(await registry.metrics());
9
+ });
10
+ ```
11
+
12
+ ---
13
+ *[Tons of Skills](https://tonsofskills.com) by [Intent Solutions](https://intentsolutions.io) | [jeremylongshore.com](https://jeremylongshore.com)*
@@ -0,0 +1,65 @@
1
+ # Metrics Collection
2
+
3
+ ## Metrics Collection
4
+
5
+ ### Key Metrics
6
+
7
+ | Metric | Type | Description |
8
+ |--------|------|-------------|
9
+ | `vercel_requests_total` | Counter | Total API requests |
10
+ | `vercel_request_duration_seconds` | Histogram | Request latency |
11
+ | `vercel_errors_total` | Counter | Error count by type |
12
+ | `vercel_rate_limit_remaining` | Gauge | Rate limit headroom |
13
+
14
+ ### Prometheus Metrics
15
+
16
+ ```typescript
17
+ import { Registry, Counter, Histogram, Gauge } from 'prom-client';
18
+
19
+ const registry = new Registry();
20
+
21
+ const requestCounter = new Counter({
22
+ name: 'vercel_requests_total',
23
+ help: 'Total Vercel API requests',
24
+ labelNames: ['method', 'status'],
25
+ registers: [registry],
26
+ });
27
+
28
+ const requestDuration = new Histogram({
29
+ name: 'vercel_request_duration_seconds',
30
+ help: 'Vercel request duration',
31
+ labelNames: ['method'],
32
+ buckets: [0.05, 0.1, 0.25, 0.5, 1, 2.5, 5],
33
+ registers: [registry],
34
+ });
35
+
36
+ const errorCounter = new Counter({
37
+ name: 'vercel_errors_total',
38
+ help: 'Vercel errors by type',
39
+ labelNames: ['error_type'],
40
+ registers: [registry],
41
+ });
42
+ ```
43
+
44
+ ### Instrumented Client
45
+
46
+ ```typescript
47
+ async function instrumentedRequest<T>(
48
+ method: string,
49
+ operation: () => Promise<T>
50
+ ): Promise<T> {
51
+ const timer = requestDuration.startTimer({ method });
52
+
53
+ try {
54
+ const result = await operation();
55
+ requestCounter.inc({ method, status: 'success' });
56
+ return result;
57
+ } catch (error: any) {
58
+ requestCounter.inc({ method, status: 'error' });
59
+ errorCounter.inc({ error_type: error.code || 'unknown' });
60
+ throw error;
61
+ } finally {
62
+ timer();
63
+ }
64
+ }
65
+ ```