Distribuisci agente Dotnet APM

Una volta eseguito correttamente il provisioning dell'agente Dotnet APM, è possibile distribuire l'agente Dotnet APM in Windows o Linux.

Distribuire l'agente Dotnet APM in Windows

Una volta eseguito correttamente il provisioning dell'agente Dotnet APM, è possibile distribuire l'agente Dotnet APM in Windows.

Per distribuire l'agente Dotnet APM su qualsiasi applicazione, è necessario aggiungere un set di variabili di ambiente prima di avviare l'applicazione.

  1. Preparare PowerShell.

    Prima di distribuire l'agente APM Dotnet su Windows, è necessario preparare PowerShell.

    Nota

    PowerShell versione 5.1 o successiva è supportata.

    Se si dispone di PowerShell versione 4.0, è necessario aggiornarlo alla versione 5.1 per continuare.

    1. Aprire Windows PowerShell come amministratore.
    2. Passare alla directory di destinazione in cui è stato eseguito il provisioning dell'agente APM.
    3. Eseguire il comando seguente nella console PowerShell:
      Import-Module ./OpenTelemetry.DotNet.Auto.psm1
  2. Preparare le variabili ambientali su PowerShell.
    Esaminare le seguenti variabili ambientali necessarie per la distribuzione dell'agente Dotnet APM:
    $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>"
    Where:
    • <data-upload-endpoint>: URL DataUploadEndpoint generato quando viene creato il dominio APM. Per informazioni, vedere Ottenere endpoint di caricamento dati e chiavi dati.
    • <private-data-key>: la chiave di installazione dell'agente utilizzata dagli agenti Dotnet APM (dataKey privato) generata al momento della creazione del dominio APM. Per informazioni, vedere Ottenere endpoint di caricamento dati e chiavi dati.
    • <service-name>: il nome del servizio monitorato. Ciò consente di filtrare per servizio e visualizzare i trace nell'interfaccia utente di Trace Explorer.
    Ad esempio:
    $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"

    Se necessario, è possibile aggiungere altre variabili di ambiente. Ad esempio, se è necessario configurare l'iniezione dell'agente del browser o la traccia abbreviata. Il nome della variabile di ambiente deve utilizzare il prefisso $env: e il valore della variabile di ambiente deve essere racchiuso tra virgolette doppie "".

    Best Practice: esegue la cancellazione della cronologia dopo aver distribuito l'agente APM .NET. In questo modo i dati riservati, ad esempio la chiave dati privata, vengono eliminati dalla cronologia PowerShell.

  3. Facoltativo: registra le DLL di .NET Framework in GAC.

    Questo passo è richiesto solo dalle applicazioni del framework .NET. Se non si dispone di un'applicazione .NET Framework, saltare questo passo.

    Per registrare le DLL del framework .NET in GAC, effettuare le operazioni riportate di seguito.
    Register-OpenTelemetryDllsToGac
  4. Distribuire l'agente Dotnet APM.

    Distribuire l'agente APM Dotnet nelle seguenti applicazioni:

Distribuisci su server IIS

Eseguire il comando riportato di seguito sulla console PowerShell.
Register-OpenTelemetryForIIS

Distribuisci su servizio Windows

Eseguire il comando riportato di seguito sulla console PowerShell.
Register-OpenTelemetryForWindowsService -WindowsServiceName <WindowsServiceName>

Distribuzione nell'applicazione Console

Di seguito sono riportate informazioni su come distribuire l'agente APM Dotnet nell'applicazione Console.

  1. Preparare le variabili di ambiente per distribuire l'agente Dotnet APM.

    Esaminare le seguenti variabili di ambiente necessarie per la distribuzione dell'agente Dotnet APM per l'applicazione console:

    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

    I valori seguenti devono essere sostituiti da quelli corretti:

    Segnaposto descrizione;
    <destinazione> Directory di destinazione in cui viene eseguito il provisioning dell'agente Dotnet APM.

    Ad esempio: C:\tracer-home

    <service-name> Il nome del servizio monitorato.

    Ciò consente di filtrare per servizio e visualizzare i trace nell'interfaccia utente di Trace Explorer.

    Ad esempio apm_service

    <data-upload-endpoint> L'URL dataUploadEndpoint generato quando viene creato il dominio APM.

    Ad esempio: https://dataUploadEndpoint.com

    <chiave dati privata> Chiave di installazione dell'agente utilizzata dall'agente APM Dotnet (dataKey privato), generata al momento della creazione del dominio APM.

    Ad esempio IMWJ5UN2C

    Nota

    Per informazioni sull'endpoint di caricamento dati e sulle chiavi dati private, vedere Ottenere l'endpoint di caricamento dati e le chiavi dati.

  2. Eseguire l'applicazione Console.
    1. Avviare un prompt dei comandi.

    2. Impostare le variabili di ambiente dal passaggio 1 nel prompt dei comandi.

    3. Nello stesso prompt dei comandi, eseguire l'applicazione console.

Distribuire l'agente Dotnet APM in Linux

Quando si esegue correttamente il provisioning dell'agente APM Dotnet, è possibile distribuire l'agente APM Dotnet in Linux.

Per distribuire l'agente Dotnet APM su qualsiasi applicazione, è necessario aggiungere un set di variabili di ambiente prima di avviare l'applicazione.

  1. Prepara variabili ambientali

    Per distribuire l'agente Dotnet APM su qualsiasi applicazione, è necessario impostare ed esportare le variabili.

    Rivedere e impostare le seguenti variabili ambientali necessarie per la distribuzione dell'agente Dotnet APM:
    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>"
    

    I valori seguenti devono essere sostituiti da quelli corretti:

    Segnaposto descrizione;
    <destinazione> Directory di destinazione in cui viene eseguito il provisioning dell'agente Dotnet APM.
    <service-name> Il nome del servizio monitorato.

    Ciò consente di filtrare per servizio e visualizzare i trace nell'interfaccia utente di Trace Explorer.

    Ad esempio apm_service

    <data-upload-endpoint> L'URL dataUploadEndpoint generato quando viene creato il dominio APM.

    Ad esempio: https://dataUploadEndpoint.com

    Per informazioni, vedere Ottenere l'endpoint di caricamento dati e le chiavi dati.

    <chiave dati privata> Chiave di installazione dell'agente utilizzata dall'agente APM Dotnet (dataKey privato) generata al momento della creazione del dominio APM.

    Ad esempio: IMWJ5UN

    Per informazioni, vedere Ottenere l'endpoint di caricamento dati e le chiavi dati.

  2. Configurare variabili di ambiente aggiuntive eseguendo lo script seguente:
    . $OTEL_DOTNET_AUTO_HOME/instrument.sh
  3. Eseguire l'applicazione.
    1. Aprire una sessione della shell.
    2. Impostare le variabili ambientali dai passi 1 e 2 nella sessione shell.
    3. Nella stessa sessione, eseguire l'applicazione.

Distribuire l'agente Dotnet APM in Kubernetes utilizzando l'operatore OpenTelemetry

Di seguito sono riportate informazioni su come distribuire un agente Dotnet APM utilizzando l'operatore OpenTelemetry per iniettare e configurare automaticamente l'agente Dotnet APM nei pod dell'applicazione Dotnet sui cluster Kubernetes (K8s).

È possibile utilizzare l'agente Dotnet APM per monitorare le applicazioni Dotnet. L'operatore OpenTelemetry viene utilizzato per distribuire l'agente APM Dotnet ed è un'implementazione di un operatore K8s che fornisce un modo semplice per inserire automaticamente gli agenti Dotnet nelle applicazioni Dotnet in esecuzione su pod K8s.

Requisito

Installare OpenTelemetry Operator nel cluster K8s.

Sono disponibili tre diverse opzioni tra cui scegliere: Grafico timbro operatore, File manifesto di rilascio operatore o Hub operatore.

Nella maggior parte dei casi, è necessario installare un cert-manager. Se si utilizza l'opzione del grafico helm, è possibile generare un certificato con firma automatica.

Opzione 1: grafico helm operatore

Questa opzione consente di utilizzare il grafico helm per installare l'operatore OpenTelemetry.

  1. Aggiungere il repository del grafico helm.
    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    helm repo update
  2. Crea lo spazio di nomi Kubernetes per l'operatore OpenTelemetry.
    kubectl create namespace opentelemetry-operator-system
  3. Installare l'operatore 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

Opzione 2: file manifesto di rilascio dell'operatore

Questa opzione consente di utilizzare i file YAML per installare l'operatore OpenTelemetry.

Per installare cert manager, eseguire le operazioni riportate di seguito.
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.1/cert-manager.yaml
Per installare l'operatore OpenTelemetry, eseguire le operazioni riportate di seguito.
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

Distribuisci agente Dotnet APM

Per distribuire l'agente Dotnet APM, effettuare le operazioni riportate di seguito.

  1. Crea una risorsa personalizzata (CR) Kubernetes.

    Per gestire la strumentazione automatica, è necessario che all'operatore OpenTelemetry vengano fornite informazioni sull'agente Dotnet APM e sulla relativa configurazione che viene eseguita utilizzando la definizione di risorse personalizzate (CRD).

    Questa risorsa personalizzata verrà utilizzata dall'operatore per copiare l'agente nel pod e aggiungervi la configurazione richiesta.

    Eseguire il comando seguente per creare la CR sul cluster Kubernetes:

    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
    Where:
    È possibile eseguire la query sulla CR creata eseguendo il seguente comando:
    kubectl get otelinst -n opentelemetry-operator-system
    Tutti gli endpoint e le variabili di ambiente devono essere corretti affinché la strumentazione automatica funzioni correttamente.
  2. Aggiungere l'annotazione Kubernetes.

    L'operatore OpenTelemetry utilizza l'annotazione Kubernetes per decidere quali pod devono essere iniettati automaticamente con l'agente Dotnet APM.

    L'annotazione può essere aggiunta a uno spazio di nomi. In tal caso, tutti i pod all'interno di tale spazio di nomi verranno iniettati. L'annotazione può essere aggiunta anche a singoli oggetti PodSpec, disponibili come parte di Distribuzione, Statefulset e altre risorse.

    Annotazione per x64 glibc:
    annotations:
      instrumentation.opentelemetry.io/inject-dotnet: opentelemetry-operator-system/inst-apm-dotnet
    Annotazione per x64 musl:
    annotations:
      instrumentation.opentelemetry.io/inject-dotnet: opentelemetry-operator-system/inst-apm-dotnet
      instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: linux-musl-x64
    Per iniziare a modificare lo spazio di nomi, effettuare le operazioni riportate di seguito.
    • Eseguire il comando:
      kubectl edit namespace <your-namespace-name>
    • Dopo aver eseguito il comando precedente, modificare lo spazio dei nomi una volta aperto l'editor. Ad esempio, utilizzare l'editor vi.
    • Aggiungere l'annotazione allo spazio di nomi. Tenere presente che il rientro è molto importante per renderlo un file YAML valido.
    Di seguito è riportato un esempio di spazio di nomi con l'annotazione aggiunta.
    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. Riavviare il pod Kubernetes.

    Per riavviare il pod in cui si desidera inserire automaticamente l'agente Dotnet APM, eseguire le operazioni riportate di seguito.

    kubectl delete pod <your-pod-name> -n <your-namespace-name>
  4. Verificare il pod Kubernetes.
    Per verificare che il pod sia stato iniettato automaticamente con l'agente APM Dotnet dopo il riavvio, eseguire le operazioni riportate di seguito.
    kubectl get pod <your-pod-name> -n <your-namespace-name> -o yaml

È ora possibile passare al passo successivo: Verifica distribuzione agente Dotnet APM.