This chapter covers
- What different signal types are
- When and how to use a certain signal type
- The costs and benefits of each signal type
- How to figure out what signals are relevant
- Determine signal baselines
In the context of observability, signals play a central role: this is the intel we’re basing our decisions on.
As discussed in 1.1, the System under Observation (SuO)–for example, a Kubernetes application or a serverless app based on Lambda functions–emits signals from various sources. You as a human, or equally a piece of software, then uses these signals to make decisions. There is a one-to-many relation between SuO and sources. Your SuO typically involves compute, storage, and network and each of these represents a signal source. We will cover the sources in detail in Chapter 3.
In terms of signals (and sources) we can differentiate between two cases:
- Sources, such as code that you own and you can instrument yourself (that is, decide where and what kind of signals to emit).
-
Sources you don’t own, meaning any signals will be pre-defined. Your task is limited to selecting which signals to consume, in that case. This might be due to:
- Code that is a dependency of your code (library, package, module).
- Due to the fact that the component’s source code is not available (for example, a binary file).
- The component only offers a (networked) API. Any managed service from your cloud provider of choice falls into this category.
- Code that is a dependency of your code (library, package, module).