Cloud Observability supports OpenTelemetry as the way to get telemetry data (traces, logs, and metrics) from your app as requests travel through its many services and other infrastructure.
There are two ways to instrument your code:
Auto-instrumentation uses shims or bytecode instrumentation agents to intercept your code at runtime or at compile-time to add tracing and metrics instrumentation to the libraries and frameworks you depend on.
Manual instrumentation uses an SDK and APIs you call from your services to provide observability into the operations within a service. It requires you to manually add spans, context propagation, attributes, etc. to your application code. It is akin to commenting code or writing tests.
As a general rule of thumb, it is best to start with auto-instrumentation if it’s available. Once that’s in place, you’ll be able to see where the blind spots are in your system and you can start adding manual instrumentation as needed.
Don’t see your language listed below? No problem! As long as you use a language supported by OpenTelemetry, you can send Traces to Cloud Observability, either directly to Cloud Observability, or through a Collector.
Use the Java auto-instrumentation agent to configure OpenTelemetry, auto-instrument your code, and send data to Cloud Observability. The agent dynamically injects bytecode to capture telemetry from many libraries and frameworks.
Step 1: Download the Java agent
The Java agent JAR file includes the agent and instrumentation libraries.
To download the JAR file, go to OpenTelemetry’s Java instrumentation releases, click Assets, and click opentelemetry-javaagent.jar. Add the JAR file to your preferred directory.
Step 2: Add the Java agent to your JVM startup arguments
Add the downloaded JAR file path and your service name to your JVM startup
arguments. Do this on the command line, replacing <service_name>
with your own value:
1
java -javaagent:path/to/opentelemetry-javaagent.jar -Dotel.service.name=<service_name> -jar path/to/myapp.jar
Step 3: Run the Java agent
To run the Java agent, enter the following in your terminal, replacing
<LS_ACCESS_TOKEN>
and <service_name>
with your own values.
1
2
3
4
5
6
7
8
9
10
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="lightstep-access-token=<LS_ACCESS_TOKEN>"
java -javaagent:opentelemetry-javaagent.jar \
-Dotel.service.name=<service_name> \
-Dotel.traces.exporter=logging,otlp \
-Dotel.metrics.exporter=logging,otlp \
-Dotel.exporter.otlp.protocol=grpc \
-Dotel.exporter.otlp.endpoint="https://ingest.lightstep.com:443" \ #US data center
#-Dotel.exporter.otlp.endpoint="https://ingest.eu.lightstep.com:443" \ #EU data center
-jar path/to/your/app.jar
This approach sends data to Cloud Observability directly and doesn’t use the Collector.
Step 4: Call your Java application
Generate traffic in your application to create telemetry data.
Sending OpenTelemetry data directly to Cloud Observability without a Collector for most developer setups suffices. For non-development setups, however, it is highly recommended that you send OpenTelemetry data to Cloud Observability Observability using the OpenTelemetry Collector.
Use the Node.js auto-instrumentation package to configure OpenTelemetry, auto-instrument your code, and send data to Cloud Observability. The module dynamically instruments many libraries and frameworks to capture telemetry.
Step 1: Install the auto-instrumentation package
Run the following commands to install the appropriate packages:
1
2
npm install @opentelemetry/api
npm install @opentelemetry/auto-instrumentations-node
Step 2: Start your application
Configure the OpenTelemetry SDK using environment variables to send your data to Cloud Observability.
Enter the commands below, replacing <LS_ACCESS_TOKEN>
and <SERVICE_NAME>
with your own values:
1
2
3
4
5
export OTEL_SERVICE_NAME="<SERVICE_NAME>"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.lightstep.com" #US data center
#export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.eu.lightstep.com" #EU data center
export OTEL_EXPORTER_OTLP_HEADERS="lightstep-access-token=<LS_ACCESS_TOKEN>"
node --require @opentelemetry/auto-instrumentations-node/register app.js
Step 3: Call your Node.js application
Generate traffic in your application to create telemetry data.
Sending OpenTelemetry data directly to Cloud Observability without a Collector for most developer setups will suffice. For non-development setups, however, it is highly recommended that you send OpenTelemetry data to Cloud Observability by way of the OpenTelemetry Collector.
Use the Python auto-instrumentation agent to configure OpenTelemetry, auto-instrument your code, and send data to Cloud Observability. The agent dynamically injects bytecode to capture telemetry from many libraries and frameworks.
Step 1: Download and install the Python agent
Run the following commands to install the appropriate packages:
1
2
3
4
pip install opentelemetry-distro \
opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install
Step 2: Run the Python agent
Configure your agent using environment variables to send your data to Cloud Observability.
Enter the commands below, replacing <LS_ACCESS_TOKEN>
and <service_name>
with your own values:
1
2
3
4
5
6
7
8
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="lightstep-access-token=<LS_ACCESS_TOKEN>"
export OTEL_TRACES_EXPORTER="console,otlp_proto_grpc"
export OTEL_METRICS_EXPORTER="console,otlp_proto_grpc"
export OTEL_SERVICE_NAME="<service_name>"
export OTEL_EXPORTER_OTLP_ENDPOINT="ingest.lightstep.com:443" #US data center
#export OTEL_EXPORTER_OTLP_ENDPOINT="ingest.eu.lightstep.com:443" #EU data center
opentelemetry-instrument python app.py
Step 3: Call your Python application
Generate traffic in your application to create telemetry data.
Sending OpenTelemetry data directly to Cloud Observability without a Collector for most developer setups will suffice. For non-development setups, however, it is highly recommended that you send OpenTelemetry data to Cloud Observability Observability by way of the OpenTelemetry Collector.
Go instruments application by using instrumentation libraries to wrap key infrastructure components. These libraries can be found in the Contrib repository or the OpenTelemetry Registry.
Step 1: Install dependencies and set up the Tracer Provider
Run the following command to get the needed dependencies.
1
2
3
4
go get go.opentelemetry.io/otel \
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc \
go.opentelemetry.io/otel/sdk/trace \
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
Import the following package for configuring OTEL and the net/http instrumentation.
1
2
3
4
5
6
import (
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
)
Configure the OTEL Tracer Provider and the OTLP Exporter.
1
2
3
4
5
6
7
8
9
exp, err := otlptracegrpc.New(context.Background())
if err != nil {
panic(err)
}
otel.SetTracerProvider(
sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exp),
),
)
Step 2: Wrap HTTP routes with an OTEL Handler
Add otelhttp as a wrapper around your http handlers.
1
2
3
4
5
mux := http.NewServeMux()
// The Root Route is not instrumented
mux.Handle("/", echo("Hello World"))
// The /foo route is instrumented
mux.Handle("/foo", otelhttp.NewHandler(echo("foo"), "foo"))
Step 3: Run the application
Configure your SDK using environment variables to send your data to Cloud Observability.
Enter the commands below, replacing <LS_ACCESS_TOKEN>
and <SERVICE_NAME>
with your own values:
1
2
3
4
5
6
7
#NOTE if your access token has a "+" it must be URL Encoded to "%2B"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="lightstep-access-token=<LS_ACCESS_TOKEN>"
export OTEL_SERVICE_NAME="<service_name>"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.lightstep.com:443" #US data center
#export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.eu.lightstep.com:443" #EU data center
go run .
Step 4: Call your Go application
Generate traffic in your application to create telemetry data.
Sending OpenTelemetry data directly to Cloud Observability without a Collector for most developer setups suffices. For non-development setups, however, it is highly recommended that you send OpenTelemetry data to Cloud Observability Observability using the OpenTelemetry Collector.
Use the .NET auto-instrumentation agent to configure OpenTelemetry, auto-instrument your code, and send data to Cloud Observability. The agent dynamically injects bytecode to capture telemetry from many libraries and frameworks.
Step 1: Download and install the .NET agent
The .NET agent includes the agent and instrumentation libraries.
To download and install the agent, go to OpenTelemetry’s .NET instrumentation releases, check the latest released version, and run the following in your server:
1
2
3
# Download and install the latest version, e.g. 0.7.0
curl -sSfL https://raw.githubusercontent.com/open-telemetry/opentelemetry-.NET-instrumentation/0.7.0/otel-.NET-auto-install.sh -O
sh ./otel-.NET-auto-install.sh
This will install it to $HOME/.otel-dotnet-auto
by default.
Step 2: Set up instrumentation for the current shell session
The installed agent must be explicitly enabled in the .NET runtime. Run the script included in the installation in order to set the respective options:
1
2
chmod +x $HOME/.otel-dotnet-auto/instrument.sh
. $HOME/.otel-dotnet-auto/instrument.sh
Step 3: Run the .NET agent
To run the .NET agent, enter the following in your terminal, replacing
<LS_ACCESS_TOKEN>
and <service_name>
with your own values.
1
2
3
4
5
6
7
export OTEL_SERVICE_NAME="<service_name>"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.lightstep.com:443" #US data center
#export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.eu.lightstep.com:443" #EU data center
export OTEL_EXPORTER_OTLP_HEADERS="lightstep-access-token=<LS_ACCESS_TOKEN>"
export OTEL_METRICS_EXPORTER="none"
export OTEL_LOGS_EXPORTER="none"
.NET run --project MyApplication
This approach sends data to Cloud Observability directly and doesn’t use the Collector.
Step 4: Call your .NET application
Generate traffic in your application to create telemetry data.
Sending OpenTelemetry data directly to Cloud Observability without a Collector for most developer setups suffices. For non-development setups, however, it is highly recommended that you send OpenTelemetry data to Cloud Observability Observability using the OpenTelemetry Collector.
Remember, Cloud Observability can only display what your system sends it, so instrumentation is key!
Updated Jun 13, 2022