OpenTelemetry Collector Exporter

The OpenTelemetry Collector Exporter allows to export OpenTelemetry traces to OpenTelemetry Collector.

from opentelemetry import trace
from opentelemetry.ext.otcollector.trace_exporter  import CollectorSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchExportSpanProcessor


# create a CollectorSpanExporter
collector_exporter = CollectorSpanExporter(
    # optional:
    # endpoint="myCollectorUrl:55678",
    # service_name="test_service",
    # host_name="machine/container name",
)

# Create a BatchExportSpanProcessor and add the exporter to it
span_processor = BatchExportSpanProcessor(collector_exporter)

# Configure the tracer to use the collector exporter
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(span_processor)
tracer = TracerProvider().get_tracer(__name__)

with tracer.start_as_current_span("foo"):
    print("Hello world!")

Metrics Usage

The OpenTelemetry Collector Exporter allows to export OpenTelemetry metrics to OpenTelemetry Collector.

from opentelemetry import metrics
from opentelemetry.ext.otcollector.metrics_exporter import CollectorMetricsExporter
from opentelemetry.sdk.metrics import Counter, MeterProvider
from opentelemetry.sdk.metrics.export.controller import PushController


# create a CollectorMetricsExporter
collector_exporter = CollectorMetricsExporter(
    # optional:
    # endpoint="myCollectorUrl:55678",
    # service_name="test_service",
    # host_name="machine/container name",
)

# Meter is responsible for creating and recording metrics
metrics.set_meter_provider(MeterProvider())
meter = metrics.get_meter(__name__)
# controller collects metrics created from meter and exports it via the
# exporter every interval
controller = PushController(meter, collector_exporter, 5)
counter = meter.create_metric(
    "requests",
    "number of requests",
    "requests",
    int,
    Counter,
    ("environment",),
)
# Labels are used to identify key-values that are associated with a specific
# metric that you want to record. These are useful for pre-aggregation and can
# be used to store custom dimensions pertaining to a metric
labels = {"environment": "staging"}

counter.add(25, labels)