Мониторинг JVM в AWS Fargate

В настоящее время я пытаюсь подключить VisualVM (программа, которая отслеживает JVM, использование кучи и памяти и т. д.) к приложению Spring Boot (Java-приложение), работающему на AWS Fargate в контейнерах Docker.

Я соответственно открывал порты JMX и могу подключаться через порты JMX при локальном запуске контейнера Docker. Однако при запуске приложения Java на Fargate я не нашел способа подключиться к контейнеру через JMX. Я попытался установить аргумент VM -Djava.rmi.server.hostname на IP-адрес контейнера, но когда я пытаюсь подключиться через JMX, это все равно не удается. У кого-нибудь был опыт с этим?

Команды JMX для справки:

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.17.0.2 \
-Dcom.sun.management.jmxremote.port=9090\
-Dcom.sun.management.jmxremote.rmi.port=9090\
-jar java-api.jar server```


person John    schedule 19.02.2020    source источник
comment
Какую версию JVM вы используете? Если это 8, то кажется невозможным запустить сервер JMX из-за проблемы с разрешением localhost. Я успешно настроил удаленное соединение JMX в контейнере Fargate с помощью JVM 11. Убедитесь, что порт указан в определении задачи и что группы безопасности разрешают входящие соединения на этом порту. Также для подключения ваш контейнер должен иметь общедоступный IP-адрес, и вам необходимо использовать общедоступный IP-адрес для подключения к контейнеру (его можно найти в деталях задачи контейнера).   -  person sihaya    schedule 11.05.2020
comment
Я использую Java 11, и порты JMX отображаются соответственно. Однако контейнер имеет только частный IP-адрес из соображений безопасности, я думаю, это и будет причиной его сбоя.   -  person John    schedule 12.05.2020


Ответы (1)


Следующие изменения помогли мне подключить Visual VM к приложению Spring Boot, развернутому в AWS Fargate (частный VPC).

  • JVM-параметры
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.rmi.port=1099 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.local.only=false \
-Djava.rmi.server.hostname=127.0.0.1
  • порт экспорта 1099 (как в файле dockerfile, так и в шаблоне cloudformation - PortMappings->ContainerPort)

  • Группа безопасности контейнера для приема входящего трафика на 1099 (tcp и udp) от одного из существующих EC2 в vpc (сервер перехода)

  • переадресация порта ssh с помощью EC2 (сервер перехода) для задачи, работающей в fargate (используйте частный IP-адрес задачи, работающей в fargate)

выполните следующую команду на локальном

ssh -l <user> -L 127.0.0.1:1099:<task-private-ip-in-fargate>:1099 <ec2-ip(jump server)>
  • Подключите VisualVM с помощью соединения JMX на 127.0.0.1:1099.
person Snehal Patel    schedule 08.10.2020