Skip to Content
Tares

Why does my Vercel log drain not deliver anything to a Tares daemon running on localhost?

Tares receives Vercel drains only on a publicly reachable ingest endpoint, because Vercel delivers from its cloud and cannot reach a bare localhost daemon. Give the vercel source an ingest URL that Vercel can reach, either on a deployed Tares instance or through a tunnel to your local daemon. Then point the drain at that URL and logs start arriving as events.

How it works

A Vercel log drain is a push. Vercel sends each log entry from its own servers to the endpoint you configure. The vercel source in Tares exposes that endpoint as a stable ingest URL. It is an https URL whose path is /ingest/ followed by the source’s ingest key.

A daemon on localhost listens only on your machine. Vercel’s servers cannot open a connection to it, so the drain has nowhere to deliver. Nothing arrives, and the source stays empty.

The handshake needs the same reachability:

  • When you save the drain, Vercel verifies the endpoint with an x-vercel-verify header.
  • Tares echoes that header back from Vercel’s verification request.
  • The verification request must therefore reach Tares too.

Once the drain is live, Tares stores one event per log entry. The project label is the key, taken from the payload’s projectName, else projectId. environment and source are labels. A single drain can carry several projects, and they show up as separate entities. The connector page, Vercel logs, lists every label it provides.

Set it up

  1. Make Tares reachable from the internet. Run Tares on a deployed instance, or put a tunnel in front of your local daemon so Vercel gets a public https address that forwards to it. A local daemon alone is not enough.
  2. Create the source. Ask a connected agent: “Use tares to create a vercel source and give me the ingest URL for the log drain.” Or go to Sources, Add source, vercel. There is no required config, and the project, environment and source labels are pre-filled.
  3. Check the source definition. It looks like this:
- name: web-logs connector: vercel config: labels: - { name: project, field: project, primary: true } - { name: environment, field: environment } - { name: source, field: source }
  1. Copy the ingest endpoint from the source page. Make sure its host is the public address from step 1, not localhost.
  2. In Vercel, go to Team Settings, Log Drains, Add Log Drain. Set the endpoint to the ingest URL and the delivery format to JSON.
  3. If Tares has auth on, add a custom header to the drain: a Bearer Authorization header holding an ingest-scoped API key. It is needed only when Tares has auth on.
  4. For a local Tares, start it with the command below before you open the tunnel, so the daemon is up when Vercel verifies the endpoint.
tares up
  1. Open Recent events on the source. Entries appear once the drain is saved and traffic flows. Fields shows which projects arrive and how dense each field is. If project reads sparse, pick a denser field as the key, or slice by source or environment.

What you get

  • Vercel log entries arrive in Tares as events, one per entry, keyed by project.
  • Labels for environment (production or preview) and source (lambda, build, edge, static, external or redirect) let you slice the stream. path, host, deployment and branch are also provided.
  • One drain can cover several projects, each as its own entity.
  • Your Vercel logs sit next to the rest of your signals, so the checks and triggers you build in Tares can use them. AI SRE shows how those pieces fit together.

When something else fits

  • If you only want to try Tares on your laptop and do not want a public address, use a source Tares can pull from or read locally. Polled connectors such as http_poll and docker_logs need no inbound connection.
  • If your logs reach you through OpenTelemetry instead of a Vercel drain, the otlp connector takes them over OTLP, and a local setup can send to it directly.

Still stuck? Get help

Last updated on