OpenTelemetry
Starting from version 3.5, the Toolbox App can export OpenTelemetry traces to an external OTLP collector over HTTP. Only remote development flows are instrumented: connections to remote environments and connections of remote development clients. No other Toolbox App activity is reported. To collect telemetry from inside the remote development IDE, install the OpenTelemetry Diagnostic plugin.
Traces are sent to the v1/traces path of the configured endpoint. Every span carries the service.name resource attribute set to JetBrains Toolbox and the service.version attribute set to the build number. The Toolbox App sets both attributes itself, so the collector receives the following resource:
Configuration
The export is disabled until an endpoint is configured. Use one of the following options:
- Settings file
Set the endpoint in the
telemetrysection of the.settings.jsonfile:{ "telemetry": { "otlp_http_endpoint": "https://collector.example.com/" } }The file is located in the Toolbox App data directory:
%LOCALAPPDATA%\JetBrains\Toolbox\.settings.json~/Library/Application Support/JetBrains/Toolbox/.settings.json~/.local/share/JetBrains/Toolbox/.settings.json- Environment variables
OTEL_EXPORTER_OTLP_ENDPOINT— base URL of the OTLP/HTTP collector.OTEL_EXPORTER_OTLP_HEADERS— comma-separatedkey=valuepairs added to every export request, for example, for authentication.OTEL_RESOURCE_ATTRIBUTES— comma-separatedkey=valuepairs added as resource attributes, for example,user.login=jdoe.
The Toolbox App reads these variables from its process environment at startup. An app started from Dock, Finder, or the Start menu does not inherit variables exported in a shell profile, so either start the Toolbox App from a shell that has them, set them system-wide for your operating system, or use the settings file instead.
OTEL_EXPORTER_OTLP_ENDPOINT takes precedence over the setting in the .settings.json file. Custom and self-signed certificates configured for the Toolbox App are reused for the connection to the collector. For details, see Add self-signed certificate.
Remote development spans
Each span listed below covers one operation of a remote development connection and is marked as failed when that operation fails. Spans that cover the whole lifetime of a connection are missing if the Toolbox App is terminated while the connection is still open.
Client connection
- remdev.client.connection
A remote development client is attempting to connect to a remote environment.
- remdev.client.connection.inner
A specific connection attempt. Attributes:
providerId,environmentId, andtargetIdeidentify the connection target.Events:
provider.not.found— the requested plugin is not installed, for example, it was removed while the client was running.environment.not.found— the requested environment is not available, for example, it was removed on the provider side.
- remdev.client.connection.with.env
The remote environment is found, and the connection to it is in progress.
Events:
remote.env.connected— the connection to the remote Toolbox Agent is established.remote.ide.not.in.rd.mode— the remote IDE is running, but not in the remote development host mode.multiple.remote.ides— several remote IDEs are running, and the Toolbox App cannot choose which one to connect to. Usually a misconfigured host machine.new.link.sent— an updated join link is sent to the client.
- remdev.forward.ide.port
The port forwarding step. Attributes:
previous.forwarding.closed,local.port,remote.port, andremote.host.
Environment connection
- remdev.environment.connection
A connection attempt to a remote environment, either for the Toolbox App itself or for a client connection. Covers the whole lifetime of the connection.
Events:
before.connect.hook.rejected— a plugin rejected the connection.connection.success— the environment is connected.user.cancelled— the user canceled the connection.redeploy— the Toolbox Agent has to be deployed again, which leads to another connection attempt.connection.failed— the connection attempt failed.
- remdev.environment.connect.impl
A single connection attempt, without the following connection lifetime. Attributes:
providerIdandenvironmentId.Events:
connection.failedwith thefail.reasonattribute. The reason is an internal enum value, not a raw exception.
- remdev.environment.connect.getRpcClient
Connecting to the remote Toolbox Agent. Contains the following child spans:
remdev.environment.connect.sshConnect— establishing the SSH connection.remdev.environment.connect.deployAgent— deploying and launching the remote Toolbox Agent.
- remdev.environment.connect.establishRpcConnection
Connecting to the deployed remote Toolbox Agent.
IDE telemetry with the OpenTelemetry Diagnostic plugin
The Toolbox App reports only its own connection flows. To also collect telemetry from inside the remote development IDE, install the OpenTelemetry Diagnostic (Remote Development) plugin (com.jetbrains.otp.diagnostic). It works only in remote development mode and must be installed on both the frontend (JetBrains Client) and the backend (remote IDE). Frontend and backend events are then unified under a single session span.
Configuration
Configure the plugin on the backend only. The backend propagates the OTLP connection configuration to the frontend over encrypted RPC, so the frontend needs no separate setup.
Every option below is available both as an environment variable and as a system property. The property name is the variable name in lowercase with dots instead of underscores, for example, otel.exporter.otlp.endpoint for OTEL_EXPORTER_OTLP_ENDPOINT. Pass system properties in the VM options of the backend IDE. If both are set, the system property wins.
- OTEL_EXPORTER_OTLP_HEADERS
Required. Comma-separated
key=valuepairs, for exampleauthorization=Bearer <token>. Signal-specificOTEL_EXPORTER_OTLP_TRACES_HEADERSandOTEL_EXPORTER_OTLP_METRICS_HEADERSoverride common headers with the same key.- OTEL_EXPORTER_OTLP_ENDPOINT
Optional. Defaults to
http://localhost.- OTEL_EXPORTER_OTLP_PROTOCOL
Optional. Either
http/protobuf(default) orgrpc.- RDCT_COMMON_SPAN_ATTRIBUTES and RDCT_COMMON_METRIC_ATTRIBUTES
Optional. Comma-separated
key=valuepairs added to every exported span, or to metrics only. The plugin also addsplugin.version,idea.version, andidea.buildautomatically.
In , you can limit which spans are exported and toggle metrics and on-demand performance reports. These settings are synced from the frontend to the backend.
Spans
- remote-dev-session
The whole remote development session, from client connection to session end. Attribute:
session.id. This span can stay open for hours or days.- session-metadata
A short-lived span emitted at session start, so that a running session can be found before
remote-dev-sessioncloses. Attributes:session.trace_id,session.span_id,session.id, andhost.name.- application-idle
A fallback parent for events that occur before the first session starts.
- connection-dropped-reconnecting
A connection drop and the following reconnection, which measures reconnection latency. Attributes:
projectandreconnection.throttled.drop_count. Repeated drops are throttled by an adaptive cooldown, so not every flap produces a span.- ui-thread-freeze
A UI freeze reported by the platform, backdated to the actual freeze start.
- ide-exception.<ExceptionClass>
An error logged by the IntelliJ Platform with a throwable. Attributes include
exception.type,exception.message,exception.stacktrace, and the blamedplugin.
Except for remote-dev-session, all spans are short-lived and are parented to the current session span.