GraalVM Native Image

Материал из Документация Ключ-АСТРОМ

GraalVM Native Image разработан для достижения высокой производительности при запуске приложений, написанных на Java и других языках, путём предварительной компиляции кода Java в нативные образы. Скомпилированные с помощью AOT нативные образы содержат только необходимый во время выполнения код Java и исключают всё остальное из библиотек и фреймворков.

Ключ-АСТРОМ обеспечивает сквозную распределенную трассировку для ваших нативных приложений Java, предварительно скомпилированных в виде образа GraalVM Native Image, работающих в виртуализированных, контейнеризированных и K8s-средах. Ключ-АСТРОМ автоматически обнаруживает службы ваших нативных приложений Java и визуализирует их зависимости от веб-сайта до контейнеров, инфраструктуры и облака. Ключ-АСТРОМ диагностирует аномалии в режиме реального времени с помощью ИИ и определяет первопричину, вплоть до неисправного кода. Метрики производительности дают представление об использовании памяти, сборке мусора и потоках.

Поддерживаемые технологии распределенной трассировки см. в разделе Java Native Image .

Для наблюдения за Ключ-АСТРОМ GraalVM Native Image требуется лицензия Full-Stack Monitoring .

Начать

Модуль Ключ-АСТРОМ GraalVM Native Image состоит из модуля сборки и модуля времени выполнения . Модуль времени сборки должен присутствовать во время сборки Native Image. Модуль времени выполнения должен присутствовать при запуске Native Image для сбора телеметрических данных.

  • Для обеспечения совместимости оба модуля должны быть одной и той же версии.
  • Никаких изменений в коде вашего приложения вносить не требуется.

Интегрируйте Ключ-АСТРОМ в свой проект

Проекты Maven

Интеграция Ключ-АСТРОМ в проект Maven

1. Добавьте в ваш файл pom.xml следующее :

<profile>

   <id>astromkey-native</id>

   <build>

       <plugins>

           <plugin>

               <groupId>com.astromkey.buildtools.graalnative</groupId>

               <artifactId>astromkey-native-maven-plugin</artifactId>

               <version>2.0.1</version>

               <executions>

                   <execution>

                       <goals>

                           <goal>setup-build-agent</goal>

                           <goal>copy-runtime-agent</goal>

                       </goals>

                       <configuration>

                           <agentDownload>

                               <environmentUrl>ENVIRONMENT_URL</environmentUrl>

                               <apiToken>API_TOKEN</apiToken>

                           </agentDownload>

                       </configuration>

                   </execution>

               </executions>

               <extensions>true</extensions>

           </plugin>

       </plugins>

   </build>

</profile>

Замените ENVIRONMENT_URLи API_TOKEN в соответствии с вашей средой Ключ-АСТРОМ:

  • ENVIRONMENT_URL— это URL-адрес среды мониторинга Ключ-АСТРОМ .
  • API_TOKEN— это ваш токен доступа, который может быть предоставлен, например, с помощью переменной среды <apiToken>${env.DT_API_TOKEN}</apiToken>. Для этого токена доступа требуется область загрузки PaaS-интеграции — установщик . Чтобы узнать, как сгенерировать токен, см. раздел Сгенерировать токен доступа.

Это автоматически загрузит и использует последнюю версию модуля GraalVM Native Image, доступную в вашей среде. Чтобы использовать конкретную версию модуля GraalVM Native Image, добавьте <agentVersion>AGENT_VERSION</agentVersion> в конфигурацию agentDownload.

Кроме того, вы также можете вручную загрузить модуль GraalVM Native Image и использовать

<configuration>

    <agentZip>PATH_TO_DOWNLOADED_ZIP</agentZip>

</configuration>

Чтобы настроить плагин Ключ-АСТРОМ, замените PATH_TO_DOWNLOADED_ZIP абсолютным или относительным путём к загруженному ZIP-файлу.

2. Запустите mvnw package -Pnative -Pastromkey-native. Это позволит создать образ Native, включающий Ключ-АСТРОМ. Профиль native добавляет плагин Maven для сборки образа GraalVM Native .

Как правило, полученный Native Image будет доступен в папке target. Помимо Native Image, там будет папка astromkey. Она необходима для мониторинга во время выполнения. Если вы хотите запустить Native Image на другом компьютере, скопируйте папку astromkey вместе с Native Image.

Проекты Gradle

Предустановка
  • Gradle 8.4+ работает на поддерживаемой JVM или собственном образе Java версии 17+.
  • К вашему проекту org.graalvm.buildtools:native-gradle-plugin применен плагин Gradle версии 0.10+.

Интеграция Ключ-АСТРОМ в проект Gradle

1. Добавьте следующий код в settings.gradle:

pluginManagement {

    repositories {

        mavenCentral()

    }

}

Добавьте следующий код в build.gradle:

plugins {

    id 'com.astromkey.buildtools.graalnative' version '2.0.0'

}

astromkey {

    agentDownload {

        environmentUrl = "ENVIRONMENT_URL"

        apiToken = "API_TOKEN"

    }

}

Замените ENVIRONMENT_URL и API_TOKEN в соответствии с вашей средой Ключ-АСТРОМ:

  • ENVIRONMENT_URL— это URL-адрес среды мониторинга Ключ-АСТРОМ .
  • API_TOKEN— это ваш токен доступа, который может быть предоставлен, например, с помощью переменной среды System.getenv("DT_API_TOKEN"). Для этого токена доступа требуется область загрузки PaaS-интеграции — установщик . Чтобы узнать, как сгенерировать токен, см. раздел Сгенерировать токен доступа.

Это автоматически загрузит и использует последнюю версию модуля GraalVM Native Image, доступную в вашей среде. Чтобы использовать конкретную версию модуля GraalVM Native Image, добавьте agentVersion = "AGENT_VERSION" в конфигурацию agentDownload.

Кроме того, вы также можете вручную загрузить модуль GraalVM Native Image и использовать

astromkey {

    agentZip = "PATH_TO_DOWNLOADED_ZIP"

}

Чтобы настроить плагин Ключ-АСТРОМ, замените PATH_TO_DOWNLOADED_ZIP абсолютным или относительным путём к загруженному ZIP-файлу.

3. Запустите gradlew astromkeyNativeCompile для создания собственного образа, включая Ключ-АСТРОМ.

Как правило, полученный Native Image находится в папке build/native/nativeCompile. Помимо Native Image, эта папка содержит папку astromkey. Она необходима для мониторинга во время выполнения. Если вы хотите запустить Native Image на другом компьютере, скопируйте папку astromkey вместе с Native Image.

Ручная загрузка модуля GraalVM Native Image

Вы также можете вручную загрузить модуль GraalVM Native Image из Ключ-АСТРОМ ЕдиныйАгент Deployment API для вашей целевой платформы.

Пример вызова API с использованием curl:

curl -X GET "$DT_TENANT_URL/api/v1/deployment/installer/agent/$OS_TYPE/paas/latest?flavor=default&arch=$ARCH&bitness=64&include=java-graal-native&skipMetadata=true" -H "accept: application/octet-stream"  -H "Authorization: Api-Token $DT_API_TOKEN" -o agent.zip


Замените $DT_TENANT_URL, $OS_TYPE, $ARCH, и $DT_API_TOKEN значениями вашей среды Ключ-АСТРОМ.

  • $DT_TENANT_URL— это URL-адрес вашей среды Ключ-АСТРОМ.
  • $OS_TYPE может быть unix или windows.
  • $ARCH может быть x86 или arm, тогда как arm доступно только для типа ОС unix.
  • $DT_API_TOKEN ваш токен доступа, связанный с интеграцией PaaS — область загрузки установщика. Чтобы узнать, как сгенерировать токен, см. раздел Сгенерировать токен доступа.

Активировать наблюдаемость Ключ-АСТРОМ

Если у вас уже установлен ЕдиныйАгент или вы используете Ключ-АСТРОМ Operator для Kubernetes, данные подключения Ключ-АСТРОМ применяются автоматически и активируется возможность наблюдения за собственным образом GraalVM.

Чтобы активировать функцию наблюдения Ключ-АСТРОМ во время выполнения, определите параметры подключения Ключ-АСТРОМ с помощью переменных среды DT_TENANT, DT_TENANTTOKEN, и DT_CONNECTION_POINT. Пример для Ключ-АСТРОМ SaaS:

export DT_TENANT=$DT_TENANT_ID

export DT_TENANTTOKEN=$DT_TENANTTOKEN

export DT_CONNECTION_POINT=$DT_CONNECTION_POINT

./$YOUR_APP_NAME


Замените $DT_TENANT_ID, $DT_TENANTTOKEN, и $DT_CONNECTION_POINT данными вашего подключения Ключ-АСТРОМ. Замените $YOUR_APP_NAME именем вашего приложения.

Вы можете получить данные о подключении, выполнив команду Просмотр информации о подключении для вызова API ЕдиногоАгента. В ответе необходимо указать следующие поля:

  • tenantUUID для $DT_TENANT_ID
  • tenantToken для $DT_TENANTTOKEN
  • communicationEndpoints для $DT_CONNECTION_POINT

Конфигурация плагина

Плагин Maven

Плагин Maven настраивается через профиль astromkey-native в файле pom.xml. Например:

<configuration>

    <agentDownload>

        <environmentUrl>${env.DT_TENANT_URL}</environmentUrl>

        <apiToken>${env.DT_API_TOKEN}</apiToken>

    </agentDownload>

    <agentOptions>loglevelcon=info</agentOptions>

</configuration>


Вы можете настроить следующие свойства:

  • agentDownload используется для настройки автоматической загрузки модуля GraalVM Native Image:
    • environmentUrl указывает URL-адрес среды мониторинга Ключ-АСТРОМ .
    • apiToken указывает токен доступа с интеграцией PaaS — область загрузки установщика. Чтобы узнать, как сгенерировать токен, см. раздел Сгенерировать токен доступа.
    • agentVersion указывает версию модуля GraalVM Native Image. Если не указано, используется последняя версия модуля GraalVM Native Image.
  • agentZip задает абсолютный или относительный путь к загруженному вручную ZIP-файлу.
  • agentOptions определяет параметры модуля времени сборки Ключ-АСТРОМ (необязательно).

Доступны следующие варианты agentOptions:

  • loglevelcon устанавливает уровень ведения журнала консоли. Возможные значения: off (по умолчанию), severe, warning, и info.
  • agentconfigpath задает абсолютный путь к файлу конфигурации JSON (см. следующий раздел).

Плагин Gradle

Плагин Gradle настраивается через блок astromkey в build.gradle. Например:

astromkey {

    agentDownload {

        environmentUrl = System.getenv("DT_TENANT_URL")

        apiToken = System.getenv("DT_API_TOKEN")

    }

    agentOptions="loglevelcon=info"

}


Вы можете настроить следующие свойства:

  • agentDownload используется для настройки автоматической загрузки модуля GraalVM Native Image:
    • environmentUrl указывает URL-адрес среды мониторинга Ключ-АСТРОМ .
    • apiToken указывает токен доступа с интеграцией PaaS — область загрузки установщика. Чтобы узнать, как сгенерировать токен, см. раздел Сгенерировать токен доступа.
    • agentVersion указывает версию модуля GraalVM Native Image. Если не указано, используется последняя версия модуля GraalVM Native Image.
  • agentZip задает абсолютный или относительный путь к загруженному вручную ZIP-файлу.
  • agentOptions определяет параметры модуля времени сборки Ключ-АСТРОМ (необязательно).

Доступны следующие варианты agentOptions:

  • loglevelcon устанавливает уровень ведения журнала консоли. Возможные значения: off (по умолчанию), severe, warning, и info.
  • agentconfigpath задает абсолютный путь к файлу конфигурации JSON (см. следующий раздел).

Конфигурация модуля GraalVM Native Image

Модуль времени сборки

Модуль сборки Ключ-АСТРОМ предварительно настроен с рекомендуемыми настройками. При необходимости вы можете переопределить значения по умолчанию с помощью JSON-файла конфигурации во время сборки. Например:

{

    "enabledSensors": [

        "servlet"

    ]

}

Доступны следующие (точки контроля) enabledSensors:

  • servlet: Входящие HTTP-запросы через Servlet API
  • netty: Входящие HTTP-запросы через Netty
  • httpclient: Исходящие HTTP-запросы
  • threading: Распространение контекста для потоков и исполнителей
  • mongo: Вызовы базы данных MongoDB

Чтобы отключить, удалите enabledSensors из списка.

Модуль выполнения

Режим FIPS

Режим FIPS по умолчанию отключен. Чтобы включить режим FIPS для модуля среды выполнения, удалите файл agent/dt_fips_disabled.flag в папке astromkey рядом с исходным образом.

Известные ограничения

Ожидается, что в версиях GraalVM 17.0.12+, 21.0.4+ и 22.0.2+ это больше не понадобится.

Если вы используете Spring RestTemplate и получаете несвязанные трассировки, попробуйте следующий обходной путь.

Проекты Maven

Настройте в вашем файле pom.xml:

<jvmArgs>

  <arg>--add-opens=java.base/sun.net.www.protocol.http=ALL-UNNAMED</arg>

  <arg>--add-opens=java.base/java.net=ALL-UNNAMED</arg>

  <arg>--add-exports=java.base/sun.net.www=ALL-UNNAMED</arg>

</jvmArgs>

Для справки см. плагин Maven для построения образа GraalVM Native.

Проекты Gradle

Настройте в вашем файле build.gradle:

graalvmNative {

  binaries {

    main {

      jvmArgs.addAll(

        '--add-opens', 'java.base/sun.net.www.protocol.http=ALL-UNNAMED',

        '--add-opens', 'java.base/java.net=ALL-UNNAMED',

        '--add-exports', 'java.base/sun.net.www=ALL-UNNAMED'

      )

    }

  }

}