> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bronto.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Vercel Dashboards, Monitors and Saved Searches

> The ready-made Bronto templates for Vercel data: three dashboards, seven monitors and six saved searches, what each one counts, and how they attach to your datasets.

Bronto includes ready-made Vercel templates for dashboards, monitors, and saved searches, built on the data from [Vercel's drains](/integrations/vercel-drains.md). Use them as they are, or as a starting point for your own.

## How templates attach to your data

Templates are bound to a dataset's `log_type` tag: `vercel_overview` (log drain), `vercel_speed_insights` and `vercel_web_analytics`. Bronto sets the tag when its Vercel parser recognises the data. That happens after the dataset has received enough events (around 100), so on a quiet project a dashboard can stay empty for a while after you connect.

If a dashboard stays empty, check the dataset's tags under **My Data**. A log drain dataset should carry `log_type: vercel_overview`.

> [!NOTE]
>
> There are three Vercel dashboard templates: Overview (Logs), Web Vitals (Speed Insights), and Web Analytics. **Traces** appear in Explore Traces and [correlate](/integrations/vercel-connector.md#correlate-telemetry-across-drains) with the other drains, but don't have a dashboard template yet.

***

### Dashboards

#### Vercel Overview (Logs drain)

A high-level view of request traffic, error rates, cache behaviour, and firewall activity across your Vercel deployments.

![](https://mintcdn.com/bronto/_MCINHz31aea1WG2/images/integrations/assets/images/vercel-overview-dashboard.png?fit=max\&auto=format\&n=_MCINHz31aea1WG2\&q=85\&s=1312a36617f0a9ddd0279a63f2bf8eea)

| Widget | Type | What it shows |
| - | - | - |
| Total Requests | Query Value | Count of all proxied requests |
| 5xx Error Count | Query Value | Count of server error responses |
| Lambda Crashes | Query Value | Fatal-level events and status code –1 |
| Requests Over Time | Line | Proxied request volume over time |
| Requests by Source | Bar | Breakdown by source (build / edge / lambda / static / …) |
| HTTP Status Breakdown | Bar | Request count grouped by HTTP status code |
| Requests by Method | Bar | Request count grouped by HTTP method |
| Cache State Distribution | Bar | Breakdown by `proxy.vercelCache` (HIT / MISS / STALE / …) |
| Top Error Paths | Top List | Paths with the most 5xx responses |
| Top Edge Regions | Top List | Most active `executionRegion` values |
| Firewall Actions | Bar | Request count grouped by WAF action |
| Top Denied Clients | Top List | Client IPs most frequently denied by the firewall |
| Build Failures Over Time | Line | Build-source error log volume over time |

***

#### Vercel Web Vitals (Speed Insights drain)

Core Web Vitals at P75, segmented by route and device type, using Google's published "good" thresholds.

![](https://mintcdn.com/bronto/_MCINHz31aea1WG2/images/integrations/assets/images/vercel-web-vitals-dashboard.png?fit=max\&auto=format\&n=_MCINHz31aea1WG2\&q=85\&s=a7379f48bfa496ce588d5d94adc3fb37)

| Widget | Type | What it shows |
| - | - | - |
| LCP P75 | Query Value | Largest Contentful Paint at the 75th percentile |
| INP P75 | Query Value | Interaction to Next Paint at the 75th percentile |
| CLS P75 | Query Value | Cumulative Layout Shift at the 75th percentile |
| TTFB P75 | Query Value | Time to First Byte at the 75th percentile |
| Web Vitals Over Time (P75) | Line | P75 trend for all metric types |
| LCP P75 by Route | Top List | Slowest routes by LCP P75 |
| INP P75 by Route | Top List | Slowest routes by INP P75 |
| Device Type Breakdown | Bar | Measurement count by device type |

***

#### Vercel Web Analytics (Web Analytics drain)

Visitor and engagement data from your Vercel Web Analytics drain.

![](https://mintcdn.com/bronto/_MCINHz31aea1WG2/images/integrations/assets/images/vercel-web-analytics-overview-dashboard.png?fit=max\&auto=format\&n=_MCINHz31aea1WG2\&q=85\&s=f202cbaa12b87518867cf991cef94625)

| Widget | Type | What it shows |
| - | - | - |
| Pageviews Over Time | Line | Pageview event volume over time |
| Top Pages | Top List | Most visited paths |
| Top Custom Events | Top List | Most frequent custom event names |
| Referrer Breakdown | Bar | Pageviews grouped by referrer |
| Country Distribution | Tree Map | Pageviews grouped by country |
| Device Type | Bar | Pageviews grouped by device type |

***

### Monitors

Monitors run continuously against your incoming data and fire alerts when thresholds are crossed. All windows are 5 minutes. In testing, the 5xx monitor fired about 2.5 minutes after a burst of errors.

| Monitor | Drain | Warning | Critical | What it counts |
| - | - | - | - | - |
| Lambda Error Spike | Logs | – | 30 events | Function log lines at `level = 'error'`, including function timeouts |
| Lambda Crash | Logs | – | Any event | Events with `statusCode = -1` |
| 5xx Error Rate Spike | Logs | – | 5 events | Responses with `proxy.statusCode >= 500` |
| High 4xx Rate | Logs | 15 events | 30 events | Responses with a 4xx `proxy.statusCode` |
| Firewall Deny Spike | Logs | 100 events | 500 events | Requests with `proxy.wafAction = 'deny'` |
| LCP P75 Regression | Speed Insights | 2,500 ms | 10,000 ms | P75 Largest Contentful Paint |
| INP P75 Regression | Speed Insights | 200 ms | 500 ms | P75 Interaction to Next Paint |

The log monitors count events in the window, not a share of requests. On a busy project, raise the thresholds to match your baseline; on a quiet one, a few errors are enough to fire.

> [!NOTE]
>
> The warning thresholds for LCP (2,500 ms) and INP (200 ms) match Google's "needs improvement" cut-off. The critical INP threshold (500 ms) matches "poor"; the critical LCP threshold (10,000 ms) is well above Google's "poor" (4,000 ms). You can adjust these in the monitor settings to match your own performance baseline.

***

### Saved Searches

Pre-built filters you can open directly from the search bar or use as a starting point for your own investigations.

| Name | Drain | What it finds |
| - | - | - |
| Lambda Errors | Logs | Error and fatal log events from lambda sources |
| Lambda Crashes | Logs | Events with status code –1 (process crash) |
| Firewall Denies | Logs | Requests denied by the Vercel WAF |
| Build Failures | Logs | Error-level events from the build source |
| Poor LCP Pages | Speed Insights | LCP measurements above 2,500 ms |
| Poor INP Pages | Speed Insights | INP measurements above 200 ms |

***

## What the widgets count

Each widget runs a query against the tagged dataset. A few details matter when you read them:

* **Total Requests** and **Requests Over Time** count log lines that carry a `proxy.statusCode`. Some requests write two or three such lines, so the count runs a few percent above the number of requests (about 6% in testing).
* **Top Edge Regions** groups by `executionRegion`, the region where the function ran. The edge region that received the request is `proxy.region`.
* **Build Failures Over Time** and the **Build Failures** saved search count build lines at `level = 'error'`. In testing, a failed build logged its errors at `level: info` with `type: stderr`; search for `source = 'build' AND @raw ILIKE '%Build error occurred%'` to find failed builds. Or use [deployment webhooks](/integrations/vercel-webhooks.md), which report `deployment.error` directly.
* **Lambda Crashes** and the **Lambda Crash** monitor match `statusCode = -1` or `level = 'fatal'`. A function process that exits (for example `process.exit(1)`) returns a 500 and logs `Node.js process exited with exit status: 1` at `level: info`; it's counted as a 5xx, not as a crash.
* Function timeouts (`Task timed out after N seconds`) are `level: error` lines and count towards **Lambda Error Spike**.

## Build your own

Useful views that the templates don't include yet, with queries you can start from:

| View | Query (log drain dataset) | Group by |
| - | - | - |
| Timeouts by route | `@raw ILIKE '%Task timed out after%'` | `path` |
| Functions outside your region | `source = 'lambda' AND executionRegion != 'dub1'` | `path` |
| Errors per deployment | `level = 'error'` | `deploymentId` |
| Rate-limit hits | `"proxy.wafRule" LIKE 'rule_rate_limit%'` | `proxy.clientIp` |
| Cron job runs | `@raw ILIKE '%vercel-cron/1.0%'` | `path` |
| Traffic by path type | `"proxy.pathType" IS NOT NULL AND "proxy.pathType" != ''` | `proxy.pathType` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.