Elven Serverless Plugin
O Elven Serverless Plugin facilita a instrumentação automática das suas funções AWS Lambda no Serverless Framework, adicionando a Layer de observabilidade, configurando as variáveis de ambiente e preparando suas funções para envio de traces, logs e métricas para o seu stack LGTM.
Pré-requisitos
Node.js 14.x ou superior
Serverless Framework instalado (
npm install -g serverless
)Conta AWS configurada
Acesso ao painel Elven Observability
Instalação
Adicione o plugin no seu projeto:
# com Yarn
yarn add elven-serverless-plugin
# com NPM
npm install elven-serverless-plugin
Configuração no Serverless Framework
No seu arquivo serverless.yml
(ou .ts
, .js
), adicione o plugin na lista:
plugins:
- elven-serverless-plugin
Caso já utilize outros plugins, apenas insira o elven-serverless-plugin
junto deles.
Em seguida, configure o plugin na seção custom
:
custom:
elvenPlugin:
tenant: "${env:TENANT_ID}" # Tenant ID fornecido no Elven Observability
token: "${env:OTEL_API_TOKEN}" # Token gerado no Elven Observability
endpoint: "${env:COLLECTOR_URL}" # URL do seu OTLP Collector
loki_url: "${env:LOKI_URL}" # URL do Loki (opcional, padrão é fornecido)
env: ${opt:stage, 'dev'} # Ambiente (dev, staging, prod)
region: ${opt:region, 'us-east-1'} # Região AWS
version: 5 # Versão da Layer de instrumentação
Sobre os valores
Você pode passar os valores diretamente (plain text), por exemplo:
tenant: "acme-tenant"
token: "eyJhbGciOiJIUzI1NiIs..."
endpoint: "<https://my-collector.com/otlp/v1>"
Melhor prática: use variáveis de ambiente para evitar exposição de dados sensíveis no código.
Exemplo de arquivo .env
TENANT_ID=acme-tenant
OTEL_API_TOKEN=eyJhbGciOiJIUzI1NiIs...
COLLECTOR_URL=https://collector.elvenobservability.com/otlp/v1
LOKI_URL=https://loki.elvenobservability.com
Como obter tenant
e token
tenant
e token
Acesse https://elvenobservability.com/, faça login no seu painel e gere o Tenant ID e o Token de API na seção de configurações do projeto.
Caso tenha qualquer dificuldade, nosso time de suporte está pronto para ajudar. Entre em contato pelo próprio painel ou com seu contato dedicado.
O que o plugin faz automaticamente
Adiciona a Layer de observabilidade nas suas funções Lambda.
Configura as variáveis de ambiente necessárias para OpenTelemetry e Loki.
Gera nomes padronizados para os serviços no formato:
service_stage_functionName
Permite desativar a instrumentação em funções específicas:
functions:
myFunction:
handler: handler.myFunction
disableOtel: true
Deploy
Execute o deploy do seu serviço:
# Deploy para ambiente de desenvolvimento
serverless deploy --stage dev --region us-east-1
# Deploy para produção
serverless deploy --stage prod --region us-east-1
Verificando a Instrumentação
Após o deploy, acesse o AWS Console.
Verifique se a Layer foi adicionada às suas funções.
Confira as variáveis de ambiente nas configurações da Lambda.
Execute uma função e verifique os traces no painel Elven.
Boas práticas
Sempre use variáveis de ambiente para
token
,tenant
eendpoint
.Defina a versão da Layer no
elvenPlugin
para garantir consistência entre ambientes.Nomeie os serviços e funções de forma clara para facilitar a análise no Grafana e Loki.
Revise as variáveis injetadas na função durante o deploy para garantir que tudo está correto.
Troubleshooting
Traces ou logs não aparecem no Grafana
Endpoint ou token incorretos
Revise os valores no ambiente.
Função não instrumentada
disableOtel: true
aplicado?
Confirme na config da função.
Lambda com latência alta
Collector ou Loki indisponível
Teste o endpoint e revise timeout.
Variável ausente na função
Sobrescrita na config da função?
Verifique o serverless.yml
Exemplo completo
service: my-awesome-service
plugins:
- elven-serverless-plugin
custom:
elvenPlugin:
tenant: "${env:TENANT_ID}"
token: "${env:OTEL_API_TOKEN}"
endpoint: "${env:COLLECTOR_URL}"
loki_url: "${env:LOKI_URL}"
env: ${opt:stage, 'dev'}
region: ${opt:region, 'us-east-1'}
version: 5
provider:
name: aws
runtime: nodejs18.x
stage: ${opt:stage, 'dev'}
region: ${opt:region, 'us-east-1'}
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
processData:
handler: handler.processData
events:
- sqs:
arn: ${cf:my-queue.QueueArn}
disableOtel: true # Exemplo: desativa a instrumentação nesta função
analyticsJob:
handler: handler.analytics
events:
- schedule: rate(1 hour)
Recursos Adicionais
Precisa de ajuda? Entre em contato com nosso time de suporte através do painel Elven Observability ou envie um email para [email protected].
Last updated
Was this helpful?