Partilhar via


Tutorial: Conectar-se a um administrador gerenciado para o Spring em aplicativos de contêiner do Azure

O componente gerenciado Admin for Spring oferece uma interface administrativa para aplicativos Web Spring Boot que expõem pontos de extremidade atuadores. Como um componente gerenciado nos Aplicativos de Contêiner do Azure, você pode vincular facilmente seu aplicativo de contêiner ao Admin for Spring para integração e gerenciamento perfeitos.

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

Captura de tela que mostra uma visão geral do painel Admin for Spring insights.

Neste tutorial, irá aprender a:

  • Crie um componente Admin para Spring Java.
  • Associe seu aplicativo de contêiner a um componente Admin for Spring Java.

Se você quiser integrar o Admin for Spring com o Eureka Server for Spring, consulte Integrar o Admin for Spring com o Eureka Server for Spring em aplicativos de contêiner.

Importante

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

Pré-requisitos

Considerações

Ao executar o componente Admin for Spring em Aplicativos de Contêiner, esteja ciente dos seguintes detalhes:

Item Explicação
Âmbito Os componentes são executados no mesmo ambiente que o aplicativo de contêiner conectado.
Dimensionamento O componente não pode ser dimensionado. As propriedades minReplicas de dimensionamento e maxReplicas estão ambas definidas como 1.
Recursos A alocação de recursos de contêiner para componentes é fixa. O número de núcleos da CPU é 0.5 e o tamanho da memória é 1 Gi.
Preços A faturação dos componentes enquadra-se nos preços baseados no consumo. Os recursos consumidos pelos componentes gerenciados são cobrados pelas taxas ativas/ociosas. Você pode excluir componentes que não estão mais em uso para interromper a cobrança.
Enlace Os aplicativos de contêiner se conectam a um componente por meio de uma ligação. As associações injetam configurações em variáveis de ambiente do aplicativo de contêiner. Depois que uma associação é estabelecida, o aplicativo contêiner pode ler os valores de configuração das variáveis de ambiente e se conectar ao componente.

Configurar

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

Os comandos a seguir ajudam você a criar seu grupo de recursos e ambiente de 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 Description
    LOCATION O local da região do Azure onde você cria seu 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 seu aplicativo de contêiner. Nesse caso, você cria um componente Admin para Spring Java.
    IMAGE A imagem de contêiner usada em seu aplicativo de contêiner.
  2. Entre no Azure com a CLI do Azure.

    az login
    
  3. Crie um grupo de recursos.

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

    Quando você usa o --query parâmetro, a resposta filtra até uma simples mensagem de sucesso ou falha.

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

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

Use o componente

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

  1. Crie o componente Admin for Spring Java.

    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 Admin for 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
    

Vincular seu aplicativo de contêiner ao componente Admin for Spring Java

  1. Crie o aplicativo de contêiner e associe-o ao componente Admin for 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 bind vincula o aplicativo contêiner ao componente Admin for Spring Java. O aplicativo contêiner agora pode ler os valores de configuração de variáveis de ambiente, principalmente a SPRING_BOOT_ADMIN_CLIENT_URL propriedade, e conectar-se ao componente Admin for Spring.

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

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

Essa propriedade indica que o cliente do componente Admin for Spring deve preferir o endereço IP da instância do aplicativo contêiner quando você se conectar ao servidor Admin for Spring.

Opcional: Desvincule seu aplicativo contêiner do componente Admin for Spring Java

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

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

Ver o dashboard

Importante

Para exibir o painel, você precisa ter pelo menos a Microsoft.App/managedEnvironments/write função atribuída à sua conta no recurso de ambiente gerenciado. Você pode atribuir explicitamente a Owner função ou 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. Crie 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 <> colchetes pelos 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 à sua conta.

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

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

    Nota

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

  4. Obtenha o URL do painel Admin for 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
    

    Este comando retorna a URL que você pode usar para acessar o painel Admin for 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 Admin for Spring.

Clean up resources (Limpar recursos)

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

az group delete --resource-group $RESOURCE_GROUP

Dependency

Ao usar o componente admin em seu próprio aplicativo de contêiner, você precisa adicionar a seguinte dependência em seu arquivo pom.xml . Substitua o número da versão pela versão mais recente disponível no repositório 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, os pontos de extremidade diferentes health info e 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ção permitida para o seu Admin for Spring

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

Property name Description Default value
spring.boot.admin.server.enabled Habilita o Spring Boot Admin Server. true
spring.boot.admin.context-path O prefixo de caminho onde os ativos estáticos e a API do Admin Server são servidos. Em relação ao Dispatcher-Servlet.
spring.boot.admin.monitor.status-interval Intervalo de tempo em milissegundos para verificar o status das 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 das 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 enquanto as últimas informações não expirarem. 1m
spring.boot.admin.monitor.default-timeout Tempo limite padrão ao fazer solicitações. Os 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.* Emparelhamento chave-valor com o tempo limite por endpointId. O valor é default-timeout padronizado.
spring.boot.admin.monitor.default-retries Número padrão de novas tentativas para solicitações com falha. As solicitações que modificam dados (PUT, POST, PATCH, DELETE) nunca são repetidas. Os valores individuais para pontos de extremidade específicos podem ser substituídos usando spring.boot.admin.monitor.retries.*. 0
spring.boot.admin.monitor.retries.* Emparelhamento chave-valor com o número de novas tentativas por endpointId. As solicitações que modificam dados (PUT, POST, PATCH, DELETE) nunca são repetidas. O valor é default-retries padronizado.
spring.boot.admin.metadata-keys-to-sanitize Valores de metadados para as chaves que correspondem a esses padrões de regex usados para limpar em todas as saídas JSON. A partir do Spring Boot 3, todos os valores do atuador são mascarados por padrão. Para obter mais informações sobre como configurar o processo de desincanização, consulte Limpar 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 investiga os pontos de extremidade especificados usando uma OPTIONS solicitação. Se o caminho for diferente do 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 que não devem ser encaminhados ao fazer solicitações a clientes. "Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.title O título da página exibida. "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 obter novos dados gc. 2500
spring.boot.admin.ui.poll-timer.process Duração da sondagem em milissegundos para obter novos dados de processo. 2500
spring.boot.admin.ui.poll-timer.memory Duração da sondagem em milissegundos para obter 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 obter novos dados do arquivo de log. 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 e padrão para o rótulo Spring Boot Admin. Por padrão, o logotipo do Spring Boot Admin é seguido por seu nome. ""
management.scheme Valor que é substituído na URL de serviço usada para acessar os pontos de extremidade do atuador.
management.address Valor que é substituído na URL de serviço usada para acessar os pontos de extremidade do atuador.
management.port Valor que é substituído na URL de serviço usada para acessar os pontos de extremidade do atuador.
management.context-path Valor que é anexado à URL de serviço usada para acessar os pontos de extremidade do atuador. ${spring.boot.admin.discovery.converter.management-context-path}
health.path Valor que é anexado à URL de serviço usada para verificação de integridade. Ignorado EurekaServiceInstanceConverterpelo . ${spring.boot.admin.discovery.converter.health-endpoint}
spring.boot.admin.discovery.enabled Habilita o DiscoveryClient suporte para o servidor de administração. true
spring.boot.admin.discovery.converter.management-context-path Valor que é anexado service-url ao do serviço descoberto quando o management-url valor é convertido pelo DefaultServiceInstanceConverter. /actuator
spring.boot.admin.discovery.converter.health-endpoint-path Valor que é anexado management-url ao do serviço descoberto quando o health-url valor é 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 aplicativo. Suporta padrões simples, como "foo*", "*bar"e "foo*bar*".
spring.boot.admin.discovery.services Serviços incluídos ao usar a descoberta e registrados como aplicativo. Suporta padrões simples, como "foo*", "*bar"e "foo*bar*". "*"
spring.boot.admin.discovery.ignored-instances-metadata Serviços ignorados se contiverem pelo menos um item de metadados que corresponda aos padrões nesta lista. Suporta 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. Suporta padrões como "discoverable=true".

Configurações comuns

  • Configurações relacionadas ao registro:
    • logging.level.*
    • logging.group.*
    • Quaisquer outras configurações em logging.* namespace devem ser proibidas. Por exemplo, escrever arquivos de log usando logging.file deve ser proibido.

Integre o Admin gerenciado para o Spring com o Eureka Server for Spring