튜토리얼: Django 애플리케이션과 GitLab Observability 사용하기

이 기능의 가용성은 기능 플래그에 의해 제어됩니다. 자세한 정보는 분산 추적 기능의 이력을 참조하세요.

이 튜토리얼에서는 GitLab Observability 기능을 사용하여 Django 애플리케이션을 생성, 구성, 계측 및 모니터링하는 방법을 보여드립니다.

시작하기 전에

이 튜토리얼을 따라가려면 다음이 있어야 합니다:

  • GitLab.com이나 GitLab Self-Managed용 GitLab Ultimate 구독
  • Python 3 및 Django의 로컬 설치 (python -m pip install Django로 설치할 수 있음)
  • Git 및 Python의 기본 지식
  • OpenTelemetry의 핵심 개념에 대한 기본 지식

GitLab 프로젝트 생성

먼저 GitLab 프로젝트와 해당 액세스 토큰을 생성하세요. 이 튜토리얼에서는 프로젝트 이름이 animals인 것을 사용합니다.

  1. 왼쪽 사이드바에서 맨 위에 있는 Create new ()와 New project/repository를 선택하세요.
  2. Create blank project를 선택하세요.
  3. 프로젝트 세부 정보를 입력하세요.
    • 프로젝트 이름 필드에 animals을 입력하세요.
  4. 프로젝트 생성을 선택하세요.
  5. animals 프로젝트에서 왼쪽 사이드바에서 Settings > Access tokens를 선택하세요.
  6. api 범위와 개발자 역할을 가진 액세스 토큰을 생성하세요. 나중에 필요하므로 토큰 값을 안전한 곳에 보관하세요.

Django 애플리케이션 생성

애플리케이션을 생성하려면 다음을 수행하세요:

  1. 명령줄에서 다음 명령을 실행하세요:

    python -m django startproject animals_app
    
  2. Django 서버가 올바르게 실행되는지 확인하세요:

    python manage.py runserver
    
  3. http://localhost:8000을 방문하여 서버가 올바르게 실행되는지 확인하세요.
  4. Django 프로젝트에는 프로젝트 내의 여러 응용 프로그램이 포함되어 있습니다. 저희가 가짜 동물 목록을 관리할 응용 프로그램을 생성하려면 다음 명령을 실행하세요:

    python manage.py startapp animals
    
  5. 새로운 animals 애플리케이션을 위한 초기 뷰를 생성하려면 animals/views.py 파일에 다음 코드를 추가하세요:

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("This is where the list of animals will be shown.")
    
  6. animals/urls.py에 다음 코드를 추가하세요:

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.index, name='index'),
    ]
    
  7. 또한, urls.py를 업데이트하여 animals 앱을 포함시킵니다:

    path('animals/', include('animals.urls'))
    
  8. animals_app/settings.py에 애플리케이션을 추가하세요:

    INSTALLED_APPS = [
        ...
        'animals.apps.AnimalsConfig',
    ]
    
  9. animals/models.py에 동물을 정의하는 모델을 생성하세요:

    from django.db import models
    class Animal(models.Model):
        name = models.CharField(max_length=200)
        number_of_legs = models.IntegerField(default=2)
        dangerous = models.BooleanField(default=False)
    
  10. 모델을 정의한 후에 데이터베이스 마이그레이션을 생성하세요. 이것은 데이터베이스의 변경 사항을 설명하는 파일을 생성합니다.

    python manage.py makemigrations animals
    
  11. 새로 생성된 마이그레이션을 실행하세요:

    python manage.py migrate
    

OpenTelemetry으로 애플리케이션 계측하기

  1. 필요한 종속성을 설치하세요:

    pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
    
  2. 메트릭 및 트레이스는 다른 가져오기가 필요합니다. manage.py 파일에서 필요한 모듈을 가져오세요:

    from opentelemetry.instrumentation.django import DjangoInstrumentor
    
    from opentelemetry.sdk.resources import SERVICE_NAME, Resource
    
    from opentelemetry import trace
    from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
    from opentelemetry.sdk.trace import TracerProvider
    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 import MeterProvider
    from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader, ConsoleMetricExporter
    
  3. 애플리케이션을 계측하기 위해 manage.py 파일에 다음 코드를 추가하세요.

    • {{PROJECT_ACCESS_TOKEN}}{{PROJECT_ID}}를 프로젝트에서 가져온 값으로 대체하세요.
    • Self-Managed GitLab을 사용하는 경우 gitlab.com을 자체 호스트 이름으로 대체하세요.
    resource = Resource(attributes={
        SERVICE_NAME: "animals-django"
    })
    os.environ.setdefault('OTEL_EXPORTER_OTLP_HEADERS', "PRIVATE-TOKEN={{PROJECT_ACCESS_TOKEN}}")
    traceProvider = TracerProvider(resource=resource)
    processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="https://gitlab.com/api/v4/projects/{{PROJECT_ID}}/observability/v1/traces"))
    traceProvider.add_span_processor(processor)
    trace.set_tracer_provider(traceProvider)
    
    reader = PeriodicExportingMetricReader(
        OTLPMetricExporter(endpoint="https://gitlab.com/api/v4/projects/{{PROJECT_ID}}/observability/v1/metrics")
    )
    meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
    metrics.set_meter_provider(meterProvider)
    meter = metrics.get_meter("default.meter")
    
    """Administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'animals_app.settings')
    DjangoInstrumentor().instrument()
    

이 코드는 서비스 이름을 animals-django로 정의하고, GitLab과 인증하며, 애플리케이션을 계측합니다.

  1. 추적 데이터를 수집하려면 Django 서버를 다시 시작하세요. /animals를 여러 번 새로 고침한 후에 GitLab UI에서 트레이스를 볼 수 있어야 합니다.

    Django 트레이스

  2. 선택 사항. Django는 기본적으로 특정 메트릭을 GitLab에 내보내지만, 사용자 정의 메트릭도 지원됩니다. 예를 들어 페이지가 로드될 때마다 카운터 메트릭을 증가시키려면 다음 코드를 추가하세요:

    meter = metrics.get_meter("default.meter")
    work_counter = meter.create_counter(
        "animals.viewed.counter", unit="1", description="Counts the number of times the list of animals was viewed"
    )
    
    work_counter.add(1)
    

Django 메트릭