튜토리얼: 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
인 것을 사용합니다.
- 왼쪽 사이드바에서 맨 위에 있는 Create new ()와 New project/repository를 선택하세요.
- Create blank project를 선택하세요.
- 프로젝트 세부 정보를 입력하세요.
-
프로젝트 이름 필드에
animals
을 입력하세요.
-
프로젝트 이름 필드에
- 프로젝트 생성을 선택하세요.
-
animals
프로젝트에서 왼쪽 사이드바에서 Settings > Access tokens를 선택하세요. -
api
범위와 개발자 역할을 가진 액세스 토큰을 생성하세요. 나중에 필요하므로 토큰 값을 안전한 곳에 보관하세요.
Django 애플리케이션 생성
애플리케이션을 생성하려면 다음을 수행하세요:
-
명령줄에서 다음 명령을 실행하세요:
python -m django startproject animals_app
-
Django 서버가 올바르게 실행되는지 확인하세요:
python manage.py runserver
-
http://localhost:8000
을 방문하여 서버가 올바르게 실행되는지 확인하세요. -
Django 프로젝트에는 프로젝트 내의 여러 응용 프로그램이 포함되어 있습니다. 저희가 가짜 동물 목록을 관리할 응용 프로그램을 생성하려면 다음 명령을 실행하세요:
python manage.py startapp animals
-
새로운
animals
애플리케이션을 위한 초기 뷰를 생성하려면animals/views.py
파일에 다음 코드를 추가하세요:from django.http import HttpResponse def index(request): return HttpResponse("This is where the list of animals will be shown.")
-
animals/urls.py
에 다음 코드를 추가하세요:from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
-
또한,
urls.py
를 업데이트하여animals
앱을 포함시킵니다:path('animals/', include('animals.urls'))
-
animals_app/settings.py
에 애플리케이션을 추가하세요:INSTALLED_APPS = [ ... 'animals.apps.AnimalsConfig', ]
-
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)
-
모델을 정의한 후에 데이터베이스 마이그레이션을 생성하세요. 이것은 데이터베이스의 변경 사항을 설명하는 파일을 생성합니다.
python manage.py makemigrations animals
-
새로 생성된 마이그레이션을 실행하세요:
python manage.py migrate
OpenTelemetry으로 애플리케이션 계측하기
-
필요한 종속성을 설치하세요:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
-
메트릭 및 트레이스는 다른 가져오기가 필요합니다.
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
-
애플리케이션을 계측하기 위해
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과 인증하며, 애플리케이션을 계측합니다.
-
추적 데이터를 수집하려면 Django 서버를 다시 시작하세요.
/animals
를 여러 번 새로 고침한 후에 GitLab UI에서 트레이스를 볼 수 있어야 합니다. -
선택 사항. 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)