Skip to content
sigiro[.]com

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):

bash
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):

bash
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:

bash
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/query on 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|false indicates 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:

sql
-- 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;
sql
-- 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

LimitValueOn breach
Query timeout10 squery rejected (400)
Result rows100,000response truncated, x-sigiro-truncated: true
Query memory~400 MBquery errors (400)
Ingest body8 MB (decompressed)413 (HTTP) / RESOURCE_EXHAUSTED (gRPC)
SQL/API request rate5 req/s per tenant, burst 20429
OTLP/HTTP request rate50 req/s per source, burst 100429

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.