Você pode obter visibilidade da sua função Java do Lambda para entender o que está acontecendo em seus aplicativos serverless.
Você pode usar a variação de camada slim do agente Java para obter visibilidade das suas funções do Lambda em Java.
Agente Java New Relic
O agente Java da New Relic suporta instrumentar a função do AWS Lambda por meio de um modo serverless dedicado. Ao ser executado dentro de uma função do Lambda, o agente detecta automaticamente o ambiente e alterna para este modo, que é otimizado para a natureza de curta duração e orientada a eventos das invocações do Lambda.
Importante
O modo serverless do agente Java requer Java 17 ou posterior. Runtimes do Java 11 e anteriores não são suportados devido a tempos de inicialização inicial mais longos.
Como funciona
No modo sem servidor, o agente substitui sua coleta periódica padrão e o transporte HTTP por um modelo por invocação:
- Quando uma função do Lambda é invocada, o agente intercepta o handler antes que seu código seja executado.
- Uma transação é criada automaticamente para a invocação, capturando contexto como o ARN do Lambda, o ID de requisição e se é um cold start.
- Se a carga do evento for reconhecida (por exemplo, um evento do API Gateway ou SQS), o agente extrai os metadados da origem do evento, classifica a transação como uma transação da web ou transação fora da web e adiciona atributos relevantes.
- Quando a transação termina, o agente coleta toda a telemetria em buffer e a grava como uma carga compactada e codificada em base64 em
/tmp/newrelic-telemetrye como JSON simples no stdout. - A extensão do Lambda da New Relic (empacotada na camada) lê o arquivo de telemetria e encaminha os dados para a New Relic após cada invocação.
Camadas Lambda
Duas variantes da camada do Lambda são publicadas para o agente Java:
- Camada completa do agente: todos os módulos de instrumentação estão habilitados. Fornece visibilidade máxima pronta para uso, mas gera maior sobrecarga de inicialização a frio devido ao conjunto completo de instrumentação automática.
- Camada Slim (recomendada): desativa toda a instrumentação automática exceto os módulos
aws-lambda-java-core. Isso significa que os handlers Java Lambda que implementamRequestHandlerouRequestStreamHandlersão automaticamente instrumentados e começam a emitir telemetria pronta para uso, enquanto outra instrumentação (chamadas do AWS SDK, clientes HTTP, etc.) é desabilitada, a menos que você a habilite explicitamente. Este é o ponto de partida recomendado para a maioria dos clientes.
ARNs de camada
Os seguintes ARNs são para a região us-east-1. Substitua us-east-1 pela sua região da AWS. A versão da camada começa em 1 e aumenta a cada novo lançamento. Para as versões mais recentes disponíveis, consulte a lista de camadas da New Relic.
Variante de camada | Arquitetura | ARN |
|---|---|---|
Slim (recomendado) | x86_64 |
|
Slim (recomendado) | ARM64 |
|
Completo | x86_64 |
|
Completo | ARM64 |
|
Para instruções de instalação, consulte Instrumentação em camadas.
Ao usar qualquer uma das camadas, defina o manipulador da sua função do Lambda para um dos seguintes valores de wrapper para que o agente possa interceptar a invocação:
RequestHandlerimplementação:com.newrelic.java.HandlerWrapper::handleRequestRequestStreamHandlerimplementação:com.newrelic.java.HandlerWrapper::handleStreamsRequest
Detecção automática
O agente habilita automaticamente o modo serverless quando a variável de ambiente AWS_LAMBDA_FUNCTION_NAME está presente. Nenhuma configuração explícita é necessária ao usar a camada Lambda. O modo Serverless está sempre ativado e não pode ser sobrescrito.
Configuração
As seguintes variáveis de ambiente estão pré-configuradas na camada Lambda:
Variável de ambiente | Padrão da camada | Descrição |
|---|---|---|
|
| Habilita o modo serverless. Definido como
pela camada se ainda não estiver definido. |
|
| Por padrão, isso define o caminho do arquivo de log do agente Java para
|
|
| Nome padrão do aplicativo usado pelo agente. Definido pela camada se ainda não estiver definido. Este valor não é usado na interface do New Relic para funções do Lambda. |
|
| Desabilita o encaminhamento de logs no agente. Definido pela camada se ainda não estiver definido. Em vez disso, os logs são capturados via CloudWatch ou pela extensão Lambda. |
|
| Sempre definido como
pela camada. Evita que o agente sobrescreva o nome do aplicativo com base nos dados da transação. |
As seguintes variáveis de ambiente são obrigatórias e devem ser definidas por você:
Variável de ambiente | Valor obrigatório | Descrição |
|---|---|---|
|
| Aponta o AWS Lambda para o wrapper do agente Java New Relic. Isso deve sempre ser definido como
ao usar a camada do agente Java. |
| Sua chave de licença New Relic | Sua chave de licença de ingestão da New Relic, usada para autenticar telemetria enviada para a New Relic. |
| ID da sua conta New Relic | Exigido pela extensão New Relic Lambda para distributed tracing. Defina isso como o ID da sua conta pai New Relic ou ID da conta se não houver uma conta pai. |
Importante
Por padrão, a extensão Lambda ou o CloudWatch captura seus logs. O agente não encaminha logs diretamente.
Cold starts
O agente rastreia cold starts usando um sinalizador estático que é definido na primeira invocação. Em invocações cold start, o atributo aws.lambda.coldStart=true é adicionado à transação. Este atributo é omitido em invocações quentes. Não está definido para false.
Importante
Tempo de Cold start: adicionar o agente Java aumenta o tempo de cold start em aproximadamente 4.000–6.200 ms comparado a uma função sem o agente. Isso afeta apenas a primeira invocação. As invocações quentes não são afetadas. A camada slim reduz isso ao carregar menos módulos de monitoramento na inicialização.
Para melhorar o desempenho de cold start, aumente o limite de timeout e a alocação de memória e use simultaneidade provisionada.
Telemetria coletada
No modo serverless, o agente Java coleta e armazena em buffer os seguintes tipos de telemetria durante a invocação:
- Rastreamento da transação
- Eventos de erro e erros rastreados (com stack traces)
- Eventos de span (para distributed tracing)
- Eventos (analíticos) de transação
- Evento personalizado
- Eventos de log (via CloudWatch por padrão)
- Métricas de desempenho
Todos os dados coletados são gravados como uma única carga NR_LAMBDA_MONITORING e encaminhados para o New Relic após a conclusão da invocação.
Limitações
- Somente Java 17+. Java 11 e anteriores não são suportados.
- O profiling de thread não está disponível no modo serverless.
- O monitoramento do JFR (Java Flight Recorder) está desativado no modo serverless.
- O coletor JAR (varredura de módulo) está desabilitado no modo serverless.