사용법: Django 애플리케이션에서 GitLab Observability 사용하기
이번 튜토리얼에서는 GitLab 관측 가능성 기능을 사용하여 Django 애플리케이션을 생성, 구성, 계측 및 모니터링하는 방법을 보여줍니다.
시작하기 전에
이 튜토리얼을 따라 하려면 다음이 필요합니다:
- GitLab.com 또는 GitLab 자체 관리에 대한 GitLab Ultimate 구독
- Python 3 및 Django의 로컬 설치 (다음 명령어로 설치할 수 있습니다:
python -m pip install Django
.) - Git과 Python에 대한 기본 지식
- OpenTelemetry의 핵심 개념에 대한 기본 지식
GitLab 프로젝트 만들기
먼저, GitLab 프로젝트와 해당 접근 토큰을 만듭니다.
이 튜토리얼에서는 프로젝트 이름으로 animals
를 사용합니다.
- 왼쪽 사이드바에서 상단의 Create new () 및 New project/repository를 선택합니다.
- Create blank project를 선택합니다.
- 프로젝트 세부 정보를 입력합니다.
-
Project name 필드에
animals
를 입력합니다.
-
Project name 필드에
- Create project를 선택합니다.
-
animals
프로젝트에서 왼쪽 사이드바에서 Settings > Access tokens를 선택합니다. -
api
범위와 Developer 역할로 접근 토큰을 생성합니다. 토큰 값을 안전한 곳에 저장하십시오. 나중에 필요합니다.
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("여기에 동물 목록이 표시됩니다.")
-
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}}
를 프로젝트의 값으로 바꿉니다. - 셀프 관리되는 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") """관리 작업을 실행합니다.""" 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="동물 목록이 조회된 횟수" ) work_counter.add(1)