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
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 APInetty: Входящие HTTP-запросы через Nettyhttpclient: Исходящие 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' ) } } } |