odigos

open-source

jaeger

opentelemetry

Combining Odigos and Jaeger for instant distributed tracing

This article explains how to simplify distributed tracing using Odigos and Jaeger for improved observability in microservices-based applications.

Combining Odigos and Jaeger for instant distributed tracing
Author
/eden.jpgEden Federman
Apr 12 2023

Adopting distributed tracing is a great way to improve the observability of your microservices-based applications. However, it can be a challenging task to implement distributed tracing in a production environment. In this blog post, we will show how to combine Odigos and Jaeger to make distributed tracing easy.

Target application

We will use an application called emojivoto. It is a simple web application that allows users to vote for their favorite emoji. The application is written in Go and uses gRPC for communication between services.

Prerequisites

The following tools are required to run this tutorial:

  • Kind to run a local Kubernetes cluster with Docker container nodes.
  • Kubernetes CLI (kubectl) to run commands against Kubernetes clusters.
  • Helm CLI to install Odigos and the observability backend using helm charts.

Creating the Kubernetes cluster

Create a new local Kubernetes cluster, by running the following command:

kind create cluster

Installing Target Applications

Deploy the application using the following command:

kubectl apply -k github.com/keyval-dev/opentelemetry-go-instrumentation/docs/getting-started/emojivoto

Installing Jaeger

We will use Jaeger as our distributed tracing backend. Jaeger is a popular CNCF project that provides a complete distributed tracing solution.

Install Jaeger using the following command:

kubectl apply -f https://raw.githubusercontent.com/keyval-dev/opentelemetry-go-instrumentation/master/docs/getting-started/jaeger.yaml -n emojivoto

Installing Odigos

Odigos will be used for generating and sending traces to Jaeger. Install Odigos using the following command:

helm repo add odigos https://keyval-dev.github.io/odigos-charts/
helm install my-odigos odigos/odigos --namespace odigos-system --create-namespace

After all the pods in the odigos-system namespace are running, open the Odigos UI by running the following command:

kubectl port-forward svc/odigos-ui 3000:3000 -n odigos-system

And navigate to http://localhost:3000 to access the UI.

Selecting the target applications

There are two ways to select which applications Odigos should instrument:

  • Opt out (recommended): Instrument everything, including every new application that will be deployed going forward. Users can still manually mark applications that should not be instrumented
  • Opt In: Only instrument the applications selected manually by the user.

Select Applications

For this tutorial, we recommend choosing the opt out mode.

Adding Jaeger as a backend

To add Jaeger as a backend, scroll down to the Self-hosted section and click on Jaeger.

Add Jaeger

The last step is to provide the Jaeger endpoint. If you followed the steps in this tutorial, the endpoint will be jaeger.emojivoto:4317.

Add Jaeger Endpoint

Viewing traces

Open the Jaeger UI by running the following command:

kubectl port-forward svc/jaeger 16686:16686 -n emojivoto

And navigate to http://localhost:16686 to access the UI.

Select one of the services from the list and click on Find Traces:

Jaeger Traces

Summary

In this tutorial, we showed how to combine Odigos and Jaeger to make distributed tracing easy. At Keyval, we believe that adopting distributed tracing should be easy and accessible to everyone. We are working hard to make this a reality. If you have any questions or feedback, please reach out to us on Slack or GitHub.

If you want to learn more about how you can generate distributed traces instantly check out our GitHub repository. We'd really appreciate it if you could throw us a ⭐👇
https://github.com/keyval-dev/odigos

Related posts

Goodbye Sidecars: Go Instrumentation as a Device

Goodbye Sidecars: Go Instrumentation as a Device

Explore the latest release of Odigos (v0.1.52), which introduces seamless Go instrumentation via a daemonset, eliminating the need for sidecars and enhancing performance.

Goodbye Sidecars: Go Instrumentation as a Device

Eden Federman

Jun 14 2023

How Keyval Automates the Deployment of Go Microservices with ko build

How Keyval Automates the Deployment of Go Microservices with ko build

Learn how Keyval utilizes the ko build tool to effortlessly build and deploy Go microservices in Kubernetes, streamlining the development process.

How Keyval Automates the Deployment of Go Microservices with ko build

Amir Blum

Aug 25 2023

Sending OpenTelemetry data to Google Cloud Storage

Sending OpenTelemetry data to Google Cloud Storage

Learn how to send OpenTelemetry data to Google Cloud Storage using Odigos, improving your data storage and analysis capabilities.

Sending OpenTelemetry data to Google Cloud Storage

Eden Federman

Feb 16 2023