Compartilhar via


Tutorial: Conectar-se a um administrador gerenciado para o Spring nos Aplicativos de Contêiner do Azure

O componente gerenciado Administrador do Spring oferece uma interface administrativa para aplicativos web do Spring Boot que expõe os pontos de extremidade de atuador. Como um componente gerenciado nos Aplicativos de Contêiner do Azure, você pode facilmente vincular seu aplicativo de contêiner ao Administrador do Spring para integração e gerenciamento contínuos.

Este tutorial mostra como criar um componente Java do Administrador do Spring e associá-lo ao seu aplicativo de contêiner para que você possa monitorar e gerenciar seus aplicativos Spring com facilidade.

Captura que mostra a visão geral do painel de insights do Administrador do Spring.

Neste tutorial, você aprenderá a:

  • Criar um componente Java do Administrador do Spring.
  • Associar seu aplicativo de contêiner ao componente Java do Administrador do Spring.

Se você quiser integrar o Administrador para Spring com o Servidor Eureka para Spring, consulte Integrar o Administrador para Spring com o Servidor Eureka para Spring em Aplicativos de Contêiner do Azure.

Importante

Este tutorial usa serviços que podem afetar sua fatura do Azure. Se você decidir seguir o passo a passo, certifique-se de excluir os recursos apresentados neste artigo para evitar cobranças inesperadas.

Pré-requisitos

Considerações

Ao executar o componente Administrador do Spring nos Aplicativos de Contêiner, lembre-se dos seguintes detalhes:

Item Explicação
Escopo Os componentes são executados no mesmo ambiente que o aplicativo de contêiner conectado.
Dimensionamento O componente não pode ser escalado. As propriedades de dimensionamento minReplicas e maxReplicas estão definidas como 1.
Recursos A alocação de recursos do contêiner para componentes é fixa. O número de núcleos de CPU é 0,5 e o tamanho da memória é 1 Gi.
Preços A cobrança do complemento é incluída na categoria de preços baseados em consumo. Os recursos consumidos por componentes gerenciados são cobrados de acordo com as tarifas de uso ativo/ocioso. Você pode excluir componentes que não estão mais em uso para interromper a cobrança.
Associação Os aplicativos de contêiner se conectam a um componente por meio de uma vinculação. As associações injetam as configurações nas variáveis de ambiente do aplicativo de contêiner. Depois que uma associação é estabelecida, o aplicativo de contêiner pode ler os valores de configuração das variáveis de ambiente e se conectar ao componente.

Instalação

Antes de começar a trabalhar com o Administrador do Spring, você precisa primeiro criar os recursos necessários.

Os comandos a seguir ajudarão você a criar seu grupo de recursos e o ambiente do seu aplicativo de contêiner.

  1. Crie variáveis para dar suporte à configuração do aplicativo. Esses valores são fornecidos para você para os fins desta lição.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-resource-group
    export ENVIRONMENT=my-environment
    export JAVA_COMPONENT_NAME=admin
    export APP_NAME=sample-admin-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"
    
    Variável Descrição
    LOCATION O local da região do Azure na qual você deve criar o aplicativo de contêiner e o componente Java.
    ENVIRONMENT O nome do ambiente do aplicativo de contêiner para seu aplicativo de demonstração.
    RESOURCE_GROUP O nome do grupo de recursos do Azure para seu aplicativo de demonstração.
    JAVA_COMPONENT_NAME O nome do componente Java criado para o seu aplicativo de contêiner. Nesse caso, você deve criar um componente Java do Administrador do Spring.
    IMAGE A imagem do contêiner usada no seu aplicativo de contêiner.
  2. Entre no Azure com a CLI do Azure.

    az login
    
  3. Crie um grupos de recursos.

    az group create \
        --name $RESOURCE_GROUP \
        --location $LOCATION \
        --query "properties.provisioningState"
    

    Quando você usa o parâmetro --query, a resposta é filtrada para uma mensagem simples de êxito ou falha.

  4. Crie o ambiente do seu aplicativo de contêiner.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    

Usar o componente

Agora que você tem um ambiente existente, pode criar seu aplicativo de contêiner e associá-lo uma instância do componente Java do componente Administrador do Spring.

  1. Crie o componente Java do Administrador do Spring.

    az containerapp env java-component admin-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 1 \
        --max-replicas 1
    
  2. Atualize o componente Administrador do Spring Java.

    az containerapp env java-component admin-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 2 \
        --max-replicas 2
    

Associe seu aplicativo contêiner ao componente Administrador do Spring Java

  1. Crie o aplicativo de contêiner e associe-o ao componente Administrador do Spring.

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --min-replicas 1 \
        --max-replicas 1 \
        --ingress external \
        --target-port 8080 \
        --bind $JAVA_COMPONENT_NAME
    

A operação de associações vincula o aplicativo de contêiner ao componente Administrador do Spring Java. O aplicativo de contêiner agora pode ler os valores de configuração das variáveis de ambiente, principalmente a propriedade SPRING_BOOT_ADMIN_CLIENT_URL e conectar-se ao Administrador do Spring.

A associação também injeta a seguinte propriedade:

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

Esta propriedade indica que o cliente do componente Administrador do Spring deve preferir o endereço IP da instância do aplicativo de contêiner ao se conectar ao servidor do Administrador do Spring.

(Opcional): desassociar seu aplicativo de contêiner do componente Java do Administrador do Spring

Para remover uma associação de um aplicativo de contêiner, use a opção --unbind .

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Exibir o painel

Importante

Para exibir o painel, você precisa ter pelo menos a função Microsoft.App/managedEnvironments/write atribuída à sua conta no recurso de ambiente gerenciado. Você pode atribuir explicitamente a função Owner ou a função Contributor no recurso. Você também pode seguir as etapas para criar uma definição de função personalizada e atribuí-la à sua conta.

  1. Criar a definição de função personalizada.

    az role definition create --role-definition '{
        "Name": "<ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    Certifique-se de substituir os espaços reservados entre os colchetes <> por seus valores.

  2. Atribua a função personalizada à sua conta no recurso de ambiente gerenciado.

    Obtenha a ID do recurso do ambiente gerenciado:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
        --query id \
        --output tsv)
    
  3. Atribua a função de à sua conta de usuário.

    Antes de executar esse comando, substitua o espaço reservado – conforme indicado pelos colchetes <> – por sua ID de entidade de serviço ou usuário ou nome de função.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Observação

    O valor <USER_OR_SERVICE_PRINCIPAL_ID> deve ser a identidade que você usa para acessar o portal do Azure. O valor <ROLE_NAME> é o nome atribuído na etapa 1.

  4. Obtenha a URL do painel do Administrador do Spring.

    az containerapp env java-component admin-for-spring show \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --query properties.ingress.fqdn \
        --output tsv
    

    Esse comando retorna a URL que você pode usar para acessar o painel do Administrador do Spring. Com o painel, você também pode ver seu aplicativo de contêiner, conforme mostrado na captura de tela a seguir.

    Captura de tela que mostra a visão geral do painel do Administrador do Spring.

Limpar os recursos

Os recursos criados neste tutorial têm um efeito na sua fatura do Azure. Se você não for usar esses serviços a longo prazo, execute o comando a seguir para remover tudo o que foi criado neste tutorial.

az group delete --resource-group $RESOURCE_GROUP

Dependência

Ao usar o componente de administrador no seu aplicativo de contêiner, você precisa adicionar a dependência a seguir ao seu arquivo pom.xml. Substitua o número de versão pela versão mais recente disponível no Repositório do Maven.

<dependency>
    <groupId>de.codecentric</groupId>
    <version>3.3.2</version>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

Propriedades configuráveis

A partir do Spring Boot 2, pontos de extremidade diferentes health e info não são expostos por padrão. Você pode expô-los adicionando a seguinte configuração no arquivo application.properties.

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

Lista de configurações permitidas para o seu Administrador do Spring

A lista a seguir detalha as propriedades do componente de administrador que você pode configurar para o seu aplicativo. Para obter mais informações, confira Spring Boot Admin.

Nome da propriedade Descrição Valor padrão
spring.boot.admin.server.enabled Habilita o Servidor do Administrador do Spring Boot. true
spring.boot.admin.context-path O prefixo de caminho em que os ativos estáticos e a API do Servidor do Administrador são fornecidos. Com relação ao Dispatcher-Servlet.
spring.boot.admin.monitor.status-interval Intervalo de tempo em milissegundos para verificar o status de instâncias. 10,000ms
spring.boot.admin.monitor.status-lifetime Tempo de vida do status em milissegundos. O status não é atualizado enquanto o último status não tiver expirado. 10.000 ms
spring.boot.admin.monitor.info-interval Intervalo de tempo em milissegundos para verificar as informações de instâncias. 1m
spring.boot.admin.monitor.info-lifetime Tempo de vida das informações em minutos. As informações não são atualizadas desde que as últimas informações não tiverem expirado. 1m
spring.boot.admin.monitor.default-timeout Tempo limite padrão ao fazer solicitações. Valores individuais para pontos de extremidade específicos podem ser substituídos usando spring.boot.admin.monitor.timeout.*. 10,000
spring.boot.admin.monitor.timeout.* Pares de chave-valor com o tempo limite por endpointId. O padrão é o valor default-timeout.
spring.boot.admin.monitor.default-retries Número padrão de repetições para solicitações com falha. Solicitações que modificam dados (PUT, POST, PATCH, DELETE) nunca são repetidas. Valores individuais para pontos de extremidade específicos podem ser substituídos usando spring.boot.admin.monitor.retries.*. 0
spring.boot.admin.monitor.retries.* Pares de chave-valor com o número de repetições por endpointId. Solicitações que modificam dados (PUT, POST, PATCH, DELETE) nunca são repetidas. O padrão é o valor default-retries.
spring.boot.admin.metadata-keys-to-sanitize Valores de metadados para as chaves correspondentes a esses padrões regex usados para purificar em todas as saídas JSON. A partir do Spring Boot 3, todos os valores do atuador são obliterados por padrão. Para obter mais informações sobre como configurar o processo de limpeza, confira (Limpeza de Valores Confidenciais). ".*password$", ".*secret$", ".*key$", ".*token$", ".*credentials.*", ".*vcap_services$"
spring.boot.admin.probed-endpoints Para aplicativos cliente do Spring Boot 1.x, o Spring Boot Admin sonda os pontos de extremidade especificados usando uma solicitação OPTIONS. Se o caminho for diferente da ID, você poderá especificar esse valor como id:path – por exemplo, health:ping. "health", "env", "metrics", "httptrace:trace", "threaddump:dump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents"
spring.boot.admin.instance-proxy.ignored-headers Cabeçalhos não encaminhados ao fazer solicitações aos clientes. "Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.title O título da página que aparece. "Spring Boot Admin"
spring.boot.admin.ui.poll-timer.cache Duração da sondagem em milissegundos para buscar novos dados de cache. 2500
spring.boot.admin.ui.poll-timer.datasource Duração da sondagem em milissegundos para buscar novos dados da fonte de dados. 2500
spring.boot.admin.ui.poll-timer.gc Duração da sondagem em milissegundos para buscar novos dados de GC. 2500
spring.boot.admin.ui.poll-timer.process Duração da sondagem em milissegundos para buscar novos dados de processo. 2500
spring.boot.admin.ui.poll-timer.memory Duração da sondagem em milissegundos para buscar novos dados de memória. 2500
spring.boot.admin.ui.poll-timer.threads Duração da sondagem em milissegundos para buscar novos dados de threads. 2500
spring.boot.admin.ui.poll-timer.logfile Duração da sondagem em milissegundos para buscar novos dados de logfile. 1000
spring.boot.admin.ui.enable-toasts Habilita ou desabilita notificações do sistema. false
spring.boot.admin.ui.title Valor do título da janela do navegador. ""
spring.boot.admin.ui.brand Código HTML renderizado no cabeçalho de navegação, o padrão sendo o rótulo de Administrador do Spring Boot. Por padrão, o logotipo do Spring Boot Admin é seguido do nome. ""
management.scheme Valor que é substituído na URL de serviço usada para acessar os pontos de extremidade de atuador.
management.address Valor que é substituído na URL de serviço usada para acessar os pontos de extremidade de atuador.
management.port Valor que é substituído na URL de serviço usada para acessar os pontos de extremidade de atuador.
management.context-path Valor acrescentado à URL de serviço usada para acessar os pontos de extremidade de atuador. ${spring.boot.admin.discovery.converter.management-context-path}
health.path Valor acrescentado à URL de serviço usada para verificação de integridade. Ignorado pelo EurekaServiceInstanceConverter. ${spring.boot.admin.discovery.converter.health-endpoint}
spring.boot.admin.discovery.enabled Habilita o suporte a DiscoveryClient para o servidor do administrador. true
spring.boot.admin.discovery.converter.management-context-path Valor acrescentado à service-url do serviço descoberto quando o valor management-url é convertido pelo DefaultServiceInstanceConverter. /actuator
spring.boot.admin.discovery.converter.health-endpoint-path Valor acrescentado à management-url do serviço descoberto quando o valor health-url é convertido pelo DefaultServiceInstanceConverter. "health"
spring.boot.admin.discovery.ignored-services Serviços que são ignorados ao usar a descoberta e não registrados como um aplicativo. Dá suporte a padrões simples, como "foo*", "*bar", "foo*bar*".
spring.boot.admin.discovery.services Serviços incluídos ao usar a descoberta e registrados como um aplicativo. Dá suporte a padrões simples, como "foo*", "*bar", "foo*bar*". "*"
spring.boot.admin.discovery.ignored-instances-metadata Os serviços serão ignorados se contiverem pelo menos um item de metadados que corresponda aos padrões incluídos nessa lista. Dá suporte a padrões como "discoverable=false".
spring.boot.admin.discovery.instances-metadata Serviços incluídos se contiverem pelo menos um item de metadados que corresponda aos padrões na lista. Dá suporte a padrões como "discoverable=true".

Configurações comuns

  • Configurações relacionadas ao registro em log:
    • logging.level.*
    • logging.group.*
    • Quaisquer outras configurações no âmbito do namespace logging.* devem ser proibidas. Por exemplo, a gravação de arquivos de log usando logging.file deve ser proibida.

Integrar o Administrador Gerenciado para Spring com o Servidor Eureka para Spring