Skip to main content

Intelligent Deferred Head Sampling for OpenTelemetry with policy-driven governance

Project description

Clarvynn OpenTelemetry Adapters

Policy-based governance for OpenTelemetry telemetry.

PyPI version License Python OpenTelemetry SDK


What is Clarvynn?

Clarvynn provides Deferred Head Sampling for OpenTelemetry. It acts as a Control Plane that enforces Purposeful Observability, ensuring you capture high-fidelity signal without the high-volume noise.

Result: Keep 100% of critical signals (errors, slow requests) while sampling out the noise that distracts your team and bloats your storage. This strategic reduction saves 60-80% on ingestion and indexing costs, reallocating budget back to engineering capacity.


Language Support

Language Status Adapter
Python Production Ready adapters/opentelemetry-python/
Java Planned -
Node.js Planned -
Go Planned -

Quick Start (Python)

1. Install

pip install clarvynn

2. Create Policy

# policy.yaml
sampling:
  base_rate: 0.01  # 1% of routine traffic

conditions:
  - name: errors
    when: "status_code >= 400"
  - name: slow_requests
    when: "duration_ms > 1000"

3. Run

export CLARVYNN_ENABLED=true
export CLARVYNN_POLICY_PATH=policy.yaml
opentelemetry-instrument python app.py

That's it. Clarvynn is now intelligently sampling your telemetry.


Key Features

  • Deferred Head Sampling - Decisions made after request completion
  • Policy-driven - Simple YAML configuration
  • Minimal overhead - < 50µs per span evaluation
  • Drop-in - Works with existing OTEL instrumentation
  • Distributed tracing - W3C TraceContext Level 2 support
  • Signal Improvement - High-Fidelity Signal, Low-Volume Noise
  • Log correlation - Logs automatically follow trace sampling

How It Works

Traditional sampling makes decisions before execution:

HEAD-BASED:  [Sample?] → Execute → [Don't know if it failed!]
                - Might drop errors

Clarvynn uses Deferred Head Sampling to decide after execution:

DEFERRED HEAD:  Execute → [Error? Slow?] → [Sample!]
                - Never miss critical signals

Example:

# Your policy
conditions:
  - name: errors
    when: "status_code >= 500"
  
# What happens:
Request → Execute → Status: 500 → Exported (error captured)
Request → Execute → Status: 200 → 1% chance (base_rate)

Documentation

Getting Started:

Python Adapter Docs:

Shared Documentation:


Architecture

clarvynn/
├── core/                          # Shared CPL engine (all languages)
│   ├── cpl_engine/                # Policy evaluation logic
│   ├── policies/                  # Example policies
│   └── specs/                     # Language-agnostic specs
│
└── adapters/                      # Language-specific adapters
    ├── opentelemetry-python/      # Production (ready) ready
    ├── opentelemetry-java/        # Planned
    ├── opentelemetry-nodejs/      # Planned
    └── opentelemetry-go/          # Planned

Design Philosophy:

  • core/ = Language-agnostic policy engine and specifications
  • adapters/ = Language-specific OpenTelemetry integrations

Each adapter uses the same CPL policy format, ensuring consistent behavior across languages.

Non-Blocking Architecture (Python)

Clarvynn operates as a Lightweight Adapter that ensures zero impact on application performance by using a fully non-blocking export pipeline:

Request Ends
  ↓
ClarvynnSpanProcessor (Sync, ~2µs)
  ├─ 1. Evaluate CPL Policy (Keep/Drop)
  └─ 2. Inject TraceState (W3C Level 2)
  ↓
BatchExporterAdapter (Async Queue)
  ↓
Background Thread (Async)
  ↓
OTLPSpanExporter (Network I/O)

This architecture ensures that governance decisions happen synchronously (to decide before queuing), but network I/O happens asynchronously (to avoid blocking the application).


Example: Multi-Service Deployment

Deploy the same policy across all services:

# policy.yaml (use everywhere)
sampling:
  base_rate: 0.01

  conditions:
    - name: errors
      when: "status_code >= 400"
    - name: slow_requests
    when: "duration_ms > 1000"

What happens:

API Gateway (Python):
  └─ Error (500) → Exported + marked critical

Auth Service (Java):       # Coming Soon
  └─ Sees critical trace → Exported

Database Service (Go):     # Coming Soon
  └─ Sees critical trace → Exported

Result: Complete trace captured end-to-end

Testing

Clarvynn has comprehensive test coverage (296 tests, 100% pass rate):

# Install test dependencies
pip install -r requirements-dev.txt

# Run all tests
pytest

# Run with coverage
pytest --cov=core --cov=clarvynn --cov-report=html

See tests/README.md for detailed testing guide.


Compatibility

Component Supported Versions
Python 3.9, 3.10, 3.11, 3.12, 3.13
OpenTelemetry SDK 1.25.0 - 1.39.0 (tested)
OpenTelemetry API 1.25.0 - 1.39.0

Compatibility is verified with automated testing. See scripts/test_otel_compatibility.py.


Contributing

We welcome contributions! See CONTRIBUTING.md.

Adding a new language adapter? See Adapter Development Guide.


License

Apache 2.0 - See LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clarvynn-0.2.1.tar.gz (55.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clarvynn-0.2.1-py3-none-any.whl (56.4 kB view details)

Uploaded Python 3

File details

Details for the file clarvynn-0.2.1.tar.gz.

File metadata

  • Download URL: clarvynn-0.2.1.tar.gz
  • Upload date:
  • Size: 55.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for clarvynn-0.2.1.tar.gz
Algorithm Hash digest
SHA256 4a7291d94bf8493f0aefbf0449470bb07538d9140c29f8af7b2bd4e35e9c4c1b
MD5 f9b17189bf7cf3f40ece46c75337e88e
BLAKE2b-256 ee76c8efee3c6047114ca6a3a168dd84eebf9fa3450b3620ba05b5a2ba26f57a

See more details on using hashes here.

Provenance

The following attestation bundles were made for clarvynn-0.2.1.tar.gz:

Publisher: publish.yml on Clarvynn/Clarvynn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clarvynn-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: clarvynn-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 56.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for clarvynn-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4ef8b66ae1431b608690e44ac22b5739ff2b1328f507bcd9346688e153e7eac4
MD5 db9d49d56e3ae493b7c631127b3f3a89
BLAKE2b-256 8e24401c95912f35e08fdf5c5f642832d609c6547f0603aac36c11c6c5ffd472

See more details on using hashes here.

Provenance

The following attestation bundles were made for clarvynn-0.2.1-py3-none-any.whl:

Publisher: publish.yml on Clarvynn/Clarvynn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page