Ao usar o recurso de anexação Kubernetes APM auto-attach, você pode adicionar módulos de extensão Java para aprimorar os recursos de monitoramento de bibliotecas ou frameworks específicos não cobertos pela instrumentação de agente Java padrão.
Este guia mostra como criar uma imagem Docker personalizada com extensões Java e integrá-la com o recurso de Kubernetes APM auto-attach.
Antes de você começar
Antes de adicionar extensões Java, certifique-se de ter:
- Kubernetes APM auto-attach instalado e configurado
- Docker instalado para criar imagens personalizadas.
- Acesso a um registro de contêiner (Docker Hub, ECR, GCR, etc.)
- Permissão para enviar imagens para o registro
- Conhecimento de quais módulos de extensão Java você precisa.
Visão geral
O processo envolve três etapas principais:
- Crie uma imagem Docker personalizada com base em
newrelic/newrelic-java-init:lateste com as extensões desejadas. - Crie e envie a imagem para o seu registro de conteúdo.
- Atualize sua instrumentação do Kubernetes para usar a nova imagem.
Crie uma imagem Docker personalizada com extensões.
Crie um Dockerfile
Crie um novo Dockerfile que estenda a imagem de inicialização Java original do New Relic e adicione as extensões desejadas. Aqui está um exemplo usando a extensão de corrotinas do Kotlin:
# Start from the original New Relic Java init imageFROM newrelic/newrelic-java-init:latest
# Create the extensions directory in the rootRUN mkdir -p /extensions
# Example: Add Kotlin coroutines instrumentation# Download the latest version and extract to extensions directoryRUN VERSION=$(wget -q -O - https://api.github.com/repos/newrelic/newrelic-java-kotlin-coroutines/releases/latest | \ awk '/tag_name/{gsub(/,|"/,"",$2);print$2}') && \ wget -qO /tmp/kotlin-coroutines-instrumentation.zip \ "https://github.com/newrelic/newrelic-java-kotlin-coroutines/releases/download/$VERSION/kotlin-coroutines-instrumentation-$VERSION.zip" && \ unzip -j /tmp/kotlin-coroutines-instrumentation.zip "*.jar" -d /extensions && \ rm /tmp/kotlin-coroutines-instrumentation.zipDica
Substitua o exemplo de corrotinas Kotlin pelas extensões específicas que você precisa. Você pode encontrar as extensões disponíveis na documentação dos módulos de extensão do Java.
Crie a imagem Docker.
Crie sua imagem personalizada localmente:
$docker build -t your-registry/{Your-Image-Name}Substitua your-registry/{Your-Image-Name} pelo caminho real do registro do contêiner e pelo nome da imagem, por exemplo, mycompany/newrelic-java-init-custom.
Enviar para o registro
Envie a imagem para o seu registro de arquivos:
$docker push your-registry/{Your-Image-Name}Atualizar instrumentação do Kubernetes
Modificar o recurso de instrumentação
Atualize seu recurso personalizado (CR) de instrumentação existente para usar a nova imagem. Aqui está um exemplo instrumentation-java.yaml:
apiVersion: newrelic.com/v1beta2kind: Instrumentationmetadata: name: newrelic-instrumentation-java namespace: newrelicspec: agent: language: java image: your-registry/{Your-Image-Name}Aplique a instrumentação atualizada.
Aplique a instrumentação atualizada ao seu cluster:
$kubectl apply -f instrumentation-java.yamlReiniciar a carga de trabalho afetada
Reinicie seu aplicativo Java para que o novo contexto de inicialização com as extensões seja aplicado:
Para reiniciar uma implantação específica:
bash$# Restart a specific deployment$kubectl rollout restart deployment/my-java-deploymentPara reiniciar toda implantação em um namespace:
bash$# Or restart all deployments in a namespace$kubectl rollout restart deployments -n my-namespace
Resolução de problemas
As extensões não estão carregando.
Se as extensões não estiverem carregando:
Verifique se o diretório de extensões existe na sua imagem personalizada:
bash$docker run --rm your-registry/{Your-Image-Name} ls -la /extensionsVerifique as permissões de arquivo para garantir que os arquivos com extensão JAR sejam legíveis.
Revise os logs do contêiner init em busca de qualquer mensagem de erro durante a inicialização do agente.