Skip to content

Sentry Integration

Overview

Sentry integration for error tracking, performance monitoring, and observability across Django applications.

Installation

Required Package

From requirements.txt analysis:

sentry-sdk[django,celery]==1.39.2

Django Configuration

# settings.py
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
from sentry_sdk.integrations.celery import CeleryIntegration

sentry_sdk.init(
    dsn=os.getenv('SENTRY_DSN'),
    integrations=[
        DjangoIntegration(
            transaction_style='url',
            middleware_spans=True,
            signals_spans=True,
        ),
        CeleryIntegration(
            monitor_beat_tasks=True,
            propagate_traces=True,
        ),
    ],
    traces_sample_rate=0.1,  # Adjust based on traffic
    send_default_pii=False,
    environment=os.getenv('ENVIRONMENT', 'development'),
    release=os.getenv('RELEASE_VERSION', 'unknown'),
)

OpenTelemetry Integration

Based on requirements.txt analysis:

# OpenTelemetry packages
opentelemetry-api==1.22.0
opentelemetry-sdk==1.22.0
opentelemetry-exporter-zipkin==1.22.0
opentelemetry-exporter-otlp==1.22.0
opentelemetry-instrumentation-django==0.43.b
opentelemetry-instrumentation-celery==0.43.b
opentelemetry-instrumentation-mysql==0.43.b

OpenTelemetry Configuration

# settings.py - OpenTelemetry setup
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

# Set up tracing
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)

# Configure OTLP exporter
otlp_exporter = OTLPSpanExporter(
    endpoint=os.getenv('OTEL_EXPORTER_OTLP_ENDPOINT', 'http://localhost:4317'),
    headers={"Authorization": f"Bearer {os.getenv('OTEL_AUTH_TOKEN')}"},
)

span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)

Environment Variables

# .env file
SENTRY_DSN=https://[email protected]/project-id
ENVIRONMENT=development  # development, staging, production
RELEASE_VERSION=v1.0.0
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_AUTH_TOKEN=your_auth_token

Custom Error Handling

Manual Error Reporting

import sentry_sdk

try:
    # Some operation that might fail
    process_data()
except Exception as e:
    sentry_sdk.capture_exception(e)
    # Handle error appropriately

Adding Context

with sentry_sdk.configure_scope() as scope:
    scope.set_tag("component", "payment_processor")
    scope.set_context("payment", {
        "amount": payment.amount,
        "currency": payment.currency,
        "method": payment.method,
    })
    # Process payment

Custom Breadcrumbs

sentry_sdk.add_breadcrumb(
    message='User initiated payment',
    category='payment',
    level='info',
    data={
        'amount': amount,
        'currency': currency,
    }
)

Performance Monitoring

Transaction Tracking

import sentry_sdk

# Manual transaction
with sentry_sdk.start_transaction(name="data_processing", op="task"):
    # Your processing logic here
    process_large_dataset()

Custom Metrics

# Track custom metrics
sentry_sdk.set_measurement("processing_time", processing_time_ms, "millisecond")
sentry_sdk.set_measurement("records_processed", record_count, "none")

Celery Integration

Configuration

# celery.py
from celery.signals import task_failure
import sentry_sdk

@task_failure.connect
def sentry_task_failure_handler(sender=None, task_id=None, exception=None, traceback=None, einfo=None, **kwargs):
    with sentry_sdk.configure_scope() as scope:
        scope.set_tag("celery_task", sender.name)
        scope.set_context("task", {
            "task_id": task_id,
            "task_name": sender.name,
        })
        sentry_sdk.capture_exception(exception)

Task Monitoring

# tasks.py
from celery import shared_task
import sentry_sdk

@shared_task
def process_data_task(data_id):
    with sentry_sdk.start_transaction(name="process_data_task", op="celery.task"):
        try:
            # Process data
            result = process_data(data_id)
            return result
        except Exception as e:
            sentry_sdk.capture_exception(e)
            raise

User Context

Django User Integration

# middleware or view
from sentry_sdk import configure_scope

def add_user_context(request):
    if request.user.is_authenticated:
        with configure_scope() as scope:
            scope.set_user({
                "id": request.user.id,
                "username": request.user.username,
                "email": request.user.email,
            })

Filtering Sensitive Data

Data Scrubbing

# settings.py
sentry_sdk.init(
    # ... other config
    before_send=before_send_filter,
    send_default_pii=False,
)

def before_send_filter(event, hint):
    # Remove sensitive data
    if 'request' in event:
        if 'data' in event['request']:
            # Remove password fields
            if isinstance(event['request']['data'], dict):
                event['request']['data'].pop('password', None)
                event['request']['data'].pop('secret_key', None)

    return event

Release Tracking

Deployment Integration

# Deploy script
import subprocess
import sentry_sdk

# Create release
release = sentry_sdk.release.create_release(
    organization="azmx",
    project="your-project",
    version=os.getenv('RELEASE_VERSION'),
)

# Associate commits
sentry_sdk.release.set_commits(
    organization="azmx",
    project="your-project",
    version=os.getenv('RELEASE_VERSION'),
    auto=True,
)

Dashboard and Alerting

Key Metrics to Monitor

  • Error rate by endpoint
  • Response time percentiles
  • Celery task failure rates
  • Database query performance
  • Custom business metrics

Alert Rules

Set up alerts for: - Error rate > 5% for 5 minutes - Response time > 2 seconds for 95th percentile - Celery task failure rate > 10% - Critical errors (500s) in production

Team KPI Integration

Backend Engineer KPIs

  • API Error Rate: Target ≤ 2% (tracked via Sentry)
  • Response Time: Target ≤ 500ms average (tracked via Sentry)
  • Issue Resolution: Target ≤ 2 days (tracked via Sentry alerts)

Monitoring Dashboards

Access via: https://sentry.azmx.sa

References