APM Dotnetエージェントのデプロイ
APM Dotnetエージェントを正常にプロビジョニングすると、APM DotnetエージェントをWindowsまたはLinuxにデプロイできます。
WindowsでのAPM Dotnetエージェントのデプロイ
APM Dotnetエージェントが正常にプロビジョニングされたら、WindowsでAPM Dotnetエージェントをデプロイできます。
任意のアプリケーションにAPM Dotnetエージェントをデプロイするには、アプリケーションを起動する前に一連の環境変数を追加する必要があります。
- PowerShellを準備します。
WindowsにAPM Dotnetエージェントをデプロイする前に、PowerShellを準備する必要があります。
ノート
PowerShellバージョン5.1以上がサポートされています。PowerShellバージョン4.0がある場合、続行するには5.1に更新する必要があります。
- 管理者としてWindows PowerShellを開きます。
- APMエージェントがプロビジョニングされた宛先ディレクトリに移動します。
- PowerShellコンソールで次のコマンドを実行します:
Import-Module ./OpenTelemetry.DotNet.Auto.psm1
- 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>"
説明:- <data-upload-endpoint>: DataUploadEndpoint APMドメインの作成時に生成されるURL。詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。
- <private-data-key>: APMドメインの作成時に生成される、APM Dotnetエージェント(プライベートdataKey)によって使用されるエージェント・インストール・キー。詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。
- <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履歴から秘密キーなどの機密データがクリーン・アップされます。
- オプション- .NET Framework DLLをGACに登録します。
このステップは、.NET Frameworkアプリケーションでのみ必要です。.NET Frameworkアプリケーションがない場合は、このステップをスキップします。
.NETフレームワークDLLをGACに登録するには、次を実行します:Register-OpenTelemetryDllsToGac
- APM Dotnetエージェントをデプロイします。
次のアプリケーションにAPM Dotnetエージェントをデプロイします。
Windowsサービスへのデプロイ
Register-OpenTelemetryForWindowsService -WindowsServiceName <WindowsServiceName>
コンソール・アプリケーションにデプロイ
ここでは、APM Dotnetエージェントをコンソール・アプリケーションにデプロイする方法について説明します。
- 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
- コンソール・アプリケーションを実行します。
-
コマンド・プロンプトを開きます。
-
コマンド・プロンプトのステップ1で環境変数を設定します。
-
同じコマンド・プロンプトで、コンソール・アプリケーションを実行します。
-
LinuxでのAPM Dotnetエージェントのデプロイ
APM Dotnetエージェントが正常にプロビジョニングされたら、LinuxでAPM Dotnetエージェントをデプロイできます。
APM Dotnetエージェントを任意のアプリケーションにデプロイするには、アプリケーションを起動する前に一連の環境変数を追加する必要があります。
- 環境変数を準備する
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
詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。
- 次のスクリプトを実行して、追加の環境変数を構成します。
. $OTEL_DOTNET_AUTO_HOME/instrument.sh
- アプリケーションを実行します。
- シェルセッションを開きます。
- シェルセッションの手順1と手順2から環境変数を設定します。
- 同じセッションで、アプリケーションを実行します。
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演算子をインストールすることです。
- helmチャート・リポジトリを追加します。
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts helm repo update
- OpenTelemetry演算子のKubernetesネームスペースを作成します。
kubectl create namespace opentelemetry-operator-system
- 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
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
APM Dotnetエージェントのデプロイ
APM Dotnetエージェントをデプロイするには、次のステップを実行します。
- 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
説明:- <data-upload-endpoint>は、APMドメインの作成時に生成されるデータ・アップロード・エンドポイントURLです。詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。
- <private-data-key>は、APMドメインの作成時に生成されるAPM Dotnetエージェント・インストールの秘密キーです。詳細は、データ・アップロード・エンドポイントおよびデータ・キーの取得を参照してください。
作成されたCRを問い合せるには、次のコマンドを実行します。
自動計測が正しく機能するためには、すべてのエンドポイントおよび環境変数が正しい必要があります。kubectl get otelinst -n opentelemetry-operator-system
- 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:
- 次のコマンドを実行します:
- Kubernetesポッドを再起動します。
APM Dotnetエージェントを自動インジェクトするポッドを再起動するには、次を実行します:
kubectl delete pod <your-pod-name> -n <your-namespace-name>
- Kubernetesポッドを確認します。
再起動後にAPM Dotnetエージェントでポッドが自動インジェクトされたことを確認するには、次を実行します:
kubectl get pod <your-pod-name> -n <your-namespace-name> -o yaml
次のステップに移動できるようになりました: APM Dotnetエージェント・デプロイメントの検証。