正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

チュートリアル: DjangoアプリケーションでGitLab可観測性を使用する

この機能の利用可否は、機能フラグによって制御されます。

このチュートリアルでは、GitLab可観測性の機能を使用してDjangoアプリケーションを作成、設定、インストルメント、および監視する方法を説明します。

はじめる前

このチュートリアルを進めるには、以下が必要です:

  • GitLab.comまたはSelf-ManagedインスタンスのGitLab Ultimateサブスクリプション
  • Python 3とDjangoのローカルインスタンス(python -m pip install Djangoでインストールできます)。
  • GitとPythonの基本的な知識
  • OpenTelemetryのコアコンセプトの基本的な知識

GitLabプロジェクトを作成する

まず、GitLabプロジェクトと対応するアクセストークンを作成します。このチュートリアルでは、animalsというプロジェクト名を使用します。

  1. 左側のサイドバーの上部で、新規作成 plus )を選択し、新規プロジェクト/リポジトリを選択します。
  2. 空のプロジェクトの作成を選択します。
  3. プロジェクトの詳細を入力してください。
    • プロジェクト名フィールドに、animalsと入力します。
  4. プロジェクトを作成を選択します。
  5. animalsプロジェクトの左側のサイドバーで、設定 > アクセストークンを選択します。
  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. さらに、room 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.comをSelf-Managedインスタンスのホスト名に置き換えます。
    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")
    
    """Run 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メトリクス