APM Dotnetエージェントのデプロイ

APM Dotnetエージェントを正常にプロビジョニングすると、APM DotnetエージェントをWindowsまたはLinuxにデプロイできます。

WindowsでのAPM Dotnetエージェントのデプロイ

APM Dotnetエージェントが正常にプロビジョニングされたら、WindowsでAPM Dotnetエージェントをデプロイできます。

任意のアプリケーションにAPM Dotnetエージェントをデプロイするには、アプリケーションを起動する前に一連の環境変数を追加する必要があります。

  1. PowerShellを準備します。

    WindowsにAPM Dotnetエージェントをデプロイする前に、PowerShellを準備する必要があります。

    ノート

    PowerShellバージョン5.1以上がサポートされています。

    PowerShellバージョン4.0がある場合、続行するには5.1に更新する必要があります。

    1. 管理者としてWindows PowerShellを開きます。
    2. APMエージェントがプロビジョニングされた宛先ディレクトリに移動します。
    3. PowerShellコンソールで次のコマンドを実行します:
      Import-Module ./OpenTelemetry.DotNet.Auto.psm1
  2. PowerShellで環境変数を準備します。
    APM Dotnetエージェントのデプロイに必要な次の環境変数を確認します。
    $env:OTEL_EXPORTER_OTLP_ENDPOINT="<data-upload-endpoint>/20200101/opentelemetry"
    $env:OTEL_EXPORTER_OTLP_HEADERS="Authorization=dataKey <private-data-key>"
    $env:OTEL_SERVICE_NAME="<service-name>"
    説明:
    例:
    $env:OTEL_EXPORTER_OTLP_ENDPOINT="https://aaaaaaaaaaaaaaaaaaaaaa.apm-agt.us-phoenix-1.oci.oraclecloud.com/20200101/opentelemetry"
    $env:OTEL_EXPORTER_OTLP_HEADERS="Authorization=dataKey CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB"
    $env:OTEL_SERVICE_NAME="myservice"

    必要に応じて、さらに環境変数を追加できます。たとえば、ブラウザ・エージェント・インジェクションまたは異常終了トレースを構成する必要がある場合です。環境変数名には接頭辞$env:を使用し、環境変数値は二重引用符""で囲む必要があります。

    ベスト・プラクティス: APM .NETエージェントのデプロイ後にclear-historyを実行します。これにより、PowerShell履歴から秘密キーなどの機密データがクリーン・アップされます。

  3. オプション- .NET Framework DLLをGACに登録します。

    このステップは、.NET Frameworkアプリケーションでのみ必要です。.NET Frameworkアプリケーションがない場合は、このステップをスキップします。

    .NETフレームワークDLLをGACに登録するには、次を実行します:
    Register-OpenTelemetryDllsToGac
  4. APM Dotnetエージェントをデプロイします。

    次のアプリケーションにAPM Dotnetエージェントをデプロイします。

IISサーバーにデプロイ

PowerShellコンソールで次のコマンドを実行します:
Register-OpenTelemetryForIIS

Windowsサービスへのデプロイ

PowerShellコンソールで次のコマンドを実行します:
Register-OpenTelemetryForWindowsService -WindowsServiceName <WindowsServiceName>

コンソール・アプリケーションにデプロイ

ここでは、APM Dotnetエージェントをコンソール・アプリケーションにデプロイする方法について説明します。

  1. APM Dotnetエージェントをデプロイするための環境変数を準備します。

    コンソール・アプリケーションのAPM Dotnetエージェントのデプロイに必要な次の環境変数を確認します。

    set COR_ENABLE_PROFILING=1
    set COR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}
    set COR_PROFILER_PATH_64=<destination>\win-x64\OpenTelemetry.AutoInstrumentation.Native.dll
    set COR_PROFILER_PATH_32=<destination>\win-x86\OpenTelemetry.AutoInstrumentation.Native.dll
    set CORECLR_ENABLE_PROFILING=1
    set CORECLR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}
    set CORECLR_PROFILER_PATH_64=<destination>\win-x64\OpenTelemetry.AutoInstrumentation.Native.dll
    set CORECLR_PROFILER_PATH_32=<destination>\win-x86\OpenTelemetry.AutoInstrumentation.Native.dll
    set DOTNET_ADDITIONAL_DEPS=<destination>\AdditionalDeps
    set DOTNET_SHARED_STORE=<destination>\store
    set DOTNET_STARTUP_HOOKS=<destination>\net\OpenTelemetry.AutoInstrumentation.StartupHook.dll
    set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=OpenTelemetry.AutoInstrumentation.AspNetCoreBootstrapper
    set OTEL_DOTNET_AUTO_HOME=<destination>
    set OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES=OpenTelemetry.ODP
    set OTEL_SERVICE_NAME=<service-name>
    set OTEL_LOGS_EXPORTER=none
    set OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES=dotnet.exe,dotnet
    set OTEL_EXPORTER_OTLP_ENDPOINT=<data-upload-endpoint>/20200101/opentelemetry
    set OTEL_EXPORTER_OTLP_HEADERS=Authorization=dataKey <private-data-key>
    set OTEL_DOTNET_ENABLE_BACKGROUND_ODP=true
    set OTEL_DOTNET_ENABLE_CONNECTION_ODP=true

    次のものを正しい値に置き換える必要があります。

    プレースホルダ 説明
    <宛先> APM Dotnetエージェントがプロビジョニングされる宛先ディレクトリ。

    例: C:\tracer-home

    <サービス名> モニターされるサービスの名前。

    これにより、サービスでフィルタし、トレース・エクスプローラ・ユーザー・インタフェースでトレースを表示できます。

    例: apm_service

    <データ・アップロード・エンドポイント> APMドメインの作成時に生成されるdataUploadEndpoint URL。

    例: https://dataUploadEndpoint.com

    <プライベートデータキー> APMドメインの作成時に生成されるAPM Dotnetエージェント(プライベートdataKey)で使用されるエージェント・インストール・キー。

    例: IMWJ5UN2C

    ノート

    データ・アップロード・エンドポイントおよびデータ・キーの詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。

  2. コンソール・アプリケーションを実行します。
    1. コマンド・プロンプトを開きます。

    2. コマンド・プロンプトのステップ1で環境変数を設定します。

    3. 同じコマンド・プロンプトで、コンソール・アプリケーションを実行します。

LinuxでのAPM Dotnetエージェントのデプロイ

APM Dotnetエージェントが正常にプロビジョニングされたら、LinuxでAPM Dotnetエージェントをデプロイできます。

APM Dotnetエージェントを任意のアプリケーションにデプロイするには、アプリケーションを起動する前に一連の環境変数を追加する必要があります。

  1. 環境変数を準備する

    APM Dotnetエージェントを任意のアプリケーションにデプロイするには、変数を設定およびエクスポートする必要があります。

    APM Dotnetエージェントのデプロイに必要な次の環境変数を確認および設定します。
    export OTEL_DOTNET_AUTO_HOME=<destination>
    export OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES=OpenTelemetry.ODP
    export OTEL_SERVICE_NAME=<service-name>
    export OTEL_LOGS_EXPORTER=none
    export OTEL_EXPORTER_OTLP_ENDPOINT=<data-upload-endpoint>/20200101/opentelemetry
    export OTEL_EXPORTER_OTLP_HEADERS="Authorization=dataKey <private-data-key>"
    

    次のものを正しい値に置き換える必要があります。

    プレースホルダー 説明
    <宛先> APM Dotnetエージェントがプロビジョニングされる宛先ディレクトリ。
    <サービス名> モニターされるサービスの名前。

    これにより、サービスでフィルタし、トレース・エクスプローラ・ユーザー・インタフェースでトレースを表示できます。

    例: apm_service

    <データ・アップロード・エンドポイント> APMドメインの作成時に生成されるdataUploadEndpoint URL。

    例: https://dataUploadEndpoint.com

    詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。

    <プライベートデータキー> APMドメインの作成時に生成される、APM Dotnetエージェント(プライベートdataKey)によって使用されるエージェント・インストール・キー。

    たとえば: IMWJ5UN

    詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。

  2. 次のスクリプトを実行して、追加の環境変数を構成します。
    . $OTEL_DOTNET_AUTO_HOME/instrument.sh
  3. アプリケーションを実行します。
    1. シェルセッションを開きます。
    2. シェルセッションの手順1と手順2から環境変数を設定します。
    3. 同じセッションで、アプリケーションを実行します。

OpenTelemetryオペレータを使用したAPM DotnetエージェントのKubernetesへのデプロイ

ここでは、OpenTelemetry演算子を使用してAPM Dotnetエージェントをデプロイし、Kubernetes (K8s)クラスタのDotnetアプリケーション・ポッドにAPM Dotnetエージェントを自動的に注入および構成する方法について説明します。

APM Dotnetエージェントを使用して、Dotnetアプリケーションを監視できます。OpenTelemetry演算子は、APM Dotnetエージェントのデプロイに使用され、K8sポッドで実行されているDotnetアプリケーションにDotnetエージェントを自動的に注入する簡単な方法を提供するK8s演算子の実装です。

前提条件

OpenTelemetry演算子をK8sクラスタにインストールします。

選択できるオプションは、「オペレータヘルムチャート」「オペレータリリースマニフェスト」、または「オペレータハブ」の3つあります。

ほとんどの場合、cert-managerをインストールする必要があります。helmチャート・オプションを使用する場合は、かわりに自己署名証明書を生成するオプションがあります。

オプション1: 演算子ヘルム・チャート

このオプションは、ヘルム・チャートを使用してOpenTelemetry演算子をインストールすることです。

  1. helmチャート・リポジトリを追加します。
    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    helm repo update
  2. OpenTelemetry演算子のKubernetesネームスペースを作成します。
    kubectl create namespace opentelemetry-operator-system
  3. OpenTelemetry演算子をインストールします。
    helm install opentelemetry-operator open-telemetry/opentelemetry-operator \
    --namespace opentelemetry-operator-system \
    --set "manager.collectorImage.repository=otel/opentelemetry-collector-k8s"\
    --set admissionWebhooks.certManager.enabled=false\
    --set admissionWebhooks.autoGenerateCert.enabled=true

オプション2: Operator release manifest

このオプションは、YAMLファイルを使用してOpenTelemetry演算子をインストールすることです。

証明書マネージャをインストールするには、次を実行します:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.1/cert-manager.yaml
OpenTelemetry演算子をインストールするには、次を実行します:
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

APM Dotnetエージェントのデプロイ

APM Dotnetエージェントをデプロイするには、次のステップを実行します。

  1. Kubernetesカスタム・リソース(CR)を作成します。

    自動インストゥルメンテーションを管理するには、OpenTelemetryオペレータに、カスタム・リソース定義(CRD)を使用して実行したAPM Dotnetエージェントとその構成に関する情報を指定する必要があります。

    このカスタム・リソースは、エージェントをポッドにコピーし、必要な構成に追加するためにオペレータによって使用されます。

    次のコマンドを実行して、KubernetesクラスタにCRを作成します:

    kubectl apply -f - <<EOF
    apiVersion: opentelemetry.io/v1alpha1
    kind: Instrumentation
    metadata:
      name: inst-apm-dotnet
      namespace: opentelemetry-operator-system
    spec:
      dotnet:
        image: us-ashburn-1.ocir.io/idpyjkbcc9tk/apm-net-agent:latest
        env:
          - name: OTEL_EXPORTER_OTLP_ENDPOINT
            value: <data-upload-endpoint>/20200101/opentelemetry
          - name: OTEL_EXPORTER_OTLP_HEADERS
            value: "Authorization=dataKey <private-data-key>"
          - name: OTEL_LOGS_EXPORTER
            value: "none"
          - name: OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES
            value: "OpenTelemetry.ODP"
    EOF
    説明:
    作成されたCRを問い合せるには、次のコマンドを実行します。
    kubectl get otelinst -n opentelemetry-operator-system
    自動計測が正しく機能するためには、すべてのエンドポイントおよび環境変数が正しい必要があります。
  2. Kubernetes注釈を追加します。

    OpenTelemetry演算子は、Kubernetes注釈を使用して、APM Dotnetエージェントで自動インジェクトするポッドを決定します。

    注釈はネームスペースに追加できます。その場合、そのネームスペース内のすべてのポッドが注入されます。注釈は、デプロイメント、ステートフルセットおよびその他のリソースの一部として使用可能な個々のPodSpecオブジェクトに追加することもできます。

    x64 glibcの注釈:
    annotations:
      instrumentation.opentelemetry.io/inject-dotnet: opentelemetry-operator-system/inst-apm-dotnet
    x64 muslの注釈:
    annotations:
      instrumentation.opentelemetry.io/inject-dotnet: opentelemetry-operator-system/inst-apm-dotnet
      instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: linux-musl-x64
    ネームスペースの編集を開始するには、次を実行します:
    • 次のコマンドを実行します:
      kubectl edit namespace <your-namespace-name>
    • 前述のコマンドを実行した後、エディタを開いたらネームスペースを編集します。たとえば、viエディタを使用します。
    • ネームスペースに注釈を追加します。インデントは、有効なYAMLファイルとして作成することが非常に重要であることに注意してください。
    注釈が追加されたネームスペースの例を次に示します。
    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        kubernetes.io/metadata.name: mynamespace
      annotations:
        instrumentation.opentelemetry.io/inject-dotnet: "opentelemetry-operator-system/inst-apm-dotnet"
      name: mynamespace
    spec:
  3. Kubernetesポッドを再起動します。

    APM Dotnetエージェントを自動インジェクトするポッドを再起動するには、次を実行します:

    kubectl delete pod <your-pod-name> -n <your-namespace-name>
  4. Kubernetesポッドを確認します。
    再起動後にAPM Dotnetエージェントでポッドが自動インジェクトされたことを確認するには、次を実行します:
    kubectl get pod <your-pod-name> -n <your-namespace-name> -o yaml

次のステップに移動できるようになりました: APM Dotnetエージェント・デプロイメントの検証