• EnglishEspañol日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

Crea una propuesta

Traza tu función Java Lambda con New Relic y OpenTelemetry

AVANCE

AWS Lambda con OpenTelemetry para Java aún está en desarrollo.

Tenemos documentación similar para .NET, pero si usa Python, Go, JavaScript, Ruby o PHP para AWS Lambda con OpenTelemetry, puede usar nuestra documentación de Java o .NET como guía general para la configuración. Para obtener información adicional, consulte Distribución de AWS para OpenTelemetry.

Esta guía cubrirá cómo puede utilizar OpenTelemetry Lambda para trazar su función Java Lambda utilizando las capas OpenTelemetry Lambda administradas de AWS. OpenTelemetry facilita la instrumentación de sus funciones, incluida la instrumentación automática para muchas bibliotecas populares.

Requisitos previos

Esta guía asume que usted tiene lo siguiente:

  • Una cuenta New Relic . Si no tienes uno, crea uno gratis.
  • Una cuenta de AWS. Si no tienes uno, crea uno gratis.
  • Una función Lambda de Java que se ejecuta en los tiempos de ejecución java8.al2 o java11 . Si aún no tienes uno, crea uno ahora.

Paso 1: habilitar rayos X

Aunque no utilizamos AWS X-Ray en esta configuración, aún necesitamos habilitar X-Ray en la función Lambda para habilitar la característica de seguimiento integrada en AWS OpenDistro.

Para habilitar rayos X:

  1. Abra su función en Lambda Console.

  2. Elija

    Configuration

    y luego

    Monitoring Tools

    .

  3. Elija

    Edit

    .

  4. En

    X-Ray

    , habilite

    Active tracing

    .

Alternativamente, si está utilizando plantillas SAM (modelo de aplicación serverless) o CloudFormation , puede habilitar X-Ray agregando lo siguiente a las propiedades de su función Lambda:

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Policies:
- AWSLambdaBasicExecutionRole
...
- AWSXrayWriteOnlyAccess
Tracing: Active

Importante

Esta opción requiere que tenga AWSLambdaBasicExecutionRole o una política equivalente adjunta a su función.

Paso 2: instalar la capa

AWS publica una capa administrada que incluye el recolector OpenTelemetry Lambda, el SDK OpenTelemetry Java y el agente de instrumentación automática ADOT.

Para instalarlo:

  1. Abra su función en Lambda Console.

  2. En Layers en la sección Designer , elija Add a layer.

  3. En Specify an ARN, pegue uno de los ARN de capa para la arquitectura de su función de la lista siguiente. Reemplace {region}con su región de AWS, como us-east-1.

  4. Elija Add.

    • AMD64/X86_64: arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-amd64-ver-1-11-1:1
    • ARM64: arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-arm64-ver-1-11-1:1

Para plantillas SAM o CloudFormation, agregue esto a las propiedades de su función:

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Layers:
# Use this if using x86_64 architecture
- !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:901920570463:layer:aws-otel-java-agent-amd64-ver-1-11-1:1
# Use this if using arm64 architecture
- !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:901920570463:layer:aws-otel-java-agent-arm64-ver-1-11-1:1

Importante

Consulte los ARN más recientes publicados por AWS para verificar que los ARN de capa anteriores estén actualizados.

Paso 3: configurar la capa

Para configurar la capa necesitamos configurar un contenedor ejecutivo. El contenedor ejecutivo es un script que se ejecuta durante la inicialización de la función. En este caso, el script configura OpenTelemetry.

  1. Abra su función en Lambda Console.

  2. Elija Configuration y luego Environment variables.

  3. En Environment variables, elija Edit.

  4. Elija Add environment variable.

  5. Para Key configúrelo en AWS_LAMBDA_EXEC_WRAPPER y configure Value en una de las siguientes opciones (depende de su tipo de controlador). Luego elija Save.

    • /opt/otel-handler: para empaquetar controladores regulares (implementando RequestHandler)
    • /opt/otel-proxy-handler: para empaquetar controladores regulares (implementando RequestHandler) enviados mediante proxy a través de API Gateway, lo que permite la propagación del contexto HTTP
    • /opt/otel-stream-handler: para empaquetar controladores de transmisión (implementando RequestStreamHandler), habilitando la propagación del contexto HTTP para solicitudes HTTP

Para plantillas SAM o CloudFormation, agregue esto a las propiedades de su función:

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Environment:
Variables:
AWS_LAMBDA_EXEC_WRAPPER: /opt/otel-handler

Importante

Reemplace /opt/otel-handler si su controlador de funciones implementa uno de los otros tipos de controladores.

Paso 4: Agregar variables de entorno de New Relic

Para enviar los datos de OpenTelemetry que esta capa recopila a New Relic, necesitamos configurar el recolector OpenTelemetry Lambda que está empaquetado con la capa para exportar la telemetría que recibe al extremo New Relic OpenTelemetry. Antes de hacer eso, primero debemos establecer algunas variables de entorno de las que dependerá.

  1. Genera y copia una New Relic desde tu cuenta New Relic.

  2. Abra su función en Lambda Console.

  3. Elija Configuration y luego Environment variables.

  4. En Environment variables, elija Edit.

  5. Elija Add environment variable.

  6. Para Key configúrelo en NEW_RELIC_LICENSE_KEY y establezca Value en el valor de la clave de licencia que generó en el paso 1. Luego elija Save.

  7. Elija Add environment variable nuevamente.

  8. Para Key configúrelo en NEW_RELIC_OPENTELEMETRY_ENDPOINT y configure Value en una de las siguientes opciones (depende de su región de New Relic). Luego elija Save.

    • otlp.nr-data.net:4317: Si su cuenta New Relic está en la región de EE. UU.
    • otlp.eu01.nr-data.net:4317: Si su cuenta New Relic está en la región de la UE

Para las plantillas SAM y CloudFormation, agregue lo siguiente a las propiedades de su función. Asegúrese de reemplazar your-license-key-here con su y otlp.nr-data.net:4317 con el extremo New Relic OpenTelemetry para su región.

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Environment:
Variables:
...
NEW_RELIC_LICENSE_KEY: your-license-key-here
NEW_RELIC_OPENTELEMETRY_ENDPOINT: otlp.nr-data.net:4317

Importante

Reemplace your-license-key-here con su New Relic y otlp.nr-data.net:4317 con el extremo apropiado para su región de New Relic. Vea la lista de arriba.

Paso 5: Configurar el recolector

Ahora anularemos la configuración predeterminada del recolector OpenTelemetry Lambda con una que exporte telemetría al extremo New Relic OpenTelemetry. Para hacer esto debemos incluir un archivo de configuración collector.yaml con nuestra función.

Cree un archivo collector.yaml en el directorio raíz de su función con el siguiente contenido:

receivers:
otlp:
protocols:
grpc:
http:
exporters:
otlp:
endpoint: ${NEW_RELIC_OPENTELEMETRY_ENDPOINT}
headers:
api-key: ${NEW_RELIC_LICENSE_KEY}
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp]
metrics:
receivers: [otlp]
exporters: [otlp]
logs:
receivers: [otlp]
exporters: [otlp]

Agrupe este archivo collector.yaml en el directorio raíz del paquete zip de su función y vuelva a desplegarlo.

  1. Abra su función en Lambda Console.

  2. Elija

    Configuration

    y luego

    Environment variables

    .

  3. En

    Environment variables

    , elija

    Edit

    .

  4. Elija

    Add environment variable

    .

  5. Para

    Key

    establezca OPENTELEMETRY_COLLECTOR_CONFIG_FILE y establezca

    Value

    en /var/task/collector.yaml.

  6. Luego elija

    Save

    .

Para las plantillas SAM y CloudFormation, agregue esto a las propiedades de su función:

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Environment:
Variables:
...
OPENTELEMETRY_COLLECTOR_CONFIG_FILE: /var/task/collector.yaml

Importante

Esto supone que agrupaste tu collector.yaml en el directorio raíz de tu función. Si lo agrupaste en otro lugar, reemplaza /var/task/collector.yaml con la ruta a tu collector.yaml.

Paso 6: vea sus datos en la UI de New Relic [ver-datos]

Primero querrás invocar tu función Lambda varias veces para comenzar a generar telemetría. Desde allí, dirígete a New Relic para encontrar tu traza, métrica y registro.

Su telemetría no aparecerá en New Relic Serverless. En su lugar, encontrará sus telemetry data en New Relic OpenTelemetry Nerdlets.

Gastos generales de instrumentación automática

El agente de instrumentación automática ADOT Lambda Layer para Java tiene un impacto notable en el tiempo de inicio en AWS Lambda y, por lo general, necesitará usarlo junto con la simultaneidad aprovisionada para atender solicitudes de producción sin causar tiempos de espera en las solicitudes iniciales mientras se inicializa. Recomendamos probar primero esta configuración en un entorno sin producción para determinar la configuración adecuada para su caso de uso.

Alternativamente, puede utilizar el siguiente método de instrumentación manual. De forma predeterminada, la instrumentación manual requiere menos recursos en la inicialización de la función. Sin embargo, este método requiere un cambio de código en la mayoría de los casos.

Instrumentación manual

El método de instrumentación manual es similar al procedimiento de instrumentación automática en este documento. La única diferencia es el ARN de la capa Lambda que especifica en el paso 1.

Para la instrumentación manual, en lugar de usar los ARN de capa en el Paso 2, use uno de los ARN de capa en la lista siguiente para la arquitectura de su función:

  • AMD64/X86_64: arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-wrapper-amd64-ver-1-11-1:1
  • ARM64: arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-wrapper-arm64-ver-1-11-1:1

Reemplace {region} con su región de AWS, como us-east-1.

Todos los demás pasos siguen siendo los mismos.

Esta capa Lambda alternativa seguirá ajustando su función Lambda como el método automático. También instrumentará el SDK de AWS automáticamente. Pero todas las demás bibliotecas que utilice requerirán que incluya la biblioteca de instrumentación OpenTelemetry de la biblioteca desde el repositorio de instrumentación OpenTelemetry en la dependencia de su función y modifique su código para inicializarla.

Puedes ver un ejemplo con OKHttp en GitHub.

Importante

Consulte los ARN más recientes publicados por AWS para verificar que los ARN de capa anteriores estén actualizados.

Rastreo distribuido

En algunos casos es posible que veas un rastreo fragmentado distribuido dentro de New Relic con esta configuración. Esto ocurre cuando una traza inicia o involucra un servicio que está fuera del contexto ADOT (por ejemplo, un servicio administrado de AWS). Los tramos de ese servicio son creados por X-Ray, no por OpenTelemetry, y ADOT no los reenvía a New Relic. Aunque la traza parece fragmentada, aún proporciona información completa y valiosa sobre el desempeño dentro de la función Lambda, así como otros servicios cuyos tramos fueron enviados a New Relic.

Más información

Para obtener más información, consulte el inicio rápido de New Relic OpenTelemetry.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.