Skip to main content

A simple Python SDK for exporting OpenTelemetry logs, metrics, and traces to OpenObserve

Project description

OpenObserve Telemetry SDK

A simple and lightweight Python SDK for exporting OpenTelemetry logs, metrics, and traces to OpenObserve.

Features

  • Easy Integration – Minimal setup with automatic instrumentation for popular libraries
  • Multi-Signal Support – Capture logs, metrics, and traces simultaneously
  • Flexible Protocol – Choose between HTTP/Protobuf (default) or gRPC
  • Lightweight – Minimal dependencies, designed for production use
  • OpenTelemetry Native – Built on OpenTelemetry standards for compatibility

Quick Start

Generate auth token:

echo -n "root@example.com:Complexpass#123" | base64
# Output: cm9vdEBleGFtcGxlLmNvbTpDb21wbGV4cGFzcyMxMjM=

Set environment variables:

# OpenObserve Configuration (Required)
export OPENOBSERVE_AUTH_TOKEN="Basic cm9vdEBleGFtcGxlLmNvbTpDb21wbGV4cGFzcyMxMjM="

# Optional OpenObserve settings (defaults shown)
export OPENOBSERVE_URL="http://localhost:5080"
export OPENOBSERVE_ORG="default"

# API keys for services you're using (optional, based on instrumentation)
export OPENAI_API_KEY="your-openai-key"
export ANTHROPIC_API_KEY="your-anthropic-key"

Install dependencies:

pip install openobserve-telemetry-sdk openai opentelemetry-instrumentation-openai

Quick Example – OpenAI Instrumentation:

from opentelemetry.instrumentation.openai import OpenAIInstrumentor
from openobserve import openobserve_init

# Initialize OpenObserve and instrument OpenAI
OpenAIInstrumentor().instrument()
openobserve_init()

from openai import OpenAI

# Use OpenAI as normal - traces are automatically captured
client = OpenAI()
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

Quick Example – Anthropic Instrumentation:

from opentelemetry.instrumentation.anthropic import AnthropicInstrumentor
from openobserve import openobserve_init

# Initialize OpenObserve and instrument Anthropic
AnthropicInstrumentor().instrument()
openobserve_init()

from anthropic import Anthropic

# Use Claude as normal - traces are automatically captured
client = Anthropic()
response = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.content[0].text)

Selecting Signals

By default, openobserve_init() initializes all signals (logs, metrics, traces). You can also initialize selectively:

# All signals (default)
openobserve_init()

# Specific signals only
openobserve_init(logs=True)
openobserve_init(metrics=True)
openobserve_init(traces=True)

# Combine signals
openobserve_init(logs=True, metrics=True)  # no traces

Note: For logs, you still need to bridge Python's standard logging module:

import logging
from opentelemetry.sdk._logs import LoggingHandler

openobserve_init(logs=True)
handler = LoggingHandler()
logging.getLogger().addHandler(handler)

Environment Variables

Variable Required Description
OPENOBSERVE_URL No OpenObserve base URL (default: "http://localhost:5080")
OPENOBSERVE_ORG No Organization name (default: "default")
OPENOBSERVE_AUTH_TOKEN Authorization token (Format: "Basic ")
OPENOBSERVE_TIMEOUT No Request timeout in seconds (default: 30)
OPENOBSERVE_ENABLED No Enable/disable tracing (default: "true")
OPENOBSERVE_PROTOCOL No Protocol: "grpc" or "http/protobuf" (default: "http/protobuf")
OPENOBSERVE_TRACES_STREAM_NAME No Stream name for traces (default: "default")
OPENOBSERVE_LOGS_STREAM_NAME No Stream name for logs (default: "default")

Protocol Configuration Notes

HTTP/Protobuf (default)

  • Uses HTTP with Protocol Buffers encoding.
  • Works with both HTTP and HTTPS endpoints.
  • Organization is specified in the URL path: /api/{org}/v1/{signal}, where {signal} is traces, logs, or metrics.
  • Automatically adds the stream-name header from OPENOBSERVE_TRACES_STREAM_NAME for traces and OPENOBSERVE_LOGS_STREAM_NAME for logs.
  • Standard HTTP header handling (preserves case).

gRPC

  • Uses gRPC protocol with automatic configuration:
    • Organization is passed as a header (not in the URL).
    • Automatically adds required headers:
      • organization: Set to OPENOBSERVE_ORG.
      • stream-name: Set to OPENOBSERVE_TRACES_STREAM_NAME for traces and OPENOBSERVE_LOGS_STREAM_NAME for logs.
    • Headers are normalized to lowercase per gRPC specification.
    • TLS is automatically configured based on URL scheme:
      • http:// URLs use insecure (non-TLS) connections.
      • https:// URLs use secure (TLS) connections.

Installation

Choose your preferred installation method:

# From PyPI (recommended)
pip install openobserve-telemetry-sdk

# From source (development)
pip install -e .

# Using requirements.txt
pip install -r requirements.txt

Both HTTP/Protobuf (default) and gRPC protocols are included in all installations.

Supported Instruments

The SDK works with OpenTelemetry instrumentation packages:

  • OpenAI – Use with opentelemetry-instrumentation-openai for API call traces
  • Anthropic – Use with opentelemetry-instrumentation-anthropic for Claude API traces
  • LangChain – Use with opentelemetry-instrumentation-langchain for LLM chain tracing
  • Standard Python Logging – Built-in support via LoggingHandler
  • Metrics – OpenTelemetry counters, histograms, and up/down counters

Examples

Run any of these examples to see the SDK in action. First, ensure environment variables are set:

# Traces with OpenAI
python examples/openai_example.py

# Logs with standard Python logging
python examples/logs_example.py

# Metrics (counters, histograms, up/down counters)
python examples/metrics_example.py

# LangChain Q&A with session tracking
python examples/session_demo.py

See the examples/ directory for more samples including LangChain RAG chains and user tracking patterns.

Contributing

We welcome contributions! Please feel free to open issues or submit pull requests on GitHub.

Support

License

MIT

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

openobserve_telemetry_sdk-0.1.0.tar.gz (204.8 kB view details)

Uploaded Source

Built Distribution

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

openobserve_telemetry_sdk-0.1.0-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for openobserve_telemetry_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b72800c290b8a9ab537686db4bdfc00c0c3b5c2461fc512e01d41e9dd1ca7af6
MD5 c129fae24a3ccd4b2ade5fdb9748cfb6
BLAKE2b-256 fc9f80f98ac7984a05100dd27c09e9dce2b8049450dd5a7c13d4a389094bcbad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openobserve_telemetry_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 66ec75f41f2b4ad0d25fe0c34f1d98677b3e71396ca148066a8bc7e120684abc
MD5 a26296d7979379fa30892b730e54d257
BLAKE2b-256 69ed466529bd711ffa5a5ec71828e3a9ffb7a10a3beb73181c028940c471c948

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