Skip to main content

Telemetry utilities and shared components for Pharia projects

Project description

Pharia Telemetry

Python PyPI version License: MIT CI Coverage

A clean, minimal OpenTelemetry foundation library for Pharia services providing observability, tracing, and context propagation utilities.

๐ŸŽฏ What is pharia-telemetry?

pharia-telemetry provides a simple, focused foundation for observability in Pharia services:

  • Context Propagation: User and session context flows automatically across all service calls
  • Structured Logging: Logs automatically include trace IDs and user context
  • OpenTelemetry Setup: Minimal, high-level setup for distributed tracing
  • Standardized Constants: Clean, namespaced constants for consistent telemetry

Key Principle: pharia-telemetry handles the foundation with minimal API surface, you add framework-specific auto-instrumentation.

๐Ÿ“ฆ Installation

Requires Python 3.10+.

# Basic installation
pip install pharia-telemetry

# With structlog support (for structured logging)
pip install pharia-telemetry[structlog]

Install from GitHub (pinned to commit)

For services that depend on a specific commit from the GitHub repo, use a direct VCS reference:

# HTTPS (recommended)
pip install "pharia-telemetry @ git+https://github.com/aleph-alpha/pharia-telemetry.git@<commit-sha>"

# SSH (if you have SSH keys configured)
pip install "pharia-telemetry @ git+ssh://git@github.com/aleph-alpha/pharia-telemetry.git@<commit-sha>"

# With optional extras
pip install "pharia-telemetry[structlog] @ git+https://github.com/aleph-alpha/pharia-telemetry.git@<commit-sha>"

In requirements files (PEP 508):

pharia-telemetry @ git+https://github.com/aleph-alpha/pharia-telemetry.git@<commit-sha>
pharia-telemetry[structlog] @ git+https://github.com/aleph-alpha/pharia-telemetry.git@<commit-sha>

๐Ÿš€ 30-Second Setup

from pharia_telemetry import setup_telemetry, constants, set_baggage_item

# 1. One-line setup
setup_telemetry("my-service", service_version="1.0.0")

# 2. Set context that flows everywhere
set_baggage_item(constants.Baggage.USER_ID, "user-123")

# 3. Add framework instrumentation (optional)
# FastAPIInstrumentor.instrument_app(app)  # for FastAPI
# SQLAlchemyInstrumentor().instrument()    # for databases

Result: Your service now has distributed tracing with user context flowing through all operations!

๐ŸŽฏ Clean API Design

pharia-telemetry features a clean, focused API designed for ease of use:

from pharia_telemetry import (
    # Core setup (essential)
    setup_telemetry,           # One-function setup

    # GenAI instrumentation (most users)
    create_chat_span,          # Smart sync/async chat spans
    create_embeddings_span,    # Smart sync/async embeddings spans
    create_tool_execution_span,# Smart sync/async tool spans
    set_genai_span_usage,      # Token usage tracking
    set_genai_span_response,   # Response metadata

    # Context propagation (advanced)
    set_baggage_item,          # Set context for propagation
    get_baggage_item,          # Get propagated context

    # Logging integration (optional)
    create_context_injector,   # Custom logging integration
)

๐Ÿ“š Documentation Guide

Choose your path based on what you need:

๐Ÿ†• New to pharia-telemetry?

Start here โ†’ Getting Started Guide

  • Basic setup and first examples
  • Understanding the concepts
  • Your first instrumented service

๐Ÿ”Œ Want automatic instrumentation?

Go to โ†’ Auto-Instrumentation Guide

  • Available instrumentation packages
  • FastAPI, SQLAlchemy, HTTPX setup
  • When auto-instrumentation works (and when it doesn't)

๐Ÿ› ๏ธ Need manual control?

See โ†’ Manual Instrumentation Guide

  • SSE streaming issues and solutions
  • HTTP/2 compatibility problems
  • Custom span management
  • Performance optimization

๐Ÿงณ Working with context propagation?

Read โ†’ Baggage & Context Guide

  • User and session context
  • Cross-service correlation
  • Standardized baggage keys
  • Custom context patterns

๐Ÿ“Š Setting up logging?

Check โ†’ Structured Logging Guide

  • Automatic trace correlation
  • Log configuration patterns
  • Integration with structlog

๐Ÿค– Building GenAI applications?

Visit โ†’ GenAI Spans Guide

  • OpenTelemetry semantic conventions for AI
  • Automatic span attributes for models
  • Token usage tracking
  • Agent and tool instrumentation

โš™๏ธ Need advanced configuration?

Visit โ†’ Configuration Guide

  • Environment variables
  • OTLP exporter setup
  • Custom resource attributes
  • Production deployment

๐Ÿ—๏ธ Building integrations?

Browse โ†’ Integration Examples

  • Complete FastAPI service
  • Microservice communication
  • Background task processing
  • Real-world patterns

๐Ÿ› Having issues?

Try โ†’ Troubleshooting Guide

  • Common problems and solutions
  • Debug techniques
  • Performance considerations

๐ŸŒŸ Core Features

  • ๐Ÿ”ฌ OpenTelemetry Integration: Minimal setup utilities for distributed tracing
  • ๐Ÿงณ Baggage Management: Context propagation across service boundaries
  • ๐Ÿ“Š Structured Logging: Automatic trace correlation for log records
  • ๐Ÿค– Smart GenAI Spans: Auto-detecting sync/async convenience functions for AI operations
  • ๐Ÿ”ง Production Ready: Graceful degradation when OpenTelemetry is unavailable
  • ๐Ÿ“ˆ Pharia Standards: Standardized constants and conventions across all services
  • ๐ŸŽฏ Focused API: Clean, intuitive functions for common use cases

๐Ÿ›๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         Your Application + Auto         โ”‚
โ”‚           Instrumentation              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚        pharia-telemetry Foundation      โ”‚
โ”‚     (Propagators, Baggage, Logging)     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚           OpenTelemetry SDK             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚        OTLP Exporters & Backend        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ” Quick Examples

Context Propagation

from pharia_telemetry import constants, set_baggage_item

# Set once, flows everywhere
set_baggage_item(constants.Baggage.USER_ID, "user-123")
set_baggage_item(constants.Baggage.SESSION_ID, "session-456")

Structured Logging

import structlog
from pharia_telemetry import add_context_to_logs

# Easy integration with any logging framework
injector = add_context_to_logs("structlog")
structlog.configure(processors=[
    injector,  # Adds trace_id + baggage automatically
    structlog.processors.JSONRenderer(),
])

GenAI Operations

from pharia_telemetry import create_chat_span, create_embeddings_span
from pharia_telemetry.sem_conv.gen_ai import GenAI

# Smart convenience functions that auto-detect sync/async context
with create_chat_span(
    model="llama-3.1-8B",
    agent_id=GenAI.Values.PhariaAgentId.QA_CHAT,
    conversation_id="conv-123"
) as span:
    # Works in both sync and async contexts
    pass

# Also works seamlessly in async contexts
async with create_embeddings_span(model="text-embedding-3-small") as span:
    # Automatic context detection
    pass

Clean Constants Structure

from pharia_telemetry import constants

# Namespaced and organized
user_id = constants.Baggage.USER_ID                    # "app.user.id"
qa_chat = constants.Baggage.Values.UserIntent.QA_CHAT  # "pharia_qa_chat"

# GenAI constants in separate module
model = constants.GenAI.REQUEST_MODEL                  # "gen_ai.request.model"
chat_op = constants.GenAI.Values.OperationName.CHAT    # "chat"

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

๐Ÿ“ž Support

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

pharia_telemetry-0.1.0.tar.gz (77.2 kB view details)

Uploaded Source

Built Distribution

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

pharia_telemetry-0.1.0-py3-none-any.whl (27.7 kB view details)

Uploaded Python 3

File details

Details for the file pharia_telemetry-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for pharia_telemetry-0.1.0.tar.gz
Algorithm Hash digest
SHA256 df3251d815dc7f03fc3df949ef2601fb6d47ad6ad01821602a9330d874995ef1
MD5 847c82aa0e5579452d62753283aa5311
BLAKE2b-256 250358280848407b9baa87cd898e03dd44c0b1f5d6516eeba8f27b43a870d449

See more details on using hashes here.

Provenance

The following attestation bundles were made for pharia_telemetry-0.1.0.tar.gz:

Publisher: release-please.yml on Aleph-Alpha/pharia-telemetry

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

File details

Details for the file pharia_telemetry-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pharia_telemetry-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b33a1f1dc52a767732d02b740afa687804f28978ef4b40333f41784605959ded
MD5 67200646587b9f9b43d064cceb327a54
BLAKE2b-256 d4a461bc1fe340fc152d8e289d8297fa409b7e28eea70ff321bf593d9be84174

See more details on using hashes here.

Provenance

The following attestation bundles were made for pharia_telemetry-0.1.0-py3-none-any.whl:

Publisher: release-please.yml on Aleph-Alpha/pharia-telemetry

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