Skip to main content

Unified telemetry library for the provide.io ecosystem — structured logging, distributed tracing, and metrics

Project description

Provide Telemetry

Unified telemetry library for structured logging, distributed tracing, and metrics across Python and TypeScript. Graceful OTel degradation — works without OpenTelemetry installed, activates full export when OTel SDK is present.

1. 🐍 CI — Python 2. 🟦 CI — TypeScript 5. 🔒 CodeQL

Install

Python:

pip install provide-telemetry              # core (structlog)
pip install "provide-telemetry[otel]"      # + OpenTelemetry export

TypeScript:

npm install @provide-io/telemetry             # core (pino + @opentelemetry/api)

Quick Start

Python:

from provide.telemetry import setup_telemetry, shutdown_telemetry, get_logger, event

setup_telemetry()
log = get_logger(__name__)
log.info("app.start.ok", request_id="req-1")
shutdown_telemetry()

TypeScript:

import { setupTelemetry, getLogger, shutdownTelemetry } from '@provide-io/telemetry';

setupTelemetry({ serviceName: 'my-app' });
const log = getLogger('api');
log.info({ event: 'app.start.ok', requestId: 'req-1' });
await shutdownTelemetry();

Both languages share the same API surface, event naming conventions, and configuration environment variables.

Configuration

All runtime config is via environment variables:

Variable Default Description
PROVIDE_TELEMETRY_SERVICE_NAME provide-service Service identity
PROVIDE_LOG_LEVEL INFO Log level
PROVIDE_LOG_FORMAT console Renderer: console, json, or pretty
PROVIDE_TELEMETRY_ENV dev Deployment environment
PROVIDE_TELEMETRY_VERSION 0.0.0 Service version
PROVIDE_TRACE_ENABLED true Enable OTel tracing
PROVIDE_METRICS_ENABLED true Enable OTel metrics

See the Configuration Reference for all 60+ environment variables.

Event Naming

Event names follow the DA(R)S pattern — Domain, Action, (Resource), Status — as 3 or 4 dot-separated lowercase segments. event() returns a structured Event (a str subclass with .domain, .action, .resource, and .status fields):

# Python
log.info("auth.login.success", user_id="u-123")
log.info(event("auth", "login", "failed"), reason="bad_password")
// TypeScript
log.info({ event: 'auth.login.success', userId: 'u-123' });

See Conventions for full naming rules.

API Surface

Both languages export equivalent APIs:

Category Functions
Lifecycle setup_telemetry(), shutdown_telemetry()
Logging get_logger(), bind_context(), clear_context()
Tracing get_tracer(), trace (decorator/wrapper), extract_w3c_context()
Metrics counter(), gauge(), histogram()
Policies set_sampling_policy(), set_queue_policy(), set_exporter_policy()
Safety register_cardinality_limit(), register_pii_rule(), replace_pii_rules(), get_pii_rules()
Health get_health_snapshot()
Runtime update_runtime_config(), reconfigure_telemetry(), reload_runtime_from_env()

Full reference: Python API | TypeScript API

Polyglot Architecture

provide-telemetry/
  src/provide/telemetry/    # Python package
  typescript/             # TypeScript package (@provide-io/telemetry)
  spec/                   # Canonical API spec — all languages validate against it
  e2e/                    # Cross-language E2E tests (W3C trace propagation)

A shared spec/telemetry-api.yaml defines the required API surface. CI validates that both Python and TypeScript exports conform to it. Cross-language distributed tracing is tested end-to-end via W3C traceparent propagation.

Quality

  • 100% branch coverage (Python + TypeScript)
  • 100% mutation kill score (mutmut + Stryker)
  • Strict type checking (mypy + ty + tsc)
  • CodeQL SAST scanning
  • SHA-pinned GitHub Actions
  • Sigstore artifact signing
  • CycloneDX SBOM on releases

Documentation

License

Apache-2.0. See LICENSES/.

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

provide_telemetry-0.2.2.tar.gz (53.3 kB view details)

Uploaded Source

Built Distribution

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

provide_telemetry-0.2.2-py3-none-any.whl (63.9 kB view details)

Uploaded Python 3

File details

Details for the file provide_telemetry-0.2.2.tar.gz.

File metadata

  • Download URL: provide_telemetry-0.2.2.tar.gz
  • Upload date:
  • Size: 53.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for provide_telemetry-0.2.2.tar.gz
Algorithm Hash digest
SHA256 20f7b3ba8496503d4b836b2c76b9f8dfbef193377c85857ca1143fbef88b6434
MD5 2cbb85fd51945dea54fc9040606d8941
BLAKE2b-256 fa8f244deea17dc266d61d369b2966378cb3efa0780f85ef123dd20c4829e1db

See more details on using hashes here.

File details

Details for the file provide_telemetry-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: provide_telemetry-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 63.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for provide_telemetry-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e233dccfdf7551ec9a0a383607de7a21ef8c9a62cfcc5cee7cc35192038cea6a
MD5 06e346fbe41d9a212c6a4b590b02f81e
BLAKE2b-256 61fb87dbea8a4c6518e5cb3de5c0431cf4a3ba895e45d3615b4830999e0914af

See more details on using hashes here.

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