Você pode enviar dados de monitoramento do New Relic Lambda de algumas maneiras diferentes, dependendo de suas necessidades. A opção que fornece o desempenho mais forte da sua função e a proteção contra falhas mais forte inclui a configuração do CloudWatch como substituto. Isso significa que você enviará telemetria para a New Relic através da extensão e, caso haja algum problema com a extensão, New Relic ainda receberá carga através do CloudWatch.
Benefícios do CloudWatch fallback:
Execução independente: captura todos os logs do CloudWatch independentemente da execução da sua função. É muito improvável que interfira na operação normal da sua função ou afete a duração da invocação da sua função.
Funciona com redes seguras: útil para funções em uma VPC que não pode ter tráfego de saída para New Relic.
Embora essa opção de envio ofereça a proteção mais forte contra falhas, é importante observar que o serviço AWS CloudWatch pode gerar muitos dados. Lembre-se da ingestão de dados ao pensar nos custos e no plano de preços da New Relic que você escolher.
Como funciona o CloudWatch fallback
Se a extensão não for inicializada, também conhecida como modo noop, ou travar, ela não conseguirá codificar a linha NR_LAMBDA_MONITORING gerada por nosso agente. A linha NR_LAMBDA_MONITORING aparecerá no log do CloudWatch. Se a função newrelic-log-ingestion estiver instalada na mesma região que sua função, configurada para enviar carga e for acionada pelo grupo log do CloudWatch da sua função, ela poderá atuar como um substituto para a extensão para enviar carga.
Antes de você começar
Antes de configurar uma opção substituta, você precisará concluir o seguinte:
Instale a função newrelic-log-ingestion na região AWS de onde você deseja enviar o log.
Se estiver enviando log, crie um padrão de filtro igual a nulo ou crie um padrão personalizado para corresponder ao log de função que você deseja enviar. New Relic receberá o log do CloudWatch para sua função. Para evitar logs duplicados, a extensão precisa ter o envio log desabilitado. O envio log da extensão está desabilitado por padrão.
Aqui estão algumas práticas recomendadas antes de atualizar sua camada New Relic Lambda:
Antes de atualizar para uma versão de camada mais recente, lembre-se de que a camada mais recente pode introduzir alterações que quebrem a extensão ou uma dependência de terceiros.
Fixe uma versão de camada que funcione bem para sua função e atualize apenas para uma versão de camada mais recente conforme necessário para resolver bugs, obter novos recursos e patches de segurança ou porque um agente possui EOL.
Revise cuidadosamente todas as alterações e notas de lançamento e teste em um ambiente de desenvolvimento ou preparação antes de implantar uma nova camada em produção.
Opções de implementação
Existem três maneiras de implementar um substituto do CloudWatch:
Habilitar a extensão para carga de telemetria e ship log via CloudWatch: Neste cenário, a carga de telemetria é enviada pela extensão e log pelo CloudWatch, e caso a extensão falhe, a carga também.
Ramal habilitado para carga e log de telemetria: Neste cenário, carga e log de telemetria são enviados através do ramal.
Extensão desabilitada: Neste cenário, o CloudWatch é sempre utilizado para enviar log e carga.
Se você não estiver enviando log para o CloudWatch, esta opção é a maneira menos dispendiosa e mais robusta de garantir que a carga instrumentada sempre chegue ao New Relic. Se você estiver enviando log, esta opção apresentará alguns custos do CloudWatch para envio log . Consulte Ingestão de dados: cobrança e regras para obter mais informações sobre preços.
Depois de adicionar uma camada New Relic Lambda, a extensão é habilitada e tem o envio de log desabilitado por padrão.
O parâmetro enableIntegration só deve ser incluído se sua função estiver sendo implantada em uma conta AWS que ainda não tenha uma integração. Depois que a integração estiver configurada, esta opção deverá ser removida do serverless.yml usado para implantar sua função.
newrelic-lambda layers install--function<name or arn> --nr-account-id <YOUR_NEW_RELIC_ACCOUNT_ID>
$
newrelic-lambda subscriptions install--function<name or arn> --filter-pattern ""
Esta opção fornece o caminho de menor custo que garante que a carga instrumentada sempre chegue à New Relic. Esta opção envia o log de funções por meio da extensão New Relic Lambda, portanto, se a extensão falhar ao inicializar ou travar, o log de funções estará ausente do New Relic.
Se você estiver enviando log de função, certifique-se de que a extensão esteja configurada para isso. Esses logs serão enviados apenas pela extensão e não haverá fallback do CloudWatch para log para evitar duplicatas.
Depois de adicionar uma camada New Relic Lambda, a extensão é habilitada e tem o envio de log desabilitado por padrão. Se quiser ver o log de funções no New Relic, você precisará usar variáveis de ambiente para permitir que a extensão envie o log de funções.
É importante observar que os logs de funções são apenas isso, logs que são registrados pela função durante sua invocação. A extensão não enviará log da plataforma Lambda como START e END.
NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS: true 2 Defina as variáveis de ambiente da função newrelic-log-ingestion :
INFRA_ENABLED: true
LOGGING_ENABLED: false (desative o encaminhamento de logs para evitar duplicatas ou defina o padrão de filtro de assinatura do CloudWatch para corresponder apenas a NR_LAMBDA_MONITORING linhas)
O parâmetro enableIntegration só deve ser incluído se sua função estiver sendo implantada em uma conta AWS que ainda não tenha uma integração. Depois que a integração estiver configurada, esta opção deverá ser removida do serverless.yml usado para implantar sua função.
newrelic-lambda layers install--function<name or arn> --nr-account-id <YOUR_NEW_RELIC_ACCOUNT_ID>
$
newrelic-lambda subscriptions install--function<name or arn> --filter-pattern "NR_LAMBDA_MONITORING"
Esta opção depende totalmente do CloudWatch e de nossa função newrelic-log-ingestion para enviar log e carga para o New Relic. Esta opção desativa a extensão para evitar possíveis períodos de inatividade causados por falhas na extensão.
Para este método, a extensão New Relic Lambda precisa ser completamente desativada para não impedir que a linha NR_LAMBDA_MONITORING seja gravada no CloudWatch. Com a extensão New Relic Lambda desativada, toda a telemetria sairá por meio do CloudWatch, do filtro de assinatura e da função newrelic-log-ingestion .
Depois de adicionar uma camada New Relic Lambda, a extensão é habilitada e tem o envio de log desabilitado por padrão. Você precisará desabilitar a extensão com uma variável de ambiente.
O parâmetro enableIntegration só deve ser incluído se sua função estiver sendo implantada em uma conta AWS que ainda não tenha uma integração. Depois que a integração estiver configurada, esta opção deverá ser removida do serverless.yml usado para implantar sua função.
newrelic-lambda layers install--function<name or arn> --nr-account-id <YOUR_NEW_RELIC_ACCOUNT_ID> --disable-extension
$
newrelic-lambda subscriptions install--function<name or arn> --filter-pattern ""
Você também pode optar manualmente por enviar dados apenas para o CloudWatch. Para fazer isso:
Desative a extensão adicionando a variável de ambiente NEW_RELIC_LAMBDA_EXTENSION_ENABLED à sua função, com o valor false.
Crie um filtro de assinatura de log do CloudWatch para invocar a função newrelic-log-ingestion com o log da sua função.
A CLI pode fazer isso por você: newrelic-lambda subscriptions install --function FUNCTION_NAME
Como alternativa, use o console AWS para criar um filtro de assinatura do grupo log do CloudWatch da sua função para invocar a newrelic-log-ingestion função do Lambda.
Ou você pode seguir estas etapas para transmitir o log do CloudWatch para New Relic Lambda:
Abra o CloudWatch e selecione Logs no menu à esquerda e, em seguida, selecione o grupo log da função que você está monitorando.
Em Lambda function, selecione a função newrelic-log-ingestion .
Defina Log format como JSON.
Defina o Subscription filter pattern to?REPORT ?NR_LAMBDA_MONITORING ?"Task timed out" ?RequestId. Alternativamente, se você estiver usando a variável de ambiente LOGGING_ENABLEDpara transmitir todo o seu log para o nosso log, deixe este campo em branco.
Importante
Certifique-se de que a newrelic-log-ingestion função do Lambda selecionada no método acima esteja na mesma região da AWS que sua função do Lambda.