The “Latency Sampler” Odigos Action is an Endpoint Action that samples traces based on their duration for a specific service and endpoint (HTTP route) filter.

Use Cases

Cost Reduction

  • In large-scale systems, collecting every trace can be expensive. Latency policies allows you to focus on the most critical traces, reducing the overall volume of data sent for analysis. This helps you optimize your costs.

System Optimization

  • Removing short traces allows you to concentrate on the more important and interesting long traces, optimizing your system for efficiency without being overwhelmed by the volume of trace data.

Mechanism

The duration is determined by looking at the earliest start time and latest end time of a trace. Configuring minimum_latency_threshold for a specified service and http_route will sample any request with a duration exceeding this threshold for that particular service and http_route combination.
Otherwise, the trace will be dropped. It is recommended to still keep a portion of these traces using the fallback_sampling_ratio setting. This allows you to retain a specified percentage of traces that fall below the threshold.

Basic Example

This basic example demonstrates how to sample all traces with a latency greater than 1000ms for the frontend service and /buy http route.
Additionally, it retains 20% of the traces that fall below the 1000ms threshold.

Create a file named latency-sampler.yaml with the following content:

apiVersion: actions.odigos.io/v1alpha1
kind: LatencySampler
metadata:
  name: example-latencysampler
  namespace: odigos-system
spec:
  actionName: "example-latencysampler-action"
  endpoints_filters:
  -   minimum_latency_threshold: 1000
      fallback_sampling_ratio: 20
      http_route: "/buy"
      service_name: "frontend"
  signals:
  - TRACES  

Apply the action to the cluster:

kubectl apply -f latency-sampler.yaml

Full Action Options

The full list of options available for the “LatencySampler” action are:

  • endpoints_filters (required) :

    • minimum_latency_threshold (required): Specifies the minimum latency in milliseconds; traces with latency below this threshold are ignored.

    • service_name (required): The rule applies to a specific service name. Only traces originating from this service’s root span will be considered.

    • http_route (required): The specific HTTP route prefix to match for sampling. Only traces with routes beginning with this prefix will be considered. For instance, configuring /buy will also match /buy/product.

    • fallback_sampling_ratio (required): specifies the percentage of traces that meet the service/http_route filter but fall below the threshold that you still want to retain. For example, if a rule is set for service A and http_route B with a minimum latency threshold of 1 second, you might still want to keep some traces below this threshold. Setting the ratio to 20% ensures that 20% of these traces will be retained.

  • signals (required): An array with the signals that the processor will act on (TRACES).

  • actionName (optional): Allows you to attach a meaningful name to the action for convenience. Odigos does not use or assume any meaning from this field.

  • notes (optional): A free-form text field that allows you to attach notes to the action for convenience. Odigos does not use or assume any meaning from this field.

  • disabled (optional): A boolean field that allows you to disable the action. When set to true, the action will not be executed. The default value is false.

Notes

  • Supports only traces.
  • Multiple endpoint_filters can be configured within the same action.
  • Adding this action causes a 30-second delay in sending the data.
  • Traces with durations exceeding 30 seconds might not be sampled correctly.