Para implantar várias instâncias de uma aplicação em um único host, defina o parâmetro -Darms.agentId com um valor exclusivo para cada processo JVM, como 001, 002 ou 003. Esse parâmetro especifica o processo JVM de destino.
Exemplo
# Instance 1
java -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar \
-Darms.licenseKey=<LicenseKey> \
-Darms.appName=<AppName> \
-Darms.agentId=001 \
-jar demoApp.jar
# Instance 2
java -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar \
-Darms.licenseKey=<LicenseKey> \
-Darms.appName=<AppName> \
-Darms.agentId=002 \
-jar demoApp.jar
Substitua os espaços reservados pelos valores reais:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
Caminho absoluto do diretório de instalação do agente ARMS |
|
|
|
Chave de licença do ARMS da aplicação |
|
|
|
Nome da aplicação registrada no ARMS |
|
O argumento -javaagent deve preceder o argumento -jar, pois é uma opção da JVM, e não um argumento da aplicação.
Em versões do agente ARMS anteriores a 2.7.3.5, substitua aliyun-java-agent.jar por arms-bootstrap-1.7.0-SNAPSHOT.jar. Atualize para a versão mais recente do agente para obter os recursos e as correções atuais.
Cenário de implantação de contêineres Docker em vários hosts
Ao implantar a mesma aplicação em contêineres Docker em várias instâncias ECS, a rede bridge padrão do Docker em cada host usa a sub-rede 172.17.0.0/16. Consequentemente, contêineres em hosts diferentes podem receber o mesmo endereço IP interno, como 172.17.0.2. Como o ARMS identifica as instâncias da aplicação pelo endereço IP, contêineres com o mesmo IP são mesclados em uma única instância na lista de instâncias do Application Monitoring.
Solução 1: Usar o modo de rede do host
Inicie o contêiner com --network=host para que ele use diretamente o endereço IP do host. Como cada instância ECS tem um endereço IP diferente, essa abordagem evita o conflito de endereços IP causado pela rede bridge padrão do Docker.
docker run --network=host \
-e JAVA_TOOL_OPTIONS="-javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar -Darms.licenseKey=<LicenseKey> -Darms.appName=<AppName>" \
<image>
Solução 2: Injetar o ID do agente com uma variável de ambiente
Se não for possível usar o modo de rede do host, mantenha o mesmo script de implantação em todos os hosts e utilize a variável de ambiente HOSTNAME do contêiner. Essa variável tem um valor diferente em cada host e permite definir dinamicamente o parâmetro -Darms.agentId, evitando IDs de agente duplicados sem exigir configurações específicas por host no script de implantação.
java -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar \
-Darms.licenseKey=<LicenseKey> \
-Darms.appName=<AppName> \
-Darms.agentId=$HOSTNAME \
-jar demoApp.jar