No project description provided
Project description
otelmini
A minimal OpenTelemetry Python SDK with no extra dependencies. Exports traces, metrics, and logs via OTLP/HTTP (JSON encoding). Ideal for constrained environments like AWS Lambda or anywhere minimal production impact is valued.
Features
- Traces, metrics, and logs support
- OTLP/HTTP with JSON encoding
- Single dependency:
opentelemetry-api - Batch processing with configurable size and interval
- Sampling (AlwaysOn, AlwaysOff, TraceIdRatioBased, ParentBased)
- Trace-log correlation
- Auto-instrumentation support
- W3C TraceContext and Baggage propagation
Installation
pip install otelmini
Quick Start
Write your application using the OpenTelemetry API:
# my_app.py
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("my-operation"):
# your code here
pass
Run it with otelmini's auto-instrumentation using the installed otel command:
OTEL_SERVICE_NAME=my-service otel python my_app.py
That's it -- traces are exported to localhost:4318 via OTLP/HTTP (JSON).
Using Instrumentation Libraries
otelmini automatically discovers and activates any installed OpenTelemetry instrumentation libraries:
pip install otelmini opentelemetry-instrumentation-requests
OTEL_SERVICE_NAME=my-service otel python my_app.py
All HTTP requests made with the requests library will now be traced automatically. This works with any instrumentation from opentelemetry-python-contrib.
Why otelmini?
otelmini was designed with minimalism as a goal, giving you insight into your applications via any of the standard or genai instrumentation libraries while staying out of the way. No dependencies other than opentelemetry-api, which you have to use anyway if you're using OTel at all.
This is useful when:
- Avoiding dependency conflicts -- your project requires a different version of protobuf or requests than OTel exporters expect
- Minimizing package size -- serverless environments like AWS Lambda have size limits
- Reducing cold start time -- fewer modules to load means faster Lambda cold starts
- Reducing attack surface -- fewer dependencies means less to audit and maintain
- Improving performance -- less code means potentially lower memory impact and faster execution
Comparison with OpenTelemetry Python
Comparing otelmini to opentelemetry-distro + opentelemetry-exporter-otlp-proto-http:
| Metric | otel-python | otelmini |
|---|---|---|
| Third-party dependencies* | 9 | 0 |
| Lines of Python | ~47K | ~3.1K |
* Excluding opentelemetry packages and Python stdlib backports
Note: Upstream otel-python doesn't support JSON/HTTP -- their OTLP exporters require protobuf.
AWS Lambda Performance
Tested using SAM CLI with Python 3.11 runtime:
| Metric | otel-python | otelmini | Improvement |
|---|---|---|---|
| Package size | 7.0 MB | 824 KB | 8.5x smaller |
| Cold start (init) | ~256 ms | ~80 ms | 3x faster |
| Import time | ~287 ms | ~108 ms | 2.7x faster |
See examples/lambda-comparison/ to run the benchmark yourself.
Third-party packages installed by otel-python
- protobuf, googleapis-common-protos
- requests, urllib3, certifi, charset-normalizer, idna
- wrapt, packaging
Environment Variables
| Variable | Description | Default |
|---|---|---|
OTEL_SERVICE_NAME |
Service name for resource | unknown_service |
OTEL_RESOURCE_ATTRIBUTES |
Additional resource attributes (key=value,key2=value2) |
|
OTEL_TRACES_EXPORTER |
Traces exporter (otlp, console, none) |
otlp |
OTEL_METRICS_EXPORTER |
Metrics exporter (otlp, console, none) |
otlp |
OTEL_LOGS_EXPORTER |
Logs exporter (otlp, console, none) |
otlp |
OTEL_EXPORTER_OTLP_ENDPOINT |
Base OTLP endpoint | http://localhost:4318 |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
Traces endpoint (overrides base) | |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT |
Metrics endpoint (overrides base) | |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
Logs endpoint (overrides base) | |
OTEL_BSP_MAX_EXPORT_BATCH_SIZE |
Batch processor max batch size | 512 |
OTEL_BSP_SCHEDULE_DELAY |
Batch processor schedule delay (ms) | 5000 |
OTEL_METRIC_EXPORT_INTERVAL |
Metric export interval (ms) | 10000 |
OTEL_SEMCONV_STABILITY_OPT_IN |
Semantic conventions to use (comma-separated) | http,database |
otelmini defaults to stable (new) semantic conventions. Valid values: http, http/dup, database, database/dup, gen_ai_latest_experimental. Set to http/dup,database/dup to emit both old and new attributes, or set to empty string to use old conventions only.
Third-party exporters can be installed and will be discovered via entry points. Use otlp_json_http for explicit JSON/HTTP selection.
Custom Exporters
To create a custom exporter, implement the Exporter interface and register via entry points.
Interface
from otelmini.export import Exporter, ExportResult
class MySpanExporter(Exporter):
def __init__(self, **kwargs):
# Accept endpoint and other kwargs
self.endpoint = kwargs.get("endpoint")
def export(self, items):
# items is Sequence[MiniSpan] for traces
# Return ExportResult.SUCCESS or ExportResult.FAILURE
return ExportResult.SUCCESS
Data types passed to export():
- Traces:
Sequence[MiniSpan]fromotelmini.types - Metrics:
MetricsDatafromotelmini.point - Logs:
Sequence[MiniLogRecord]fromotelmini.log
Registration
In your package's pyproject.toml:
[project.entry-points.opentelemetry_traces_exporter]
my_exporter = "my_package:MySpanExporter"
[project.entry-points.opentelemetry_metrics_exporter]
my_exporter = "my_package:MyMetricExporter"
[project.entry-points.opentelemetry_logs_exporter]
my_exporter = "my_package:MyLogExporter"
Then users can select it via environment variable:
OTEL_TRACES_EXPORTER=my_exporter otel python app.py
Spec Compliance
See SPEC_COMPLIANCE.md for details on OpenTelemetry specification compliance.
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file otelmini-0.4.4.tar.gz.
File metadata
- Download URL: otelmini-0.4.4.tar.gz
- Upload date:
- Size: 54.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.13.1 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a1eeb4b3eb9b2b8ed4006038444a00fbeb77681ef2fdb7ff3c3ea9a22398e7b
|
|
| MD5 |
f890119a29e9e948dff1d9cd3524fb59
|
|
| BLAKE2b-256 |
20028a864e247ca9f946f59c635ca724119872fd2b00376b4e00f2bcaf76422a
|
File details
Details for the file otelmini-0.4.4-py3-none-any.whl.
File metadata
- Download URL: otelmini-0.4.4-py3-none-any.whl
- Upload date:
- Size: 35.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.13.1 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef6c9cef04a952f432df58e45ea9186bbdcfd3fba943378eb8666c4b30a0fad7
|
|
| MD5 |
a953021a15667bd03905ec7c309ee901
|
|
| BLAKE2b-256 |
7a0bccbccc6c2f178ced289f0089c3751d61960e95c285ed262bfb8f2fbb3c52
|