This repo hosts samples for working with the OpenTelemetry Operator on GCP.
- 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
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.
Install the the Operator with:
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v0.112.0/opentelemetry-operator.yaml
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
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.
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.
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 Golden Signals with Beyla
- eBPF HTTP Service Graph with Beyla
See CONTRIBUTING.md
for details.
Apache 2.0; see LICENSE
for details.