MyObservability

🟦 Step by Step Setup

🟩 Step 1: Import SDK and setup Exporter, Processors for Span/Metric

🟥 Import Exporters

Send telemetry to the OpenTelemetry Collector to make sure it’s exported correctly.

🟥 Import Processors

The OpenTelemetry SDK provides a set of default span and log record processors, that allow you to either emit spans one-by-on (“simple”) or batched. Using batching is recommended, but if you do not want to batch your spans or log records, you can use a simple processor

Ex:

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import BatchSpanProcessor

from opentelemetry import metrics
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader

🟩 Step 2: Create Pipeline (Trace or Metrics) to configure Exporter, Processors

  1. Main responsibility of the pipeline is to push traces/metrics to one (or more) Exporter(s) via processors. Create a Processor and passed the exporter to the constructor to connect both.

Processor

Use one of the below method.

In most cases, stick with BatchSpanProcessor over SimpleSpanProcessor.

Exporter

(Metrics) OTLP Metrics Exporter is a Push Metric Exporter which sends metrics via the OpenTelemetry Protocol. (Traces) use either Synchronous (Blocks the program execution to forward spans as soon as they are generated) or Asynchronous (Maintains a buffer for completed spans and export at regular intervals) method to export traces.

Ex:

tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="<traces-endpoint>/v1/traces"))
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)

reader = PeriodicExportingMetricReader(
    OTLPMetricExporter(endpoint="<traces-endpoint>/v1/metrics")
)
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)

🟩 Step 3: Import required API, SDK & Providers

  1. Import OTel API

    Ex:

     from opentelemetry import metrics as metric_api
     from opentelemetry import trace as trace_api
    
  2. Import Providers

     from opentelemetry.sdk.trace import TracerProvider
     from opentelemetry.sdk.metrics import MeterProvider
    
  3. (Metrics) Import Metric Instruments from metrics API.

    This is used to define telemetry data points

     from opentelemetry.metrics import Counter, Histogram, ObservableGauge
    

🟩 Step 4: Tracer (For Traces) / Meter (for Metrics)

  1. (Traces) Configure Resources

     # Service name is required for most backends
     resource = Resource.create(attributes={
         SERVICE_NAME: "your-service-name"
     })
    
  2. Create TraceProvider/MeterProvider to obtain Tracer/Meter.

     tracerProvider = TracerProvider(resource=resource)
     processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="<traces-endpoint>/v1/traces"))
     tracerProvider.add_span_processor(processor)
     trace.set_tracer_provider(tracerProvider)
    
     reader = PeriodicExportingMetricReader(
         OTLPMetricExporter(endpoint="<traces-endpoint>/v1/metrics")
     )
     meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
     metrics.set_meter_provider(meterProvider)
    

🟩 Step 5: Create Tracer & Meter from providers

Create tracer from the global tracer/meter provider.

```python
# Creates a tracer from the global tracer provider
tracer = trace.get_tracer("my.tracer.name")
```

```python
# Creates a meter from the global meter provider
meter = metrics.get_meter("my.meter.name")
```

🟩 Step 6: Create spans & metrics

Generating trace and metrics are different from this step.

Spans

Metrics


Kubernetes

✅ Main Page: Click Here