A instrumentação baseada em SDK exige que você habilite o agente New Relic como um SDK para o tempo de execução escolhido. Além disso, você deve configurar a extensão New Relic ou o lambda newrelic-log-ingestion
para enviar dados ao New Relic.
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).
Para habilitar distributed tracing e configurar variáveis de ambiente, consulte a documentação das variáveis de ambiente .
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
.Para habilitar distributed tracing e configurar variáveis de ambiente, consulte a documentação das variáveis de ambiente .
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.
Para habilitar distributed tracing e configurar variáveis de ambiente, consulte a documentação das variáveis de ambiente .
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.
Para habilitar distributed tracing e configurar variáveis de ambiente, consulte a documentação das variáveis de ambiente .
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.
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.
- Para habilitar distributed tracing e configurar variáveis de ambiente, consulte a documentação das variáveis de ambiente .
- Publique o projeto em sua conta do AWS Lambda.
- Configure a extensão New Relic Lambda ou o lambda
newrelic-log-ingestion
. - Invoque o Lambda pelo menos uma vez para verificar se há erros e garantir que os dados estejam visíveis na interface New Relic .