OpenTelemetry-native · no agent

The check failed.
Here's the trace.

Uptime tools tell you it's down. Last9 probes your endpoints from three regions and records every run as an OpenTelemetry trace, timed from DNS to download. The failure and the reason arrive together.

3 regions
US East (N. Virginia), Mumbai, Singapore — run independently
Every minute
check frequency down to 1-minute for critical endpoints
DNS → download
total response time split into connection phases, per run
Trace per run
every probe recorded as an OpenTelemetry trace span

The problem

DOWN is a page.
It's not a diagnosis.

The pinger fires at 2 a.m. and its entire contribution is one red word. Was it DNS? A TLS handshake? A server that took 28 seconds to first byte? The uptime tool doesn't know — so the investigation starts in a different tab.

The uptime tool can't answer 'why'

A failed check tells you the endpoint didn't respond correctly. Which phase failed — resolution, connection, handshake, or response — lives in a tool that doesn't have it.

Uptime lives outside your observability stack

A separate vendor, a separate alert channel, a separate bill. The check that failed and the deploy that broke it never appear in the same view.

One probe location, false alarms

A single-region pinger can't tell a regional network blip from a real outage. You get paged for the internet's problems, not yours.

Status 200 isn't health

An endpoint can return 200 with a broken payload, or after nine seconds. Checks that only assert the status code pass either way.

Every Last9 check run is an OpenTelemetry trace in the same stack as your application telemetry. The failing probe, the timing phase that caused it, and your backend traces — one query apart, not one vendor apart.

How it works

A pinger that speaks OpenTelemetry.

No agent to install, no integration to wire — Last9 runs the probes from regions you pick. Each execution is recorded as a trace span with a stable, queryable shape, so check results work everywhere your other telemetry does: traces, dashboards, alerts.

  1. Your endpoints HTTP(S) checks — method, headers, body, assertions, schedule
  2. Last9 — probes from US East · Mumbai · Singapore

    Each run lands as a span under synthetic-check-last9-<check-id> carrying l9.synthetic.check_id and per-phase timing attributes — DNS, TCP connect, TLS, TTFB, download. Tagged type=SYNTHETIC so probes never blur into application spans.

  3. Status · traces · alerts pass/fail per region · View Trace on every run · alert rules

What a check can do

Checks that catch slow and broken, not just down.

Combine a status-code assertion with response-time and body-content conditions, run it from multiple regions, and tag checks to group them by environment or flow — production, checkout, auth.

  • Multi-region probes

    3 regions

    US East (N. Virginia), Mumbai, and Singapore. Each location runs your check independently — a failure from one region with success from another points to a network issue, not an outage.

  • Assertions

    all must pass

    Status code, response time, body content. The default asserts status equals 200; stack more conditions so a slow response or broken payload fails the check, not just a hard error.

  • Timing breakdown

    per run

    Every run splits total response time into DNS, TCP, TLS, TTFB, and download. A slow TLS handshake points to a different problem than a slow first byte.

  • Queryable spans

    OTLP

    Each run is a span with a stable shape — l9.synthetic.check_id, http.ttfb_ms, http.status_code, and the rest. The same filter works in the Traces explorer, dashboards, and alert rules.

  • Alerts on checks

    same engine

    Alert on failures and latency from synthetic spans using the alerting engine that already pages you for backend issues — no separate uptime-tool notification chain.

  • SSL checks

    expiry: coming soon

    Every HTTPS probe validates the server's TLS certificate chain today. Dedicated certificate-expiry checks — alert before the cert lapses, not after — are in the works.

Setup

No agent. No SDK. One dialog.

Synthetic Monitoring is on in every Last9 workspace. The target endpoint just needs to be reachable from the public internet — open Synthetic Monitoring in the sidebar, create a check, and the first runs land within the schedule you set.

Read the Synthetic Monitoring docs
  1. Point

    Name the check, set the URL, method, headers, and request body. SSL verification is on by default.

  2. Assert

    Keep the default status-code assertion or add response-time and body-content conditions. All assertions must pass for a run to pass.

  3. Schedule

    Pick a frequency — down to every minute — and one or more probe regions. Enable immediately or save paused.

Query every run, anywhere span attributes
# Every run of a check — in Traces explorer, dashboards, alert rules
l9.synthetic.check_id = "<check-id>"

# Timing attributes recorded on every synthetic span
http.dns_time_ms        # DNS resolution
http.connect_time_ms    # TCP connect
http.tls_time_ms        # TLS handshake
http.ttfb_ms            # time to first byte
http.download_time_ms   # response download
http.status_code        # response status

After the first run you get:

  • Pass/fail status and last-run time per check, per region
  • View Trace on every run — timing breakdown from DNS to download
  • Synthetic spans queryable in dashboards and ad-hoc analytics
  • Alert rules on failures and latency — same engine as your backend alerts

What you can finally answer

Questions the postmortem will ask.

  • Is it down everywhere, or just from Mumbai?
  • Did latency creep up in the week before the outage?
  • Was the slowness DNS, the TLS handshake, or time to first byte?
  • Did the 2 a.m. failure return a 503 — or just hang?
  • Which endpoints fail their response-time assertion most often?
  • What did the failing run's full trace look like?

Stop paying a pinger that can't say why.

Synthetic Monitoring is already in your Last9 workspace. Create a check, pick your regions, and the first trace lands on the next scheduled run.

Start observing for free. No lock-in.

OpenTelemetry · Prometheus

Just update your config. Start seeing data on Last9 in seconds.

Datadog · New Relic · Others

We've got you covered. Bring over your dashboards & alerts in one click.

Built on Open Standards

100+ integrations. OTel native, works with your existing stack.