Skip to main content
Version: Self Hosted Lite

Python on Instance

Django

Install Otel Data Forwarder

Follow the below steps to install Otel data forwarder.

  1. Run the following command to download the Otel data forwader.

    wget https://raw.githubusercontent.com/snappyflow/apm-agent/master/otel-forwarder-install.sh 

    Refer the link for all available configurations: OpenTelemetry OTLP Exporters — OpenTelemetry Python documentation (opentelemetry-python.readthedocs.io)

  2. Run the following command.

    chmod +x otel-forwarder-install.sh  
    sudo ./otel-forwarder-install.sh  
  3. Run the below command to check the status.

    sudo service otel-data-forwarder status
    to start:
    sudo service otel-data-forwarder start

Add OpenTelemetry Instrumentation

Add Dependencies

  1. Install the following packages.

    pip install opentelemetry-sdk
    pip install opentelemetry-instrumentation-django
    pip install requests
    pip install opentelemetry-distro opentelemetry-exporter-otlp
    opentelemetry-bootstrap -a install
  2. Create a file called env.conf and provide values for project_name, application_name, profile_key, and service_name.

    snappyflow_projectname = <project_name>
    snappyflow_appname = <application_name>
    snappyflow_profilekey = <profile_key>
    service_name = <service_name>

OpenTelemetry OTLP Exporters

  1. Add the following code in manage.py file to configure OTLP Span Exporter and to send generated traces to otel-data-forwarder.

    from opentelemetry import trace
    from opentelemetry.sdk.resources import Resource
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import (BatchSpanProcessor,ConsoleSpanExporter)
    from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
    # Set the environment variables for the OTLP exporter
    os.environ['OTEL_EXPORTER_OTLP_TRACES_TIMEOUT'] = '5000' # Set the timeout in milliseconds
    os.environ['OTEL_EXPORTER_OTLP_TRACES_PROTOCOL'] = 'https' # Set the protocol (http or https)
    #os.environ['OTEL_EXPORTER_OTLP_TRACES_HEADERS'] = '{"custom-header": "header-value"}' # To Set custom headers
    os.environ['OTEL_EXPORTER_OTLP_TRACES_ENDPOINT'] = 'https://otelforwarderuser:Forwarder-Snappyflow-Agent%407%24@127.0.0.1:9595/otel-service/export/trace' # Set the endpoint URL
    # os.environ['OTEL_EXPORTER_OTLP_TRACES_COMPRESSION'] = 'gzip' # Set the compression method (e.g., gzip)
    os.environ['OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE'] = '/opt/sfagent/otel-trace-data-forwarder/certs/ca.pem' # Set the certificate path

    resource = Resource(attributes={
    #TODO: Add config file location
    "configFile" : "<path to env.conf>"
    })

    otlp_exporter = OTLPSpanExporter()

    trace.set_tracer_provider(TracerProvider(resource=resource))

    trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(otlp_exporter)
    )
  2. Update the configuration file location with the path of the env.conf file in the above code (marked as TODO).

  3. Run the following code to instrument the application.

    from opentelemetry.instrumentation.django import DjangoInstrumentor
    # call inside main()
    DjangoInstrumentor().instrument()
  4. Add the below code to set the environment variables.

    export DJANGO_SETTINGS_MODULE=proj1.settings
    # proj1 is the application name
  5. Run the application with the following command.

    python3 manage.py runserver --noreload
  6. Run the following command to get logs.

    tail -f /var/log/otel-data-forwarder.log

Verification

Follow the below steps to verify whether SnappyFlow has started to collect the trace data.

  1. Go to the Application tab in SnappyFlow and navigate to your Project > Application > Dashboard.
  2. Navigate to the Tracing section and click the View Transactions button.
  3. You can view the traces in the Aggregate and the Real Time tabs.