Nesta página você aprenderá como instrumentar manualmente sua função do Lambda. É organizado por linguagem de tempo de execução. Se ainda não o fez, crie sua conta New Relic gratuita abaixo para começar a monitorar seus dados hoje mesmo.
Para instrumentar seu Lambda da linguagem Go:
Baixe nosso pacote de agente Go e coloque-o no mesmo diretório da sua função.
Instale o agente executando:
bash$go get -u github.com/newrelic/go-agent/v3/newrelicInstale a integração
nrlambda
executando:bash$go get -u github.com/newrelic/go-agent/v3/integrations/nrlambda
Em seu código Lambda, importe nossos componentes, crie um aplicativo e atualize como você inicia seu Lambda. Veja nossos exemplos de instrumentação:
Opcionalmente, adicione o evento personalizado que será associado à invocação do Lambda usando a API
RecordCustomEvent
. Por exemplo:func handler(ctx context.Context) {if txn := newrelic.FromContext(ctx); nil != txn {txn.Application().RecordCustomEvent("MyEvent", map[string]interface{}{"zip": "zap",})}fmt.Println("hello world!")}Crie e compacte sua função do Lambda e carregue-a na AWS.
Aqui estão sugestões para compactar e fazer upload do Lambda:
Construa o binário para execução no Linux. Isso produz um arquivo binário chamado
main
. Você pode usar:bash$GOOS=linux go build -o mainCompacte o binário em um pacote de implantação usando:
bash$zip deployment.zip mainFaça upload do arquivo zip para a AWS usando o console do AWS Lambda ou a AWS CLI. Nomeie o manipulador
main
(para corresponder ao nome fornecido durante a compilação binária).
As variáveis de ambiente a seguir não são necessárias para que o monitoramento do Lambda funcione, mas serão necessárias se você quiser que sua função do Lambda seja incluída no rastreamento distribuído. Para habilitar distributed tracing, defina estas variáveis de ambiente no console AWS:
NEW_RELIC_ACCOUNT_ID
. O ID da sua conta.NEW_RELIC_TRUSTED_ACCOUNT_KEY.
Este também é o ID da sua conta. Se sua conta for uma conta infantil, este é o ID da conta raiz/pai.
Opcionalmente, para configurar o registro em log, consulte Registro em log do agente Go.
Invoque o Lambda pelo menos uma vez. Isso cria um grupo log do CloudWatch, que deve estar presente para que a próxima etapa funcione.
Nosso wrapper coleta dados sobre a execução do Lambda, gera uma mensagem JSON e registra-a no log do CloudWatch. A seguir, você configurará o CloudWatch para enviar esses logs para o New Relic.
O monitoramento do AWS Lambda em Java não usa nosso agente Java APM. Em vez disso, ele usa estas duas dependências do OpenTracing:
AWS Lambda OpenTracing Java SDK: instrumentação OpenTracing para AWS Lambda RequestHandler e RequestStreamHandler.
Nosso tracer AWS Lambda OpenTracing: uma implementação tracer OpenTracing projetada para monitor o AWS Lambda. Ele gera spans, eventos de erro, eventos de transação, rastreamento de erros e fornece suporte distributed tracing .
Dica
Supported OpenTracing Versions
OpenTracing 0.31.0
:
- Tracer Lambda: com.newrelic.opentracing:newrelic-java-lambda:1.1.1
- SDK do Lambda: com.newrelic.opentracing:java-AWS Lambda:1.0.0
OpenTracing 0.32.0, 0.33.0
:
- tracer lambda: com.newrelic.opentracing:newrelic-java-lambda:2.2.3
- SDK do Lambda: com.newrelic.opentracing:java-AWS Lambda:2.1.1
Para instrumentar seu Java Lambda:
No arquivo
build.gradle
do seu projeto, inclua nosso tracer OpenTracing AWS Lambda e a dependência do AWS Lambda OpenTracing SDK:dependencies {compile("com.newrelic.opentracing:java-aws-lambda:2.1.1")compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.3")compile("io.opentracing:opentracing-util:0.33.0")}Implemente a interface
RequestHandler
do AWS Lambda conforme mostrado no exemplo do Java Lambda e substitua o métododoHandleRequest
.No método
doHandleRequest
, chame a APILambdaTracing.instrument(...)
para criar um intervalo raiz para trace a execução da função do Lambda. É aqui também que você definirá sua lógica de negócio para a função do Lambda.Registre um
LambdaTracer.INSTANCE
como o rastreador OpenTracing Global, conforme mostrado no exemplo do Java Lambda.Crie um pacote de implantação ZIP e carregue-o no AWS Lambda. Ou implantá-lo por outros meios.
No console do AWS Lambda, defina o manipulador. Para o exemplo Java Lambda, o manipulador seria
com.handler.example.MyLambdaHandler::handleRequest
. ComohandleRequest
é assumido, você também pode usarcom.handler.example.MyLambdaHandler
.As seguintes variáveis de ambiente do console AWS são necessárias se você deseja que sua função do Lambda seja incluída no distributed tracing. Isto é recomendado.
NEW_RELIC_ACCOUNT_ID
. O ID da sua conta.NEW_RELIC_PRIMARY_APPLICATION_ID
. Este também é o ID da sua conta.NEW_RELIC_TRUSTED_ACCOUNT_KEY
. Este também é o ID da sua conta. Se sua conta for infantil, esse deverá ser o ID da conta raiz/pai.
Opcional: no console do Lambda, habilite o registro de depuração adicionando esta variável de ambiente:
NEW_RELIC_DEBUG
istrue
.Invoque o Lambda pelo menos uma vez. Isso cria um grupo log do CloudWatch, que deve estar presente para que a próxima etapa funcione.
Nosso wrapper coleta dados sobre a execução do Lambda, gera uma mensagem JSON e registra-a no log do CloudWatch. A seguir, você configurará o CloudWatch para enviar esses logs para o New Relic.
Consulte o exemplo distributed tracing do AWS Lambda para ver um projeto completo que ilustra casos de uso comuns, como:
- Distributed tracing entre função do Lambda
- Criação manual de span (também conhecida como instrumentação personalizada)
- Rastreando chamadas externas
- Adicionando atributo personalizado (também conhecido como tag) aos spans
Para instrumentar seu Node.js Lambda:
Faça download do nosso pacote de agente Node.js e coloque-o no mesmo diretório da sua função, garantindo que o agente seja instalado como uma dependência no diretório
node_modules
. Use o gerenciador de pacote Node:bash$npm install newrelic --saveNo seu código Lambda, exija o módulo do agente na parte superior do arquivo e envolva a função do manipulador. Por exemplo:
const newrelic = require('newrelic');// Other module loads go under the require statement abovemodule.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {// This is your handler function codeconsole.log('Lambda executed');callback();});Opcional: você também pode adicionar eventos personalizados ao seu Lambda usando a API
recordCustomEvent
. Por exemplo:module.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {newrelic.recordCustomEvent('MyEventType', { foo: 'bar' });console.log('Lambda executed');callback();});Compacte sua função do Lambda e a pasta do agente Node.js. Requisitos e recomendações:
- Os arquivos New Relic fora da pasta do agente New Relic não precisam ser incluídos.
- Se o nome do arquivo da função do Lambda for, por exemplo,
lambda_function.node
, recomendamos nomear seu arquivo ziplambda_function.zip
. Não use um tarball. - Seu Lambda e seus módulos associados devem estar todos no diretório raiz do arquivo zip. Isso significa que se você compactar uma pasta que contém os arquivos, não funcionará.
Carregue o arquivo compactado em sua conta do AWS Lambda.
No console AWS, defina estas variáveis de ambiente:
NEW_RELIC_NO_CONFIG_FILE
. Defina comotrue
se não estiver usando um arquivo de configuração.NEW_RELIC_APP_NAME
: o nome do seu aplicativo.NEW_RELIC_ACCOUNT_ID
. O ID da sua conta.NEW_RELIC_TRUSTED_ACCOUNT_KEY
. Este também é o ID da sua conta. Se sua conta for infantil, esse precisa ser o ID da conta raiz/pai.
Opcional: para executar o agente no modo serverless fora da AWS em um ambiente local, defina a variável de ambiente
NEW_RELIC_SERVERLESS_MODE_ENABLED
comotrue
. (Ao executar isso em um ambiente AWS Lambda, o agente será executado automaticamente no modo serverless. Do not use this variable if you're running in AWS.)Opcional: para ativar a criação de log no modo serverless, configure estas variáveis de ambiente:
- Defina
NEW_RELIC_LOG_ENABLED
comotrue
. - Defina
NEW_RELIC_LOG
comostdout
para saída para o CloudWatch ou defina como qualquer local de arquivo gravável. NEW_RELIC_LOG_LEVEL
é definido comoinfo
por padrão e é usado apenas ao enviar o log da função no Lambda. Veja outro nível de log.
- Defina
Opcional: se sua função do Lambda estiver usando Módulos ES, defina a variável de ambiente
NEW_RELIC_USE_ESM
comotrue
. Observe que se estiver usando módulos ES, você deve usar async/await ou promessas para sua função. Funções baseadas em retorno de chamada não são suportadas.Invoque o Lambda pelo menos uma vez. Isso cria um grupo log do CloudWatch, que deve estar presente para que a próxima etapa funcione.
Nosso wrapper coleta dados sobre a execução do Lambda, gera uma mensagem JSON e registra-a no log do CloudWatch. Em seguida, você configurará o CloudWatch para enviar esses logs para o New Relic.
Leia mais sobre como enviar log de funções com Lambda.
Para instrumentar seu Python Lambda:
Baixe nosso pacote de agente Python e coloque-o no mesmo diretório da sua função. Para fazer isso, use pip:
bash$pip install -t . newrelicImportante
Se você usa o Homebrew, poderá receber este erro:
DistutilsOptionError: must supply either home or prefix/exec-prefix -- not both
. Para obter detalhes, consulte a postagem do Homebrew GitHub.Em seu código Lambda, importe o módulo do agente Python e decore a função do manipulador usando o decorador New Relic. The New Relic package must be imported first in your code. Aqui está um exemplo:
import newrelic.agentnewrelic.agent.initialize()@newrelic.agent.lambda_handler()def handler(event, context):...Opcional: você também pode adicionar eventos personalizados ao seu Lambda usando a API
record_custom_event
. Aqui está um exemplo:@newrelic.agent.lambda_handler()def handler(event, context):newrelic.agent.record_custom_event('CustomEvent', {'foo': 'bar'})...Compacte suas pastas
lambda_function.py
enewrelic/
usando estas diretrizes:- Os arquivos New Relic fora da pasta
newrelic/
não precisam ser incluídos. - Se o nome do arquivo da função do Lambda for, por exemplo,
lambda_function.py
, nomeie seu arquivo ziplambda_function.zip
. Não use um tarball. - Seu Lambda e seus módulos associados devem estar todos no diretório raiz do arquivo zip. Isso significa que se você compactar uma pasta que contém os arquivos, não funcionará.
- Os arquivos New Relic fora da pasta
Carregue o arquivo compactado em sua conta do AWS Lambda.
No console AWS, defina esta variável de ambiente:
NEW_RELIC_SERVERLESS_MODE_ENABLED
. Definido comotrue
As variáveis de ambiente a seguir não são necessárias para que o monitoramento do Lambda funcione, mas serão necessárias se você quiser que sua função do Lambda seja incluída no rastreamento distribuído. Para habilitar distributed tracing, defina estas variáveis de ambiente no console AWS:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED
. Defina como verdadeiro.NEW_RELIC_ACCOUNT_ID
. O ID da sua conta.NEW_RELIC_TRUSTED_ACCOUNT_KEY
. Este também é o ID da sua conta. Se sua conta for infantil, esse precisa ser o ID da conta raiz/pai.
Opcional: para configurar o registro em log, use as variáveis de ambiente
NEW_RELIC_LOG
eNEW_RELIC_LOG_LEVEL
no Console AWS.Invoque o Lambda pelo menos uma vez. Isso cria um grupo log do CloudWatch, que deve estar presente para que a próxima etapa funcione.
O decorador New Relic coleta dados sobre a execução do Lambda, gera uma mensagem JSON e registra-a no log do CloudWatch. Em seguida, configure o CloudWatch para enviar esses logs para o New Relic.
Existem duas maneiras de instrumentar sua função Ruby Lambda: automaticamente ou manualmente.
Instrumentação automática:
Baixe e instale nossa ferramenta Lambda CLI, newrelic-lambda-cli.
Use a ferramenta para emitir um comando
newrelic-lambda integrations install
. Consulte as instruções de uso para obter mais informações.Instrumentação manual:
Navegue até a seção de serviço Lambda no console web da AWS. A partir daí, encontre a função do Lambda que você gostaria de conectar ao New Relic.
Na guia Code padrão, role para baixo até a seção Layers e clique no botão Add a layer .
Clique no botão Create layer .
Agora vá para Choose a layer e selecione a opção Specify an ARN .
Vá para a New Relic's list of layers e use a lista suspensa para selecionar a região AWS onde sua função do Lambda está hospedada. A partir daí, localize o ARN que corresponde à versão e arquitetura Ruby da sua Função do Lambda. Deve haver duas opções: X86 e ARM64. Use o botão Copy to clipboard ou copie manualmente a string ARN.
Na seção Specify an ARN do formulário do console AWS, cole o ARN da camada New Relic Lambda.
No formulário do console AWS , clique no botão Add para adicionar a camada à sua função do Lambda.
Na página da sua Função do Lambda, com a guia Code padrão selecionada, role para baixo até a seção Runtime settings e clique no botão Edit .
Faça uma cópia segura do valor existente do Handler . Você precisará dele em uma etapa posterior.
Altere o valor do Handler para:
newrelic_lambda_wrapper.handler
e clique em Save.Mude para a aba Configuration na página da sua função do Lambda.
Selecione a subguia Environment variables .
Defina as seguintes variáveis de ambiente:
NEW_RELIC_ACCOUNT_ID
Defina o ID da sua contaNew RelicNEW_RELIC_LAMBDA_HANDLER
Defina o valor do manipulador original da sua função copiado na etapa 8 anteriorNEW_RELIC_LICENSE_KEY
Defina sua chave de licença do New RelicNEW_RELIC_LOG_ENDPOINT
Defina como 'https://log-api.newrelic.com/log/v1'NEW_RELIC_TELEMETRY_ENDPOINT
Defina como 'https://cloud-collector.newrelic.com/aws/lambda/v1'
Se você deseja enviar o log da sua função do Lambda para New Relic, que incluirá tudo o que sua função grava em STDOUT, certifique-se de definir a variável de ambiente
NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS
como 'true'.Dica
A camada New Relic entregará automaticamente o agente New Relic Ruby e será carregada por meio de um Ruby
require
antes da invocação da sua função do Lambda. Para evitar conflitos, não inclua uma cópia do agente Ruby em nenhum outro lugar. Sinta-se à vontade para realizar qualquer chamada de API do agente New Relic Ruby desejada em sua função para aproveitar a presença do agente.