Se você estiver usando uma função do Lambda sem camada, você precisará instrumentar New Relic com base no tempo de execução escolhido. Selecione seu tempo de execução abaixo e siga as instruções de configuração.
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 no topo do arquivo e envolva a função do manipulador com o newrelic
setLambdaHandler
. Por exemplo:- Código de exemplo para CommonJS:
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();});- Código de exemplo para ES Module:
import newrelic from 'newrelic';// Other module loads go under the require statement aboveexport const 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:- Código de exemplo para CommonJS:
module.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {newrelic.recordCustomEvent('MyEventType', { foo: 'bar' });console.log('Lambda executed');callback();});- Código de exemplo para o ES Module:
export const lambdaHandler = 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 sem servidor fora da AWS em um ambiente local, configure 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 sem servidor. Não use essa variável se estiver executando na 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.Para concluir a instrumentação, siga uma das seguintes etapas para enviar os dados de telemetria para o New Relic:
- Use o Lambda New Relic
Extension layer
. Você pode obter a camada mais recente (NewRelicLambdaExtension) arn. Você pode usar a AWS CLI para instalar a camada ou adicioná-la manualmente ao seu Lambda.
bash$aws lambda update-function-configuration --function-name <your-lambda-function-name> --layers arn:aws:lambda:<aws-region>:451483290750:layer:NewRelicLambdaExtension:<version>- Use o Lambda New Relic
- Use o
newrelic-log-ingestion
. Você pode consultar o fallback do CloudWatch para obter etapas detalhadas.
Para instrumentar seu Python Lambda:
Baixe os pacotes do agente Python e do wrapper lambda do Python e coloque-os no mesmo diretório do código de função. Para fazer isso, use pip:
bash$pip install -t . newrelic newrelic-lambdaImportante
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.No seu código Lambda, importe o módulo do agente Python e o módulo wrapper lambda do Python.
Decore a função do manipulador usando o decorador New Relic. O pacote New Relic deve ser importado primeiro em seu código. Aqui está um exemplo:
import newrelic.agentfrom newrelic_lambda.lambda_handler import lambda_handlernewrelic.agent.initialize()@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:@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.
New Relic não possui um método de instrumentação Ruby sem camadas. Se você estiver usando camadas, consulte nosso instrumento seu documento Função do Lambda não-containerizado .
Na maioria dos casos, o agente .NET irá instrumentar automaticamente sua função AWS do Lambda e mudar para um "modo serverless" que desabilitará o envio de dados diretamente para o New Relic bem como algum outro recurso. Você deve usar a extensão Lambda da New Relic ou o método lambda newrelic-log-ingestion
para enviar dados para a New Relic.
Para instrumentar seu .NET Lambda:
- Adicione o pacote nuget NewRelic.Agente ao seu projeto AWS Lambda . Para obter mais informações, consulte nosso guia de instalação.
- Adicione as variáveis de ambiente necessárias ao seu projeto.
NEW_RELIC_LICENSE_KEY
não é obrigatório porque o agente não tentará entrar em contato ou enviar dados diretamente para a New Relic. - Defina as variáveis de ambiente opcionais:
NEW_RELIC_APP_NAME
- Publique o projeto em sua conta do AWS Lambda.
- Configure a extensão New Relic Lambda ou o lambda
newrelic-log-ingestion
. - Opcional: para configurar o registro em log, use as variáveis de ambiente
NEWRELIC_LOG_CONSOLE
eNEWRELIC_LOG_LEVEL
no Console AWS. - Invoque o Lambda pelo menos uma vez para verificar se há erros e garantir que os dados estejam visíveis na interface New Relic .