Naar hoofdinhoud gaan
Om OpenTelemetry-gegevens van uw Python-applicatie naar AppSignal te sturen, kunt u ofwel het AppSignal voor Python-pakket gebruiken, ofwel OpenTelemetry handmatig installeren en configureren.

Het AppSignal voor Python-pakket gebruiken

Het AppSignal voor Python-pakket kan OpenTelemetry automatisch configureren om gegevens naar de AppSignal collector te sturen. Het kan ook automatisch OpenTelemetry-instrumentaties inschakelen voor populaire libraries en frameworks. Volg de instructies in de installatiedocumentatie van AppSignal voor Python om het pakket te installeren en het configuratiebestand in te stellen, en volg vervolgens de instructies op de pagina voor de collector-configuratie van AppSignal voor Python om het te gebruiken met de AppSignal Collector.

OpenTelemetry handmatig installeren

Zorg ervoor dat u de AppSignal collector installeert voordat u verdergaat met deze instructies.

Installeer de OpenTelemetry-pakketten

Voeg de OpenTelemetry SDK, OTLP-exporter en instrumentatiepakketten toe aan de requirements.txt van uw applicatie:
opentelemetry-api
opentelemetry-sdk
opentelemetry-exporter-otlp-proto-http
Voeg ook de OpenTelemetry-instrumentatiepakketten toe voor de libraries en frameworks die uw applicatie gebruikt. Bijvoorbeeld, als u Django en Celery gebruikt:
opentelemetry-instrumentation-celery
opentelemetry-instrumentation-django
Bekijk het OpenTelemetry-register voor instrumentatiepakketten voor de meeste libraries en frameworks.

Configureer OpenTelemetry in uw applicatie

Voeg dit bestand appsignal.py toe aan uw applicatie met de OpenTelemetry-exporter en AppSignal-configuratie. Importeer dit bestand vervolgens voordat uw applicatie start. Zorg ervoor dat u de onderstaande waarden bijwerkt met de naam, omgeving en push API-sleutel van uw AppSignal-applicatie, en vervang het exporter-endpoint zo nodig door het adres van uw AppSignal collector.
import os
import subprocess
import socket

from opentelemetry import trace, metrics
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.metrics.export import (
    AggregationTemporality,
    PeriodicExportingMetricReader,
)
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
    OTLPSpanExporter
)
from opentelemetry.exporter.otlp.proto.http.metric_exporter import (
    OTLPMetricExporter
)

def initialize_opentelemetry(service_name):
    # Vervang deze waarden door de naam, omgeving en push API-sleutel van uw
    # AppSignal-applicatie. Deze worden gebruikt door de onderstaande resource-attributenconfiguratie.
    name = "My app"
    push_api_key = "0000-0000-0000-0000"
    environment = "development"

    # Vervang `http://localhost:8099` door het adres van uw AppSignal collector
    # als deze op een andere host draait.
    endpoint = "http://localhost:8099"

    revision = subprocess.check_output(
        "git rev-parse --short HEAD", shell=True, text=True
    ).strip()

    resource = Resource(attributes={
        "appsignal.config.name": name,
        "appsignal.config.environment": environment,
        "appsignal.config.push_api_key": push_api_key,
        "appsignal.config.revision": revision,
        "appsignal.config.language_integration": "python",
        "appsignal.config.app_path": os.getcwd()
        "host.name": socket.gethostname(),
        # Pas de servicenaam aan
        "service.name": service_name,
    })

    trace_provider = TracerProvider(resource=resource)
    span_processor = BatchSpanProcessor(
        OTLPSpanExporter(endpoint=f"{collector_host}/v1/traces")
    )
    trace_provider.add_span_processor(span_processor)
    trace.set_tracer_provider(trace_provider)

    metric_exporter = OTLPMetricExporter(
        endpoint=f"{collector_host}/v1/metrics",
    )
    metric_reader = PeriodicExportingMetricReader(
        metric_exporter,
        export_interval_millis=10000
    )
    metric_provider = MeterProvider(
        resource=resource,
        metric_readers=[metric_reader]
    )
    metrics.set_meter_provider(metric_provider)
Initialiseer vervolgens, in hetzelfde bestand na de OpenTelemetry-setup, de OpenTelemetry-instrumentaties voor de libraries en frameworks die uw applicatie gebruikt. Bijvoorbeeld, als u de Django- en Celery-instrumentaties gebruikt:
# Voeg dit toe onder de OpenTelemetry-initialisatie

from opentelemetry.instrumentation.django import DjangoInstrumentor
from opentelemetry.instrumentation.celery import CeleryInstrumentor

DjangoInstrumentor().instrument()
CeleryInstrumentor().instrument()
Roep ten slotte de functie initialize_opentelemetry aan met de naam van de service die wordt gemonitord, zo vroeg mogelijk in het entry point van uw applicatie. Een veelgebruikte keuze voor de servicenaam is de naam van het gebruikte framework.

Gebruik met Django

Importeer in het bestand settings.py van uw Django-applicatie de appsignal.py-module aan het begin van het bestand en roep de functie initialize_opentelemetry aan:
from .appsignal import initialize_opentelemetry

# Stel de naam in van de service die wordt gemonitord. Een veelgebruikte keuze is de
# naam van het gebruikte framework. Deze wordt gebruikt om traces en metrieken in AppSignal te groeperen.
service_name = "Django"

initialize_opentelemetry(service_name)

Gebruik met Celery

Voeg in het bestand tasks.py van uw Celery-applicatie een connection-callback toe voor worker-processen en importeer daarbinnen de appsignal.py-module.
@worker_process_init.connect(weak=False)
def init_celery_tracing(*args, **kwargs):
    from .appsignal import initialize_opentelemetry

    # Stel de naam in van de service die wordt gemonitord. Een veelgebruikte keuze is de
    # naam van het gebruikte framework. Deze wordt gebruikt om traces en metrieken in AppSignal te groeperen.
    service_name = "Celery"

    initialize_opentelemetry(service_name)

Test de app!

Nu alle componenten zijn verbonden, start u uw app en test u of er gegevens binnenkomen in AppSignal. Controleer specifiek de pagina’s “Errors > Issue list” en “Performance > Traces”. Als u na het volgen van onze installatie-instructies nog steeds geen gegevens ziet in AppSignal, laat het ons weten en wij helpen u uw OpenTelemetry-installatie te voltooien!