Skip to main content
Sampling can be used to control the volume of traces collected by ABV. Sampling is handled client-side. You can configure the sample rate by setting the ABV_SAMPLE_RATE environment variable or by using the sample_rate/sampleRate constructor parameter. The value has to be between 0 and 1. The default value is 1, meaning that all traces are collected. A value of 0.2 means that only 20% of the traces are collected. The SDK samples on the trace level meaning that if a trace is sampled, all observations and scores within that trace will be sampled as well.

Implementation with Python SDK

Install packages
pip install abvdev, python-dotenv
Add credentials and ABV_SAMPLE_RATE environment variable: Add your ABV credentials to your environment variables. Make sure that you have a .env file in your project root.
.env
ABV_API_KEY = "sk-abv-..."
ABV_HOST = "https://app.abv.dev" # US region
# ABV_HOST = "https://eu.app.abv.dev" # EU region
ABV_SAMPLE_RATE = "0.5"
load environment variables and initialize client with get_client:
# Import the function to load the .env file
from dotenv import load_dotenv 
from abvdev import observe, get_client

# Load the environment variables from the .env file
load_dotenv() 

@observe
def my_function():
    return "Hello, world!" # Input/output and timings are automatically captured
 
my_function()
 
# Flush events in short-lived applications
abv = get_client()
abv.flush()
Also with Python SDK, you can configure sampling when initializing the client:
from abvdev import ABV, observe

# ABV client initialization - # Method 2: Initialize with constructor parameter
abv = ABV(
    sample_rate=0.5,  # 50% of traces will be sampled
    api_key="sk-abv-...", # your api key here
    host="https://app.abv.dev", # host="https://eu.app.abv.dev", for EU region
)

@observe
def my_function():
    return "Hello, world!" # Input/output and timings are automatically captured
 
my_function()
 
# Flush events in short-lived applications
abv.flush()
If a trace is not sampled, none of its observations (spans or generations) or associated scores will be sent to ABV, which can significantly reduce data volume for high-traffic applications.

Implementation with JS/TS SDK

Install packages
npm install @abvdev/tracing @abvdev/otel @opentelemetry/sdk-node dotenv
Add credentials Add your ABV credentials to your environment variables. Make sure that you have a .env file in your project root and a package like dotenv to load the variables.
.env
ABV_API_KEY = "sk-abv-..."
ABV_BASE_URL = "https://app.abv.dev" # US region
//ABV_BASE_URL = "https://eu.app.abv.dev" # EU region
Createinstrumentation.ts file and use dotenv package to load the variables. Additional parameters are provided to get trace visible in the UI immediately. ABV respects OpenTelemetry’s sampling decisions. You can configure a sampler in your OTEL SDK to control which traces are sent to ABV. This is useful for managing costs and reducing noise in high-volume applications. Here is an example of how to configure a TraceIdRatioBasedSampler to send only 20% of traces:
instrumentation.ts
import { NodeSDK } from "@opentelemetry/sdk-node";
import { ABVSpanProcessor } from "@abvdev/otel";
import { TraceIdRatioBasedSampler } from "@opentelemetry/sdk-trace-base";
import dotenv from "dotenv";
dotenv.config();

const sdk = new NodeSDK({
  // Sample 20% of all traces
  sampler: new TraceIdRatioBasedSampler(0.2),
  spanProcessors: [
    new ABVSpanProcessor({
      apiKey: process.env.ABV_API_KEY,
      baseUrl: process.env.ABV_BASE_URL,
      exportMode: "immediate",
      flushAt: 1,
      flushInterval: 1,
      additionalHeaders: {
        "Content-Type": "application/json",
        "Accept": "application/json"
      }
    })
  ],
});

sdk.start();
Import the instrumentation.ts file at the top of your application. See JS/TS SDK docs for more details.