Documentation

Synth Monitor docs

From zero to a working monitoring suite, then everything you can automate.

Quick start

  1. Create an account. Your organization is created with it; invite teammates later in Settings → Members.
  2. Create an enrollment token in Settings → Agent enrollment and install an agent with it (below). It appears under Agents within a minute.
  3. Open New test, pick a test type, enter the target and create it.
  4. Results arrive within a minute. A default “Test failing” alert rule opens an incident after consecutive failures; connect Slack, Teams, PagerDuty or email in Settings → Integrations.

Concepts

  • Agent: a small program that runs tests and sends results over HTTPS. Agents only connect out; nothing needs to reach them, except for agent-to-agent and voice tests.
  • Test: what to measure (type and target), how often, and from which agents (all of yours by default, or picked ones, including shared agents).
  • Alert rule: a condition on a metric (fixed threshold or deviation from the baseline) that must hold for a number of runs and agents before an incident opens.
  • Diagnosis: computed on every test page: what is degraded, where it starts, whose network it is in, since when.

Install an agent

Get a token in Settings → Agent enrollment, then run one of these on the machine. The dashboard shows the same commands with your token filled in.

Linux (any distribution)

curl -fsSL https://synthmonitor.online/install.sh | sudo bash -s -- --token sme_… --name $(hostname)

Installs the binary and a systemd service running as root (path traces need raw sockets). Add --browser to also run page-load and browser transaction tests (it starts the browser runner in Docker).

Debian / Ubuntu package

curl -fsSLO https://synthmonitor.online/downloads/synth-agent-amd64.deb && sudo apt install ./synth-agent-amd64.deb
sudo synth-agent-setup --token sme_… --name $(hostname)

RHEL / Rocky / Fedora

sudo dnf install -y https://synthmonitor.online/downloads/synth-agent-x86_64.rpm
sudo synth-agent-setup --token sme_… --name $(hostname)

Docker

docker build -t synth-agent https://synthmonitor.online/downloads/synth-agent-docker.tgz
docker run -d --name synth-agent --restart unless-stopped --network host --cap-add NET_RAW \
  -e SYNTH_ENROLLMENT_TOKEN=sme_… -e SYNTH_AGENT_NAME=$(hostname) -v synth-agent:/var/lib/synth-agent synth-agent

macOS

curl -fsSL https://synthmonitor.online/install.sh | sudo bash -s -- --token sme_… --name "$(scutil --get ComputerName)"

Windows (PowerShell as Administrator)

& ([scriptblock]::Create((irm https://synthmonitor.online/downloads/install.ps1))) -Token sme_…

In your AWS account

Connect an account in Settings → Cloud accounts (an IAM role we assume with an external ID, or an access key), then launch agents by region from the Agents page. Instances are enrolled, updated and terminated for you.

Agent kinds

  • Enterprise agents are fixed vantage points: servers, VMs, containers, cloud instances.
  • Endpoint agents run on laptops and desktops (macOS and Windows install this kind by default). They also sample the local network every minute: Wi-Fi signal, gateway latency and loss, VPN, DNS server timing, and keep a day of data when offline.
  • Shared agents are run by us in other regions and can be picked per test within fair-use limits.

Agents update themselves to new releases (checksums verified) unless installed from a package, where your package manager does.

Network access

  • Outbound HTTPS to synthmonitor.online (port 443) for configuration and results.
  • Outbound traffic to whatever your tests target.
  • Inbound only for agents that are the target of agent-to-agent or voice tests: UDP and TCP on port 49153 by default.

Test types

  • Network: ping, TCP connect, network (loss, latency, jitter and path trace to a server), agent-to-agent.
  • DNS: DNS lookup against any resolver, DNS trace from the root with DNSSEC validation.
  • Web: HTTP, multi-step API (variables, secrets, extraction, assertions), page load in Chromium, browser transactions.
  • Services: FTP/FTPS/SFTP, SIP (OPTIONS, REGISTER), voice between two agents with MOS.
  • Routing: BGP monitoring of your prefixes for hijacks, leaks, RPKI-invalid routes, new upstreams and lost reachability.

Secret values (passwords, keys, secret variables) are write-only: the dashboard and API never show them again; leave a field blank when editing to keep the stored value.

Alerts and notifications

Alert rules pick a metric (availability, latency, loss, jitter, MOS, step timings and more), a threshold or a baseline deviation, how many consecutive runs and how many agents must agree. Each rule opens one incident per test, which resolves by itself.

Channels: Slack, Microsoft Teams, PagerDuty (trigger, acknowledge, resolve), ServiceNow (incident created and updated), email and generic webhooks. Route by severity, or name channels on a rule. Maintenance windows silence chosen tests or the whole organization.

Diagnosis and evidence

Every test page shows the current diagnosis. For network tests it compares each agent's path with its last healthy one, finds where real loss starts, and names the network and its role. Evidence report turns it into a printable document with a UTC timeline and the hop-by-hop paths; share it as a public link with your provider. See How it works.

REST API

Create a key in Settings → API keys and send it as a bearer token. Keys belong to the organization; requests see and change only its data.

curl -H "Authorization: Bearer smk_…" https://synthmonitor.online/api/tests
Method and pathWhat it does
GET /api/testsList the organization's tests.
POST /api/testsCreate a test (JSON body: name, type, intervalSec, enabled, agentIds, config).
GET /api/tests/:idOne test.
PUT /api/tests/:idReplace a test's definition (same body as create).
DELETE /api/tests/:idDelete a test.
GET /api/tests/:id/resultsResults, newest first. Query: since (ms since epoch, default one hour ago), limit (≤ 1000), agentId.

Create a test

curl -X POST https://synthmonitor.online/api/tests \
  -H "Authorization: Bearer smk_…" -H "content-type: application/json" \
  -d '{"name":"Path to example.com","type":"network","intervalSec":60,
       "config":{"host":"example.com","protocol":"tcp","port":443,"pathTrace":true}}'

Security

How tenant data is isolated, how secrets are stored and what we log: see Security.