Works with the OpenTelemetry you already run.

Bolt Sight takes standard OTLP in and sends alerts out to the places your team already looks. There is no proprietary agent to install.

Data in

Nothing proprietary sits between your code and Bolt Sight. If it speaks OTLP over HTTP, it works.

Ways to send data to Bolt Sight
IntegrationHow it connectsWhere it appears
OpenTelemetry SDKsGo, Python, Java, .NET, Ruby, PHP and any other language with an OTLP/HTTP exporter. Set the endpoint and an Authorization header, or the standard OTEL_* variables.Investigate, Logs, Metrics, Services, Errors
OpenTelemetry CollectorAn otlphttp exporter to the endpoint. One key per Collector deployment.The same pages, for every signal the Collector forwards
Node.js SDKinit() in your entry module. Automatic instrumentation, console output as logs.Investigate, Logs, Metrics, Errors, Services
Browser SDKinitBrowser() in your app entry point.Web Vitals, page-load and request spans, Errors, Events
React and Next.jsA hook for the browser SDK, navigation spans and App Router support.Web Vitals, Investigate
Job events (BullMQ)JSON events posted to /v1/job-events for each job state change.Jobs
Product eventsLog records whose body is an event name.Events

OpenTelemetry, any language

Most OpenTelemetry SDKs and agents read the standard environment variables, so often no code changes. The space after Bearer is URL-encoded as %20 there. Already running a Collector, or fanning in many hosts? Forward with the otlphttp exporter and use one key per Collector deployment. Go and Python snippets are on the developer page.

bsight.techsstuff.com
OTEL_SERVICE_NAME=billing-worker
OTEL_EXPORTER_OTLP_ENDPOINT=https://bsight.techsstuff.com
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer%20bsk_your_project_key
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production,service.version=1.4.2
# Zero-code: the OpenTelemetry Java agent reads the OTEL_* variables
java -javaagent:opentelemetry-javaagent.jar -jar app.jar
// dotnet add package OpenTelemetry.Extensions.Hosting
// dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
builder.Services.AddOpenTelemetry()
    .ConfigureResource(r => r.AddService("billing-worker"))
    .WithTracing(t => t.AddAspNetCoreInstrumentation().AddOtlpExporter(o =>
    {
        o.Protocol = OtlpExportProtocol.HttpProtobuf;
        o.Endpoint = new Uri("https://bsight.techsstuff.com/v1/traces");
        o.Headers = $"Authorization=Bearer {builder.Configuration["BoltSight:ApiKey"]}";
    }));
exporters:
  otlphttp/boltsight:
    endpoint: https://bsight.techsstuff.com
    headers:
      Authorization: "Bearer ${env:BOLT_SIGHT_API_KEY}"

service:
  pipelines:
    traces:  { receivers: [otlp], processors: [batch], exporters: [otlphttp/boltsight] }
    metrics: { receivers: [otlp], processors: [batch], exporters: [otlphttp/boltsight] }
    logs:    { receivers: [otlp], processors: [batch], exporters: [otlphttp/boltsight] }

Node.js, browser, React and Next.js SDKs

Thin wrappers over OpenTelemetry. Install steps are on the Developers page in the app, after you sign in; email support@techsstuff.com if you cannot reach it.

Node.js

Node.js SDK features
Automatic spansHTTP, Express, Fastify, NestJS, gRPC, PostgreSQL, MySQL, Redis, MongoDB and the other libraries covered by OpenTelemetry auto-instrumentation. File-system spans are off.
Logsconsole.log, info, warn, error, debug and stdout and stderr lines become log records with the active trace ID.
ServicesServices, the service map and request, error and latency numbers are built from your spans and service.name.
ErrorsRecord exceptions with span.recordException() in your framework’s error handler. Uncaught exceptions are not captured automatically.
Short-lived processesCall forceFlush() before a serverless function, CLI or cron job ends.
PrivacyAn attribute policy applies a closed export allowlist to names, resources, attributes, events, links and status in your process, before export.

Browser, React and Next.js

Browser SDK features
Web VitalsLCP, INP, CLS, FCP and TTFB as browser.web_vital.* metrics with page.url and rating, exported every 60 seconds by default.
SpansA span per page load and per XMLHttpRequest, with W3C traceparent propagation so backend spans join the same trace. fetch is traced only through tracedFetch and an exact origin, method and path policy.
User operationsWrap an action in a span named browser.operation, browser.navigation or http.request. Only a fixed set of attribute keys is exported.
ErrorsOpt in to uncaught errors and unhandled rejections. Messages and stack traces (up to 1,024 characters) are off by default because they often contain user data.
Product eventsgetLogger().emit() sends events that the Events page understands.
KeyBrowser keys are public: give the browser its own key and restrict it with allowed origins.

Alerts out

A rule notifies its channels when it fires and when it resolves.

Alert channels
ChannelYou provideWhat is sent
WebhookA URLA JSON POST when a rule fires and when it resolves, signed with an HMAC-SHA256 X-Webhook-Signature header. Payload and verification.
SlackAn incoming webhook URLA message in the Slack channel the webhook belongs to.
EmailAn SMTP server and recipient addressesAn email sent through the SMTP server you configure.
TelegramA bot token and chat IDA message through the Telegram Bot API. The app can list chats your bot can see to help you pick the ID.

Delivery safeguards

Alert channel safeguards
Test before you rely on itEvery channel has a Test button that sends a test notification.
Up to 10 channels per ruleA rule can notify several places at once.
Secrets stay secretWebhook URLs, SMTP passwords and bot tokens are encrypted with AES-256-GCM at rest and are never returned by the API.
Safe outbound requestsWebhook, Slack and Telegram requests require HTTPS. Hostnames are resolved when the connection is made, private address ranges are blocked and redirect chains are limited to three.

Not sure it fits your stack?