// Module is included in the following assemblies: // // * serverless/serverless-tracing.adoc :_mod-docs-content-type: PROCEDURE [id="serverless-open-telemetry_{context}"] = Using {DTProductName} to enable distributed tracing {DTProductName} is made up of several components that work together to collect, store, and display tracing data. .Prerequisites * You have access to an {product-title} account with cluster administrator access. * You have not yet installed the {ServerlessOperatorName}, Knative Serving, and Knative Eventing. These must be installed after the {DTProductName} installation. * You have installed {DTProductName} by following the {product-title} "Installing distributed tracing" documentation. * You have installed the OpenShift CLI (`oc`). * You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in {product-title}. .Procedure . Create an `OpenTelemetryCollector` custom resource (CR): + .Example OpenTelemetryCollector CR [source,yaml] ---- apiVersion: opentelemetry.io/v1alpha1 kind: OpenTelemetryCollector metadata: name: cluster-collector namespace: spec: mode: deployment config: | receivers: zipkin: processors: exporters: jaeger: endpoint: jaeger-all-in-one-inmemory-collector-headless.tracing-system.svc:14250 tls: ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt" logging: service: pipelines: traces: receivers: [zipkin] processors: [] exporters: [jaeger, logging] ---- . Verify that you have two pods running in the namespace where {DTProductName} is installed: + [source,terminal] ---- $ oc get pods -n ---- + .Example output [source,terminal] ---- NAME READY STATUS RESTARTS AGE cluster-collector-collector-85c766b5c-b5g99 1/1 Running 0 5m56s jaeger-all-in-one-inmemory-ccbc9df4b-ndkl5 2/2 Running 0 15m ---- . Verify that the following headless services have been created: + [source,terminal] ---- $ oc get svc -n | grep headless ---- + .Example output [source,terminal] ---- cluster-collector-collector-headless ClusterIP None 9411/TCP 7m28s jaeger-all-in-one-inmemory-collector-headless ClusterIP None 9411/TCP,14250/TCP,14267/TCP,14268/TCP 16m ---- + These services are used to configure Jaeger, Knative Serving, and Knative Eventing. The name of the Jaeger service may vary. . Install the {ServerlessOperatorName} by following the "Installing the {ServerlessOperatorName}" documentation. . Install Knative Serving by creating the following `KnativeServing` CR: + .Example KnativeServing CR [source,yaml] ---- apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: config: tracing: backend: "zipkin" zipkin-endpoint: "http://cluster-collector-collector-headless.tracing-system.svc:9411/api/v2/spans" debug: "false" sample-rate: "0.1" <1> ---- <1> The `sample-rate` defines sampling probability. Using `sample-rate: "0.1"` means that 1 in 10 traces are sampled. . Install Knative Eventing by creating the following `KnativeEventing` CR: + .Example KnativeEventing CR [source,yaml] ---- apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config: tracing: backend: "zipkin" zipkin-endpoint: "http://cluster-collector-collector-headless.tracing-system.svc:9411/api/v2/spans" debug: "false" sample-rate: "0.1" <1> ---- <1> The `sample-rate` defines sampling probability. Using `sample-rate: "0.1"` means that 1 in 10 traces are sampled. . Create a Knative service: + .Example service [source,yaml] ---- apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: metadata: labels: app: helloworld-go annotations: autoscaling.knative.dev/minScale: "1" autoscaling.knative.dev/target: "1" spec: containers: - image: quay.io/openshift-knative/helloworld:v1.2 imagePullPolicy: Always resources: requests: cpu: "200m" env: - name: TARGET value: "Go Sample v1" ---- . Make some requests to the service: + .Example HTTPS request [source,terminal] ---- $ curl https://helloworld-go.example.com ---- . Get the URL for the Jaeger web console: + .Example command [source,terminal] ---- $ oc get route jaeger-all-in-one-inmemory -o jsonpath='{.spec.host}' -n ---- + You can now examine traces by using the Jaeger console.