Backend: Error Monitoring
Backend: Logging
Go
JS
Python
Ruby
Java
Rust
Hosting Providers
Elixir
Backend: Tracing
Mobile
Native OpenTelemetry
Fullstack Frameworks
Overview
Self Host & Local Dev
Menu
Logging in Python with OpenTelemetry
Learn how to set up highlight.io with logs from Python using OpenTelemetry.
1
Install OpenTelemetry
Install OpenTelemetry in your Python environment.
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp opentelemetry-instrumentation
2
Set up OpenTelemetry for logging.
Configure OpenTelemetry to send logs to highlight.io without requiring the Highlight SDK.
import logging
from opentelemetry._logs import set_logger_provider
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.sdk.resources import Resource
import sys
# Define the service name and environment
service_name = "my-service"
environment = "production"
otel_endpoint = "https://otel.highlight.io:4317"
# Set up the logger provider with the resource
logger_provider = LoggerProvider(resource=Resource.create(
{
"service.name": service_name,
"highlight.project_id": "<YOUR_PROJECT_ID>",
"environment": environment,
}
))
set_logger_provider(logger_provider)
# Configure the OTLP log exporter
exporter = OTLPLogExporter(endpoint=otel_endpoint, insecure=True)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
# Set up the logger
logger = logging.getLogger(service_name)
logger.setLevel(logging.DEBUG)
# Add the OpenTelemetry logging handler
handler = LoggingHandler(level=logging.DEBUG, logger_provider=logger_provider)
logger.addHandler(handler)
# Add console handler for stdout (optional)
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
3
Verify your backend logs are being recorded.
Visit the highlight logs portal and check that backend logs are coming in.
4
Set up OpenTelemetry for tracing.
Configure OpenTelemetry to send traces to highlight.io without requiring the Highlight SDK.
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
# Define the service name and environment
service_name = "my-service"
environment = "production"
otel_endpoint = "https://otel.highlight.io:4317"
# Create a resource with service name and highlight project ID
provider = TracerProvider(resource=Resource.create(
{
"service.name": service_name,
"highlight.project_id": "<YOUR_PROJECT_ID>",
"environment": environment,
}
))
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint=otel_endpoint, insecure=True))
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
tracer = trace.get_tracer(service_name)
5
Verify your backend traces are being recorded.
Visit the highlight traces portal and check that backend traces are coming in.
6
Send metrics using OpenTelemetry
Metrics are reported via OpenTelemetry metrics methods; this example will send a simple count metric. For a full guide on how to send metrics, check out the OpenTelemetry Python docs.
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.resources import Resource
service_name = "my-service"
environment = "production"
otel_endpoint = "https://otel.highlight.io:4317"
otlp_metric_reader = PeriodicExportingMetricReader(exporter=OTLPMetricExporter(endpoint=otel_endpoint, insecure=True),
export_interval_millis=1000)
# create a provider
provider = MeterProvider(resource=Resource.create(
{
"service.name": service_name,
"highlight.project_id": "<YOUR_PROJECT_ID>",
"environment": environment,
}
), metric_readers=[otlp_metric_reader])
# Create a meter
meter = provider.get_meter(service_name)
# Create a counter
counter = meter.create_counter(name="my_counter", description="A simple counter")
# Increment the counter
counter.add(1)
7
Verify your backend metrics are being recorded.
Visit the highlight metrics portal and check that backend metrics are coming in.