Skip to main content
This guide starts a local MoleSignal sandbox, sends one log event, and finds the event in the web UI and through the query API. The sandbox is for evaluation only.

Prerequisites

  • Docker with Docker Compose v2.
  • About 2 GB of free memory.
  • Free local ports: 5080 (web UI and API), 5082, 5432 (PostgreSQL), 9000 and 9001 (RustFS).

Start the sandbox

1

Clone the repository and start the stack

The first start downloads or builds the images, which can take several minutes. The stack contains PostgreSQL 17 for metadata, RustFS as S3-compatible object storage, and one MoleSignal process that runs every role and serves the web UI.Check that the server is ready:
A healthy server returns {"status":"ok"}.
2

Sign in to the web UI

Open http://localhost:5080 and sign in with:
The sandbox configuration creates this root account on the first start only. Replace the account before any use beyond a local evaluation. See Production checklist.
The RustFS console is available at http://localhost:9001 with rustfsadmin / rustfsadmin. These sandbox credentials are not secure.
3

Get an access token

The API accepts a bearer token. Sign in through the API to get a login token (valid for 24 hours by default) and the organization id:
Without jq, copy token and org_id from the response and export them manually.
Use an API token or an intake token for senders that run longer than the login token lifetime. See Datasource.
4

Send a log event

Native HTTP JSON intake takes an array of records. _timestamp holds microseconds since the Unix epoch. The stream app is created on the first write.
The response reports the accepted records:
5

Find the event in the web UI

  1. Open Logs.
  2. Select the stream app in the stream selector.
  3. Keep the time range at Last 1 hour and select Run.
The result table shows the event. Select the row to inspect its original fields.
6

Query the event with the API

Run the same lookup through the query API. Always send a bounded time_range in microseconds; a very wide range makes the planner turn the query into an asynchronous search job.
The response contains columns, rows, scanned_rows, and took_ms:

Load sample data

A workspace without data shows empty pages. Load a small, correlated demo set (logs, metrics, and traces that share trace_id values) to try cross-signal investigation:
The request creates the streams sample_app_logs, sample_app_metrics, and sample_app_traces. The same action is available in the web UI: on Home, select Complete setup in the setup banner, then select Load next to Load sample data. The banner disappears after every setup step is complete.

Send OpenTelemetry data

OTLP over HTTP works with any OpenTelemetry SDK or Collector. Point the exporter at the /api base path; the exporter appends /v1/logs, /v1/metrics, and /v1/traces:
Telemetry lands in the stream default of each signal type unless a stream-name header selects another stream. See Datasource and Integration guides for Collector, Vector, Fluent Bit, Prometheus, and SDK setups.

Stop the sandbox

Troubleshooting

Next steps

Connect real data

Use the Datasource page, intake tokens, and compatible protocols.

Integration guides

Configure the OpenTelemetry Collector, Vector, Fluent Bit, Filebeat, and Prometheus.

Core concepts

Learn signals, streams, workspaces, and permissions.

Deploy for real

Move from the sandbox to a production deployment.
Last modified on October 26, 2026