How Sources work
Source custom resource objects are created as a reference to a workload or namespace (“entities”). Odigos reacts to changes in these custom resource objects to configure instrumentation for the referenced entity. On this page, “Sources” refers to the custom resource object, while “workload”, “namespace”, or “entity” refers to the application being instrumented. See the API Reference for the full structure ofSource
objects and their fields.
Supported Entities
Odigos supports the following Kubernetes entities:- Kubernetes Deployment
- Kubernetes DaemonSet
- Kubernetes StatefulSet
- Kubernetes Namespace
Types of Sources
A Source object can be either:- A Workload Source, which controls instrumentation for a single workload (Deployment, DaemonSet, or StatefulSet)
- A Namespace Source, which controls instrumentation for every workload in a namespace.
Workload Sources
Workload Sources specify a single workload, and the Source represents the instrumentation configuration for that workload. Use Workload Sources to control instrumentation and configuration for individual Deployments, StatefulSets, or DaemonSets with unique requirements. Example:Namespace Sources
Namespace Sources represent instrumentation settings for an entire namespace. Namespace Sources are created by settingspec.workload.kind: Namespace
along with spec.workload.name
and spec.workload.namespace
equal to the name of the
namespace to control.
Use Namespace Sources to control instrumentation for multiple Deployments, StatefulSets, and DaemonSets from a
single spot.
Example:
Using multiple Sources
Workload Sources are intended to be combined with Namespace Sources for flexible, fine-grained control. For example, you may choose to create a Namespace Source to enable instrumentation for namespacefoo
, but want to exclude deployment
bar
. In this case, you can create a Workload Source for deployment bar
with disableInstrumentation: true
:
foo
with a Namespace Source but
choose to explicitly enable deployment bar
via a Workload Source that sets disableInstrumentation: false
(the default).
This is because Workload Sources take priority over Namespace Sources, and any settings in a Workload
Source will override those in a parent Namespace Source.
Source Workflows
Sources are intended to control and configure instrumentation as objects that are completely decoupled from their target workloads. When working with Sources, they should be treated as such. The only requirements for a Source to identify a workload are:- The Source must set
spec.workload.name
,spec.workload.namespace
, andspec.workload.kind
to match the workload (or namespace). - The Source must exist in the same namespace as the target workload (or namespace).
sources.yaml
, separate from your workload manifests. This separation of concerns allows you
to declaratively control your application’s observability without tying it to your application manifests.
You should also define RBAC policies that restrict access to only what is needed to work with Source objects.
In other words, your observability team may not require the ability to view deployments in a namespace to manage
the instrumentation for those deployments.
For example, the following Role grants full editor permissions for Sources:
Source Labels
Odigos uses mutating webhooks to automatically copy the values ofspec.workload
to matching labels. It is
encouraged to use these labels to manage Sources in a cluster:
odigos.io/workload-name
odigos.io/workload-namespace
odigos.io/workload-kind
spec.workload
. They can be used to group and list Sources, for example:
Sources
for Deployments
.
Automatically created Sources
In some scenarios, Odigos may create Sources for you automatically.- When instrumenting workloads in the UI, Odigos will create a Workload Source for each workload.
- When choosing Include future workloads in the UI, Odigos will create a Namespace Source for the namespace.
- When creating a Source grouping in the UI, Odigos will create a Workload Source for each Workload in the group.