OpenTelemetry Operator Sample
This repo hosts samples for working with the OpenTelemetry Operator on GCP.
Running the Operator
Prerequisites
- A running GKE cluster
- Helm (for GKE Autopilot)
cert-manager
installed in your cluster- (For private clusters): set up the firewall rules for cert-manager
For GKE Autopilot, install cert-manager
with the following Helm commands:
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \
--create-namespace \
--namespace cert-manager \
--set installCRDs=true \
--set global.leaderElection.namespace=cert-manager \
--set extraArgs={--issuer-ambient-credentials=true} \
cert-manager jetstack/cert-manager
Firewall rules
By default, private GKE clusters may not allow the necessary ports for cert-manager to work, resulting in an error like the following:
Error from server (InternalError): error when creating "collector-config.yaml": Internal error occurred: failed calling webhook "mopentelemetrycollector.kb.io": failed to call webhook: Post "https://opentelemetry-operator-webhook-service.opentelemetry-operator-system.svc:443/mutate-opentelemetry-io-v1alpha1-opentelemetrycollector?timeout=10s": context deadline exceeded
To fix this, create a firewall rule for your cluster with the following command:
gcloud compute firewall-rules create cert-manager-9443 \
--source-ranges ${GKE_MASTER_CIDR} \
--target-tags ${GKE_MASTER_TAG} \
--allow TCP:9443
$GKE_MASTER_CIDR
and $GKE_MASTER_TAG
can be found by following the steps in
the firewall
docs
listed above.
Installing the OpenTelemetry Operator
Install the latest release of the Operator with:
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
Starting the Collector
Set up an instance of the OpenTelemetry Collector by creating an OpenTelemetryCollector
object.
The one in this repo sets up a basic OTLP receiver and logging exporter:
kubectl apply -f collector-config.yaml
Auto-instrumenting Applications
The Operator offers auto-instrumentation of application pods by adding an annotation to the Pod spec.
First, create an Instrumentation
Custom Resource
that contains the settings for the instrumentation. We have provided a sample resource
in instrumentation.yaml
:
kubectl apply -f instrumentation.yaml
With a Collector and auto-instrumentation set up, you can experiment with it using one of the sample applications, or skip right to the recipes if you already have an application running.
Sample Applications
The sample-apps/
folder contains basic apps to demonstrate collecting traces with
the operator in various languages:
- NodeJS
- Java
- Python
- DotNET (coming soon)
- Go
- NodeJS + Java
Each of these sample apps works well with the recipes listed below.
Recipes
The recipes
directory holds different sample use cases for working with the
operator and auto-instrumentation along with setup guides for each recipe. Currently there are:
- Trace sampling configuration
- Trace remote sampling config
- Trace filtering
- Trace enhancements
- Cloud Trace integration
- Resource detection
- Daemonset and Deployment
- eBPF HTTP Observability with Beyla
Contributing
See CONTRIBUTING.md
for details.
License
Apache 2.0; see LICENSE
for details.
Certificate-manager DNS authorization
gcloud certificate-manager dns-authorizations create cloudtrace-daslab-online \
--domain="cloudtrace.daslab.online"
gcloud certificate-manager dns-authorizations describe cloudtrace-daslab-online