最近のアクセス:
可観測性をテストするための環境を設定する方法 (Grafana を使用)

これは、.NET で可観測性をテストするために設定できるシナリオの 1 つに過ぎません。
この場合、OpenTelemetry (OTel) を使って .NET アプリケーションを簡単にテストするためにコンテナを使用します。
トレースを確認するために Prometheus を使用してメトリックスと Tempo (分散トレースバックエンド) を分析しますが、これはすべて Docker コンテナで実行する Grafana で行われます。
概要

前提条件

ローカルマシンに必要なのは以下の要件のみです:

GeneXus アプリケーションの設定

GeneXus Web アプリケーションは GeneXus 18 Upgrade 8 (.NET 8 を使用) を使用して生成されます。
まず、[ Observability Provider ] プロパティに値 "OpenTelemetry" を設定し、任意のオブジェクトに対して [ これだけをビルド ] を実行します。これにより、CloudServices.config ファイルが以下の内容で生成され、生成されるアプリケーションに Opentelemetry SDK を使用させます。
 <Service>
    <Name>OPENTELEMETRY</Name>
    <Type>Observability</Type>
    <ClassName>GeneXus.OpenTelemetry.OpenTelemetry.OpenTelemetryProvider, GeneXus.OpenTelemetry, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</ClassName>
    <Properties />
  </Service>
GeneXus 側で必要な作業はこれだけです。

環境設定

ローカル環境をセットアップするためのステップ バイ ステップのガイドを以下に示します:
1. Docker にアプリケーションをデプロイします。
これによりアプリケーションをパッケージ化し、Docker イメージをビルドし、必要なときに実行できる状態にします。
デプロイフォルダの context フォルダは以下のような構造になります。Dockerfile と、バイナリとアプリケーションの実行に必要なすべてのリソースが入った temp フォルダがあります。
  • context
    • temp
    • Dockerfile
2. 以下のファイルを context フォルダ (Dockerfile がある場所) にコピーします。
  • docker-compose.yaml
    次のサービスをロードするファイルを構成します: otel-collector、tempo、prometheus、grafana、使用するアプリケーションサービス。こちらからファイルをダウンロードできます。

    このファイルには以下のような項目があります。
    これは Web アプリケーションの定義であり、その Dockerfile は context ディレクトリーにあります。
    ここで環境変数を定義できます。
# サンプルアプリケーション
  otelsampleapp: 
    build: 
      context: .     
    environment:
      - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
      - OTEL_RESOURCE_ATTRIBUTES=service.namespace=GeneXus,service.name=sample-app,service.version=1.0.1
      - OTEL_METRICS_EXPORTER=otlp
      - OTEL_TRACES_EXPORTER=otlp
      - OTEL_LOGS_EXPORTER=otlp,logging
      - GX_LOG_OUTPUT=ConsoleAppender
      - ASPNETCORE_URLS=http://*:8080
    ports:
      - "9999:8080"
環境変数 ASPNETCORE_URLS は .NET 8 アプリケーションで必要です。ここでは、コンテナでアプリケーションが実行される既定のポートは 8080 です。
"ports" はポートマッピングを示します。ポート 9999 でアプリケーションにローカルにアクセスできます。

OTEL の環境変数の詳細を確認するには、こちらをクリックしてください。
  • grafana-datasources.yaml
    このファイルには以下の内容が含まれます:
apiVersion: 1

datasources:
- name: Prometheus
  type: prometheus
  uid: prometheus
  access: proxy
  orgId: 1
  url: http://prometheus:9090
  basicAuth: false
  isDefault: true
  version: 1
  editable: false
  jsonData:
    httpMethod: GET
    exemplarTraceIdDestinations:
    - name: trace_id
      datasourceUid: Tempo
- name: Tempo
  type: tempo
  access: proxy
  orgId: 1
  url: http://tempo:3200
  basicAuth: false
  isDefault: false
  version: 1
  editable: false
  apiVersion: 1
  uid: tempo
  jsonData:
    httpMethod: GET
    serviceMap:
      datasourceUid: prometheus
  • otel-collector.yaml
    ここで OpenTelemetry コレクターを設定します。ファイルの内容はこちらからダウンロードして確認できます。
  • prometheus.yaml
    これが Prometheus の設定です。こちらからダウンロードできます。
  • tempo.yaml
    これが Tempo の設定です。
    server:
      http_listen_port: 3200
    
    distributor:
      receivers:
        otlp:
          protocols:
            http:
            grpc:
    
    storage:
      trace:
        backend: local
        wal:
          path: /tmp/tempo/wal
        local:
          path: /tmp/tempo/blocks

アプリケーションの実行方法

まず、docker-compose コマンドを実行して、コンテナを作成し起動します。
context フォルダでターミナルを開き、以下のコマンドを実行します:
- docker-compose up -d

イメージ:56830.png
これにより、必要なイメージがすべて取得され、それらすべてを含むコンテナが作成されます。
作成されたコンテナは、Docker デスクトップを使用して確認できます。
イメージ:56839.png
ここでは、サンプルアプリケーションはローカルポート 9999 上で動作します。
この例では、メインオブジェクトは wwtestdata2 なので、アプリケーションには http://localhost:9999/wwtestdata2.aspx でアクセスできます。
イメージ:56833.png

以下の Powershell スクリプトを使用してアプリケーションに対するロードを生成することができます。
while($true)
{
    Invoke-WebRequest http://localhost:9999/wwtestdata2.aspx
    Start-Sleep -Milliseconds 500
}

Grafana の使用

このアプリケーションはメトリックスとトレースを OTel Collector に送信し、OTel Collector はメトリックスとトレースをそれぞれ Prometheus と Tempo に送信します。
テストの実行中に 2 分間待ってからデータを分析すると、十分なデータが生成され、エクスポートされます。
Grafana (http://localhost:3000) を開き、 [ Explore ] を選択してソースに [ Prometheus ] を選択します。
そこに、表示可能なすべてのメトリックスを含む [ Metric ] コンボボックスがあります。
イメージ:56836.png
イメージ:56835.png
Tempo データソースを使用すると、OpenTelemetry で生成されるトレースを表示できます。
イメージ:56837.png
ヒント: コンテナが起動に失敗した場合、以下のコマンドラインがトラブルシューティングに便利です:
docker logs <container_id> -f


サブページ
Created: 24/11/07 00:56 by Admin Last update: 24/12/18 22:48 by Admin
カテゴリ
Powered by GXwiki 3.0