Elven Observability: Instrumentação de Lambda

Pré-requisitos 

Instrumentação

Sem Serverless Framework

Instrumentação realizada pelo console da AWS

Configurando as variáveis de ambiente

Vá até a Lambda, desça a página, clique na aba Configuration, selecione a seção Environment variables e clique em Edit.

Adicione as seguintes variáveis de ambiente clicando em Add Environment Variables:

				
					  AWS_LAMBDA_EXEC_WRAPPER="/opt/otel-handler" 
  OTEL_TRACES_SAMPLER="always_on" 
  OTEL_TRACES_EXPORTER="otlp" 
  OTEL_METRICS_EXPORTER="otlp" 
  OTEL_LOG_LEVEL="DEBUG" 
  OTEL_PROPAGATORS="tracecontext,baggage, xray" 
  OTEL_LAMBDA_TRACE_MODE="capture"

  OTEL_EXPORTER_OTLP_ENDPOINT="<EC2_URL_HERE>" 
  OTEL_SERVICE_NAME="<LAMBDA-NAME>"
  OTEL_RESOURCE_ATTRIBUTES="service.name=<LAMBDA_NAME>,environment=<ENVIRONMENT>" 
				
			

Somente as últimas três variáveis devem ser alteradas:

  • EC2_URL_HERE: o IP da EC2 ou o DNS caso tenha sido configurado
  • LAMBDA-NAME: o nome do serviço que aparecerá nos traces e métricas
  • ENVIRONMENT: dev, hml ou prd, o ambiente que está sendo instrumentado

Configurando a Layer de instrumentação

Na aba Code, desça até a seção Layers e clique em Add a Layer

Então, escolha a opção Specify an ARN e cole esse ARN:

arn:aws:lambda:us-east-1:184161586896:layer:opentelemetry-nodejs-0_9_0:4

Por fim, clique em Verify e então em Add

Com Serverless Framework

Feito no arquivo serverless.yaml na qual as lambdas são configuradas, como no exemplo abaixo:

Importante: a configuração deve ser feita para cada Function!

As configurações são as mesmas realizadas em Configurando as variáveis de ambiente e em Configurando a Layer de instrumentação.

				
					org: <ORG_NAME> 
app: <APP_NAME> 
service: <SERVICE_NAME> 

provider: 
  name: aws 
  runtime: nodejs20.x 

functions: 
  <LAMBDA_NAME_1>:
    handler: <HANDLER> 
    
    layers: 
      - arn:aws:lambda:us-east-1:184161586896:layer:opentelemetry-nodejs-0_9_0:4

    environment: 
      AWS_LAMBDA_EXEC_WRAPPER: "/opt/otel-handler" 
      OTEL_TRACES_SAMPLER: "always_on" 
      OTEL_TRACES_EXPORTER: "otlp" 
      OTEL_METRICS_EXPORTER: "otlp" 
      OTEL_LOG_LEVEL: "DEBUG" 
      OTEL_LAMBDA_TRACE_MODE: "capture" 
      OTEL_PROPAGATORS: "tracecontext,baggage, xray"

      OTEL_EXPORTER_OTLP_ENDPOINT: "<EC2_URL_HERE>" 
      OTEL_SERVICE_NAME: "<LAMBDA_NAME>" 
      OTEL_RESOURCE_ATTRIBUTES: "service.name=<LAMBDA_NAME>,environment=<ENVIRONMENT>" 
  <LAMBDA_NAME_2>:
    handler: <HANDLER> 
    
    layers: 
      - arn:aws:lambda:us-east-1:184161586896:layer:opentelemetry-nodejs-0_9_0:4

    environment: 
      AWS_LAMBDA_EXEC_WRAPPER: "/opt/otel-handler" 
      OTEL_TRACES_SAMPLER: "always_on" 
      OTEL_TRACES_EXPORTER: "otlp" 
      OTEL_METRICS_EXPORTER: "otlp" 
      OTEL_LOG_LEVEL: "DEBUG" 
      OTEL_LAMBDA_TRACE_MODE: "capture" 
      OTEL_PROPAGATORS: "tracecontext,baggage, xray"

      OTEL_EXPORTER_OTLP_ENDPOINT: "<EC2_URL_HERE>" 
      OTEL_SERVICE_NAME: "<LAMBDA_NAME>" 
      OTEL_RESOURCE_ATTRIBUTES: "service.name=<LAMBDA_NAME>,environment=<ENVIRONMENT>"
				
			

Feito isso, é só realizar o deploy.

Rolar para cima