Book Image

Cloud-Native Observability with OpenTelemetry

By : Alex Boten
Book Image

Cloud-Native Observability with OpenTelemetry

By: Alex Boten

Overview of this book

Cloud-Native Observability with OpenTelemetry is a guide to helping you look for answers to questions about your applications. This book teaches you how to produce telemetry from your applications using an open standard to retain control of data. OpenTelemetry provides the tools necessary for you to gain visibility into the performance of your services. It allows you to instrument your application code through vendor-neutral APIs, libraries and tools. By reading Cloud-Native Observability with OpenTelemetry, you’ll learn about the concepts and signals of OpenTelemetry - traces, metrics, and logs. You’ll practice producing telemetry for these signals by configuring and instrumenting a distributed cloud-native application using the OpenTelemetry API. The book also guides you through deploying the collector, as well as telemetry backends necessary to help you understand what to do with the data once it's emitted. You’ll look at various examples of how to identify application performance issues through telemetry. By analyzing telemetry, you’ll also be able to better understand how an observable application can improve the software development life cycle. By the end of this book, you’ll be well-versed with OpenTelemetry, be able to instrument services using the OpenTelemetry API to produce distributed traces, metrics and logs, and more.
Table of Contents (17 chapters)
1
Section 1: The Basics
3
Chapter 2: OpenTelemetry Signals – Traces, Metrics, and Logs
5
Section 2: Instrumenting an Application
10
Section 3: Using Telemetry Data

Generating tracing data

It's finally time to start generating telemetry from the application! There are several ways to create a span in OpenTelemetry; the first one we'll use is to call start_span on the tracer instance we obtained previously. This will create a span object, using the only required string argument as the name of the span. The span object is the building block of distributed tracing and is intended to represent a unique unit of work in our application. In the following example, we will create a new Span object before calling a method that will do some work. Since our application is a shopper, the first thing the shopper will do is browse the store. In order for the tracing data to be useful, it's important to use a meaningful name in the creation of the span. Once browse has returned, we will call end on the span object to signal that the work is complete:

shopper.py

def browse():
    print("visiting the grocery store&quot...