Hosted beta
Ship OpenTelemetry to hosted sigiro with a tenant key and query it back with SQL — no infrastructure to run. Onboarding is manual during the invited beta.
sigiro ingests OpenTelemetry (traces, logs, metrics, profiles) and lets you query it
back with SQL. During beta, onboarding is manual. Replace <your-sigiro-host> below
with the host your operator gives you.
1. Get your API key
Your operator sends you a key shaped like sk_<yourtenant>_<random>. Treat it like a
password — it is shown once, cannot be recovered (only rotated), and authenticates
both ingest and querying.
2. Point your OpenTelemetry exporter at sigiro
Standard OTLP over HTTP or gRPC; auth is a standard Authorization: Bearer header.
OTLP/HTTP (port 4318, recommended):
export OTEL_EXPORTER_OTLP_ENDPOINT="https://<your-sigiro-host>:4318"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer sk_<yourtenant>_<random>"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"OTLP/gRPC (port 4317):
export OTEL_EXPORTER_OTLP_ENDPOINT="https://<your-sigiro-host>:4317"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer sk_<yourtenant>_<random>"
export OTEL_EXPORTER_OTLP_PROTOCOL="grpc"Notes: signals post to the standard OTLP paths (/v1/traces, /v1/logs,
/v1/metrics, /v1/profiles) — your SDK handles that. gzip is supported on HTTP.
Both ports use TLS (https://). A single request (after decompression) must be
≤ 8 MB — default SDK batch sizes stay well under this.
3. Verify data is flowing
Send some telemetry, wait a few seconds (flush cadence ~1s), then query:
curl -s "https://<your-sigiro-host>/v1/query" \
-H "Authorization: Bearer sk_<yourtenant>_<random>" \
--data 'SELECT count(*) AS n FROM sigiro_spans'A non-zero n means traces are landing. (Query after your first batch — a brand-new
tenant that has never ingested has no storage yet.)
4. Query your data (SQL API)
- Endpoint:
POST /v1/queryon the main HTTPS port. - Auth:
Authorization: Bearer sk_<yourtenant>_<random>. - Body: the raw SQL string (not JSON).
- Response: JSON array of row objects; header
x-sigiro-truncated: true|falseindicates whether results were capped.
You only ever see your own data (isolated per-tenant catalog).
Tables: sigiro_spans, sigiro_logs, sigiro_log_templates,
sigiro_metrics_gauge, sigiro_metrics_sum, sigiro_metrics_histogram,
sigiro_metrics_exp_histogram, sigiro_profiles, and the sigiro_anomalies
table — precomputed regime shifts written continuously by the anomaly pass
(also served typed at GET /v1/anomalies).
Attribute columns (*_attributes, events_json, …) are
JSON text — read fields with json_extract(col, '$.key') or col ->> 'key'.
Allowed SQL: SELECT only, against the sigiro_* tables. No writes/DDL, and no
file/URL/S3 readers (read_csv, read_parquet, glob, … are blocked). Joins, window
functions, aggregates and json_extract all work.
CTEs are rejected. A WITH clause fails validation whatever it contains — rewrite
it as a derived-table subquery, SELECT ... FROM (SELECT ...) t. On hosted,
information_schema is blocked too, since one shared catalog holds every tenant.
Examples:
-- Slowest operations, last hour
SELECT service_name, span_name,
approx_quantile(duration, 0.95) / 1000.0 AS p95_ms, count(*) AS n
FROM sigiro_spans
WHERE timestamp > now() - INTERVAL '1 hour'
GROUP BY 1, 2 ORDER BY p95_ms DESC LIMIT 10;-- Error-log rate per route, last 15 min
SELECT service_name, log_attributes ->> 'http.route' AS route, count(*) AS errors
FROM sigiro_logs
WHERE timestamp > now() - INTERVAL '15 minutes' AND severity_number >= 17
GROUP BY 1, 2 ORDER BY errors DESC;5. Limits
| Limit | Value | On breach |
|---|---|---|
| Query timeout | 10 s | query rejected (400) |
| Result rows | 100,000 | response truncated, x-sigiro-truncated: true |
| Query memory | ~400 MB | query errors (400) |
| Ingest body | 8 MB (decompressed) | 413 (HTTP) / RESOURCE_EXHAUSTED (gRPC) |
| SQL/API request rate | 5 req/s per tenant, burst 20 | 429 |
| OTLP/HTTP request rate | 50 req/s per source, burst 100 | 429 |
There are no secondary indexes, so bound queries by timestamp for speed and to
avoid timeouts/truncation.
6. Data retention
During beta, treat sigiro as a live query surface, not a system of record. Ask your operator for the current retention window and export anything you need to keep long-term.