Наблюдаемость приложения с помощью внедрения Pod во время выполнения

Материал из Документация Ключ-АСТРОМ
Версия от 18:11, 4 ноября 2025; IKuznetsov (обсуждение | вклад) (Новая страница: «Внедрение модуля кода Ключ-АСТРОМ в контейнер во время его развертывания. Этот метод ин...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

Внедрение модуля кода Ключ-АСТРОМ в контейнер во время его развертывания.

Этот метод инструментирования приложений может не полностью связать рабочие нагрузки Kubernetes с отслеживаемыми контейнерами/процессами. Для комплексного анализа взаимосвязей и связывания рассмотрите возможность использования автоматической интеграции только на уровне приложения.

Предустановка

  • Ознакомьтесь со списком поддерживаемых приложений и версий.
  • Создайте токен доступа с областью действия PaaS Integration - InstallerDownload.
  • Требования к хранению:
    • ~325 МБ для glibc
    • ~290 МБ для musl
    • ~650 МБ для glibc и musl вместе взятых
Внедрение Pod во время выполнения и cgroup v2

Если внедрение Pod во время выполнения используется с cgroup v2, метрики builtin:containers.* передаются в Ключ-АСТРОМ только в том случае, если pod запускает один контейнер.

Развертка

Чтобы интегрировать ЕдиныйАгент в ваше приложение во время выполнения, выберите один из вариантов ниже в зависимости от вашей платформы.

Linux

ЕдиныйАгент становится доступным для контейнера приложений через initContainer—образ вашего приложения остается неизменным.

Чтобы интегрировать ЕдиныйАгент в ваше приложение во время выполнения, расширьте шаблон развертывания следующим образом.

# your application containers

      containers:

      - name: customer-app

        image: tomcat

        env:

        - name: LD_PRELOAD

          value: /opt/astromkey/oneagent/agent/lib64/liboneagentproc.so

        - name: DT_NETWORK_ZONE

          value: <your_network_zone>

        volumeMounts:

        - mountPath: /opt/astromkey/oneagent

          name: oneagent

# initcontainer to download OneAgent

      initContainers:

      - name: install-oneagent

        image: alpine:latest

        command:

        - /bin/sh

        args:

        - -c

        - ARCHIVE=$(mktemp) && wget -O $ARCHIVE "$DT_API_URL/v1/deployment/installer/agent/unix/paas/latest?Api-Token=$DT_PAAS_TOKEN&$DT_ONEAGENT_OPTIONS" && unzip -o -d /opt/astromkey/oneagent $ARCHIVE && rm -f $ARCHIVE

        env:

        - name: DT_API_URL

          value: https://<your-environment-id>.live.astromkey.com/api

        - name: DT_PAAS_TOKEN

          value: <Access token with PaaS integration scopes (astromkey -> Access tokens)>

        - name: DT_ONEAGENT_OPTIONS

          value: flavor=<FLAVOR>&include=<TECHNOLOGY>

        volumeMounts:

        - mountPath: /opt/astromkey/oneagent

          name: oneagent

# Make OneAgent available as a volume

      volumes:

      - name: oneagent

        emptyDir: {}

  • В разделах # initContainer to download OneAgent и # Make OneAgent available as a volume добавьте initContainer, который загрузит ЕдиныйАгент и сделает его доступным в виде тома.
  • В разделе DT_ONEAGENT_OPTIONS задайте модуль кода ЕдиногоАгента, необходимый для вашего компилятора (FLAVOR) и приложения (TECHNOLOGY).
    • Допустимые варианты: flavor, default, musl или multidistro. Выберите загрузку default двоичных файлов glibc или выберите загрузку musl двоичных файлов musl. Выберите загрузку multidistro обоих двоичных файлов musl и glibc с последующим автоматическим определением используемых двоичных файлов. Обратите внимание, что размер образа в этом случае будет больше, поскольку он включает обе версии.
    • Допустимые варианты technology: all, java, apache, nginx, nodejs, dotnet, php, go, и sdk.
    • Для ARM используйте следующее значение: flavor=default&arch=arm&include=<TECHNOLOGY>. Для других архитектур см. список допустимых значений (прокрутите вниз до параметра arch).
    • Если вы хотите указать несколько модулей кода, используйте следующий синтаксис: &include=technology1&include=technology2.
Если вы включите конкретные варианты поддержки технологий вместо вариантов «поддержки всех технологий», вы получите меньший пакет ЕдиногоАгента.
Что делать, если образ Docker основан на Alpine Linux?

Ключ-АСТРОМ ЕдиныйАгент поддерживает версию musl для сред на базе Alpine Linux.

Допустимые варианты technology: all, dotnet, go, php, java, apache, nginx и nodejs.

  • В разделе # your application containers добавьте созданный том в контейнер вашего приложения. Также добавьте переменную окружения LD_PRELOAD .
  • необязательно В разделе # your application containers настройте сетевые зоны:
containers:

  env:

  - name: DT_NETWORK_ZONE

    value: <your_network_zone>

Более подробную информацию смотрите в разделе Сетевые зоны.

  • необязательно Настройте прокси-адрес.

Если вы запускаете среду с прокси-сервером, вам необходимо установить переменную среды DT_PROXY в контейнере приложения, чтобы передать учетные данные прокси-сервера в ЕдиныйАгент.

Для контейнеров на базе Alpine Linux вам может потребоваться обновить wget поставляемый с Alpine, чтобы разрешить прокси-аутентификацию для загрузки ЕдиногоАгента.

Windows

Расширьте шаблон развертывания следующим образом.

Этот параметр относится к приложениям .NET в контейнерах Windows.

  • ЕдиныйАгент версии 1.319 и более ранних
# your application containers

apiVersion: apps/v1

kind: Deployment

metadata:

  name: sample

  labels:

    app: sample

spec:

  replicas: 1

  template:

    metadata:

      name: sample

      labels:

        app: sample

    spec:

      nodeSelector:

        "kubernetes.io/os": windows

      containers:

      - name: sample

        image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp

        env:

#.NET Framework

          - name: COR_ENABLE_PROFILING

            value: "0x01"

          - name: COR_PROFILER

            value: "{B7038F67-52FC-4DA2-AB02-969B3C1EDA03}"

          - name: COR_PROFILER_PATH_32

            value: "C:\\oneagent\\agent\\lib\\oneagentloader.dll"

          - name: COR_PROFILER_PATH_64

            value: "C:\\oneagent\\agent\\lib64\\oneagentloader.dll"

#.NET Core

          - name: CORECLR_ENABLE_PROFILING

            value: "0x01"

          - name: CORECLR_PROFILER

            value: "{B7038F67-52FC-4DA2-AB02-969B3C1EDA03}"

          - name: CORECLR_PROFILER_PATH_32

            value: "C:\\oneagent\\agent\\lib\\oneagentloader.dll"

          - name: CORECLR_PROFILER_PATH_64

            value: "C:\\oneagent\\agent\\lib64\\oneagentloader.dll"

          - name: DT_AGENTACTIVE

            value: "true"

          - name: DT_BLOCKLIST

            value: "powershell*"

        volumeMounts:

          - mountPath: "C:\\OneAgent"

            name: oneagent

# initcontainer to download OneAgent

      initContainers:

      - name: install-oneagent

        image: mcr.microsoft.com/windows/servercore:ltsc2019

        command:

        - powershell

        args:

          - |

            Write-Host "Trustng all certificates..."

            add-type @"

            using System.Net;

            using System.Security.Cryptography.X509Certificates;

            public class TrustAllCertsPolicy : ICertificatePolicy {

            public bool CheckValidationResult(

            ServicePoint srvPoint, X509Certificate certificate,

            WebRequest request, int certificateProblem) {

            return true;

            }

            }

            "@

            [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

            Write-Host "Downloading agent..."

            Invoke-WebRequest -Uri "$Env:DT_API_URL/v1/deployment/installer/agent/windows/paas/latest?Api-Token=$Env:DT_PAAS_TOKEN&$Env:DT_ONEAGENT_OPTIONS" -OutFile "installer.zip"

            Write-Host "Unpacking agent..."

            Expand-Archive -Path "installer.zip" -DestinationPath "C:\OneAgent" -Force

            Write-Host "Configuring agent..."

            $manifest = Get-Content "C:\OneAgent\manifest.json" | ConvertFrom-Json

            $config = New-Item -Path "C:\OneAgent\agent\conf" -Name "standalone.conf" -Force

            Add-Content -Path $config -Value "tenant $($manifest.tenantUUID)"

            Add-Content -Path $config -Value "tenanttoken $($manifest.tenantToken)"

            Add-Content -Path $config -Value "server $($manifest.communicationEndpoints -Join ';')"

            Add-Content -Path $config -Value "storage C:\OneAgent"

            Add-Content -Path $config -Value "loglevelcon NONE"

        env:

        - name: DT_API_URL

          value: https://<your-environment-id>.live.astromkey.com/api

        - name: DT_PAAS_TOKEN

          value: <Access token with PaaS integration scopes (astromkey -> Access tokens)>

        - name: DT_ONEAGENT_OPTIONS

          value: arch=default&include=dotnet

        volumeMounts:

        - mountPath: "C:\\OneAgent"

          name: oneagent

# Make OneAgent available as a volume

      volumes:

      - name: oneagent

        emptyDir: {}

   selector:

    matchLabels:

      app: sample

---

apiVersion: v1

kind: Service

metadata:

  name: sample

spec:

  type: LoadBalancer

  ports:

  - protocol: TCP

    port: 80

  selector:

    app: sample

  • ЕдиныйАгент версии 1.321+
# your application containers

apiVersion: apps/v1

kind: Deployment

metadata:

  name: sample

  labels:

    app: sample

spec:

  replicas: 1

  template:

    metadata:

      name: sample

      labels:

        app: sample

    spec:

      nodeSelector:

        "kubernetes.io/os": windows

      containers:

      - name: sample

        image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp

        env:

#.NET Framework

          - name: COR_ENABLE_PROFILING

            value: "0x01"

          - name: COR_PROFILER

            value: "{B7038F67-52FC-4DA2-AB02-969B3C1EDA03}"

          - name: COR_PROFILER_PATH_32

            value: "C:\\oneagent\\agent\\bin\\current\\windows-x86-32\\oneagentdotnet.dll"

          - name: COR_PROFILER_PATH_64

            value: "C:\\oneagent\\agent\\bin\\current\\windows-x86-64\\oneagentdotnet.dll"

#.NET Core

          - name: CORECLR_ENABLE_PROFILING

            value: "0x01"

          - name: CORECLR_PROFILER

            value: "{B7038F67-52FC-4DA2-AB02-969B3C1EDA03}"

          - name: CORECLR_PROFILER_PATH_32

            value: "C:\\oneagent\\agent\\bin\\current\\windows-x86-32\\oneagentdotnet.dll"

          - name: CORECLR_PROFILER_PATH_64

            value: "C:\\oneagent\\agent\\bin\\current\\windows-x86-64\\oneagentdotnet.dll"

          - name: DT_AGENTACTIVE

            value: "true"

          - name: DT_BLOCKLIST

            value: "powershell*"

        volumeMounts:

          - mountPath: "C:\\OneAgent"

            name: oneagent

# initcontainer to download OneAgent

      initContainers:

      - name: install-oneagent

        image: mcr.microsoft.com/windows/servercore:ltsc2019

        command:

        - powershell

        args:

          - |

            Write-Host "Trustng all certificates..."

            add-type @"

            using System.Net;

            using System.Security.Cryptography.X509Certificates;

            public class TrustAllCertsPolicy : ICertificatePolicy {

            public bool CheckValidationResult(

            ServicePoint srvPoint, X509Certificate certificate,

            WebRequest request, int certificateProblem) {

            return true;

            }

            }

            "@

            [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

            Write-Host "Downloading agent..."

            Invoke-WebRequest -Uri "$Env:DT_API_URL/v1/deployment/installer/agent/windows/paas/latest?Api-Token=$Env:DT_PAAS_TOKEN&$Env:DT_ONEAGENT_OPTIONS" -OutFile "installer.zip"

            Write-Host "Unpacking agent..."

            Expand-Archive -Path "installer.zip" -DestinationPath "C:\OneAgent" -Force

            Write-Host "Configuring agent..."

            $manifest = Get-Content "C:\OneAgent\manifest.json" | ConvertFrom-Json

            $config = New-Item -Path "C:\OneAgent\agent\conf" -Name "standalone.conf" -Force

            Add-Content -Path $config -Value "tenant $($manifest.tenantUUID)"

            Add-Content -Path $config -Value "tenanttoken $($manifest.tenantToken)"

            Add-Content -Path $config -Value "server $($manifest.communicationEndpoints -Join ';')"

            Add-Content -Path $config -Value "storage C:\OneAgent"

            Add-Content -Path $config -Value "loglevelcon NONE"

        env:

        - name: DT_API_URL

          value: https://<your-environment-id>.live.astromkey.com/api

        - name: DT_PAAS_TOKEN

          value: <Access token with PaaS integration scopes (astromkey -> Access tokens)>

        - name: DT_ONEAGENT_OPTIONS

          value: arch=default&include=dotnet

        volumeMounts:

        - mountPath: "C:\\OneAgent"

          name: oneagent

# Make OneAgent available as a volume

      volumes:

      - name: oneagent

        emptyDir: {}

   selector:

    matchLabels:

      app: sample

---

apiVersion: v1

kind: Service

metadata:

  name: sample

spec:

  type: LoadBalancer

  ports:

  - protocol: TCP

    port: 80

  selector:

    app: sample

  • В разделах # initContainer to download OneAgent и # Make OneAgent available as a volume добавьте initContainer, который загрузит ЕдиныйАгент и сделает его доступным в виде тома.
  • Раздел # your application containers содержит переменные среды, которые позволяют отслеживать приложения .NET Framework и .NET Core. Их можно устанавливать одновременно. Для .NET Core COR_ prefix меняется на CORECLR_, например CORECLR_ENABLE_PROFILING, .

Чтобы сообщить правильные ограничения памяти в Kubernetes:

1. Вам необходимо указать лимит при развертывании.

spec:

  containers:

...

    resources:

      limits:

        memory: "32Gi"

    requests:

        memory: "4Gi"

2. Вам необходимо включить доступ к API Kubernetes, чтобы ЕдиныйАгент мог прочитать это значение.

Обновление

Каждый раз, когда вы захотите использовать новую версию ЕдиногоАгента, вам нужно будет только заново развернуть модули. При внедрении в среду выполнения ЕдиныйАгент загружается и внедряется в initContainer. По умолчанию загружается последняя версия ЕдиногоАгента, но вы можете указать, какую версию ЕдиногоАгента следует загрузить, указав её в URL-адресе для загрузки.

Удаление

Чтобы удалить ЕдиныйАгент из мониторинга только приложений

1. Удалите install-oneagent YAML из шаблона развертывания.

# your application containers

containers:

  - name: customer-app

    image: tomcat

    env:

      - name: LD_PRELOAD

        value: /opt/astromkey/oneagent/agent/lib64/liboneagentproc.so

    volumeMounts:

      - mountPath: /opt/astromkey/oneagent

        name: oneagent

# initContainer to download OneAgent

initContainers:

  - name: install-oneagent

    image: alpine:3.8

    command:

      - /bin/sh

    args:

      - -c

      - ARCHIVE=$(mktemp) && wget -O $ARCHIVE "$DT_API_URL/v1/deployment/installer/agent/unix/paas/latest?Api-Token=$DT_PAAS_TOKEN&$DT_ONEAGENT_OPTIONS" && unzip -o -d /opt/astromkey/oneagent $ARCHIVE && rm -f $ARCHIVE

    env:

      - name: DT_API_URL

        value: https://<Your-environment-ID>.live.astromkey.com/api

      - name: DT_PAAS_TOKEN

        value: <paastoken>

      - name: DT_ONEAGENT_OPTIONS

        value: flavor=<FLAVOR>&include=<TECHNOLOGY>

    volumeMounts:

      - mountPath: /opt/astromkey/oneagent

        name: oneagent

# Make OneAgent available as a volume

volumes:

  - name: oneagent

    emptyDir: {}

2. Повторно разверните ваше приложение.