Configuración de los formatos de registro JSON y de texto sin formato - AWS Lambda

Configuración de los formatos de registro JSON y de texto sin formato

Al capturar las salidas del registro como pares clave-valor JSON, resulta más fácil buscar y filtrar resultados cuando se depuran las funciones. Con los registros con formato JSON, también puede agregar etiquetas e información contextual a sus registros. Esto puede ayudarlo a realizar un análisis automatizado de grandes volúmenes de datos de registro. A menos que su flujo de trabajo de desarrollo se base en herramientas existentes que consumen registros de Lambda con texto sin formato, le recomendamos que seleccione JSON como formato de registro.

Para todos los tiempos de ejecución administrados por Lambda, puede elegir si los registros del sistema de su función se deben enviar a Registros de Amazon CloudWatch en texto sin formato o formato JSON no estructurado. Los registros del sistema son los registros que Lambda genera y, a veces, se conocen como registros de eventos de plataforma.

En el caso de los tiempos de ejecución compatibles, cuando se utiliza uno de los métodos de registro integrados compatibles, Lambda también puede generar los registros de aplicación de la función (los registros que genera el código de la función) en formato JSON estructurado. Al configurar el formato de registro de la función para estos tiempos de ejecución, la configuración que elija se aplicará tanto a los registros del sistema como de la aplicación.

Para los tiempos de ejecución compatibles, si su función utiliza una biblioteca o un método de registro compatibles, no necesita realizar ningún cambio en el código existente para que Lambda capture los registros en formato JSON estructurado.

nota

El uso del formato de registro JSON agrega metadatos y codifica los mensajes de registro como objetos JSON que contienen una serie de pares clave-valor. Por este motivo, es posible que aumente el tamaño de los mensajes de registro de la función.

Tiempos de ejecución y métodos de registro compatibles

Actualmente, Lambda admite la opción de generar registros de aplicaciones en formato JSON estructurado para los siguientes tiempos de ejecución.

Tiempo de ejecución Versiones compatibles
Java Todos los tiempos de ejecución de Java excepto Java 8 en Amazon Linux 1
.NET .NET 8
Node.js Node.js 16 y posteriores
Python Python 3.8 y posteriores

Para que Lambda envíe los registros de aplicación de la función a CloudWatch en formato JSON estructurado, la función debe utilizar las siguientes herramientas de registro integradas para generar los registros:

  • Java: el registrador LambdaLogger o Log4j2.

  • .NET: la instancia ILambdaLogger del objeto de contexto.

  • Node.js: los métodos de la consola console.trace, console.debug, console.log, console.info, console.error y console.warn

  • Python: la biblioteca logging de Python estándar

Para obtener más información sobre el uso de controles de registro avanzados con tiempos de ejecución compatibles, consulte Registro y supervisión de las funciones de Lambda de Java, Registro y supervisión de las funciones de Lambda de Node.js y Registro y supervisión de las funciones de Lambda de Python.

Para otros tiempos de ejecución de Lambda administrados, Lambda actualmente solo admite de forma nativa la captura de registros del sistema en formato JSON estructurado. Sin embargo, puede seguir capturando los registros de aplicaciones en formato JSON estructurado en cualquier tiempo de ejecución con herramientas de registro, como Powertools para AWS Lambda, que generan salidas de registro con formato JSON.

Formatos de registro predeterminados

Actualmente, el formato de registro predeterminado para todos los tiempos de ejecución de Lambda es texto sin formato.

Si ya utiliza bibliotecas de registro, como Powertools para AWS Lambda, para generar los registros de funciones en formato JSON estructurado, no necesita cambiar el código si selecciona el formato de registro JSON. Lambda no codifica dos veces ningún registro que ya esté codificado en JSON, por lo que los registros de la aplicación de su función seguirán capturándose como antes.

Formato JSON para registros del sistema

Al configurar el formato de registro de la función como JSON, se captura cada elemento de registro del sistema (evento de plataforma) como un objeto JSON que contiene pares clave-valor con las siguientes claves:

  • "time": la hora en que se generó el mensaje de registro

  • "type": el tipo de evento que se está registrando

  • "record": el contenido de la salida del registro

El formato del valor "record" varía según el tipo de evento que se registre. Para obtener más información, consulte Tipos de objetos Event de la API de telemetría. Para obtener más información sobre los niveles de registro asignados a los eventos de registro del sistema, consulte Asignación de eventos a nivel de registro del sistema.

A modo de comparación, los dos ejemplos siguientes muestran la misma salida de registro en formato JSON estructurado y de texto sin formato. Tenga en cuenta que, en la mayoría de los casos, los eventos de registro del sistema contienen más información cuando se generan con formato JSON que cuando se generan con texto sin formato.

ejemplo Texto sin formato:
2024-03-13 18:56:24.046000 fbe8c1 INIT_START Runtime Version: python:3.12.v18 Runtime Version ARN: arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0
ejemplo JSON estructurado:
{ "time": "2024-03-13T18:56:24.046Z", "type": "platform.initStart", "record": { "initializationType": "on-demand", "phase": "init", "runtimeVersion": "python:3.12.v18", "runtimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0" } }
nota

La Acceso a datos de telemetría en tiempo real para extensiones mediante la API de telemetría siempre emite eventos de plataforma, como START y REPORT, en formato JSON. La configuración del formato de los registros del sistema que Lambda envía a CloudWatch no afecta el comportamiento de la API de telemetría de Lambda.

Formato JSON para registros de aplicaciones

Al configurar el formato de registro de la función como JSON, las salidas del registro de aplicación escritas con las bibliotecas y los métodos de registro compatibles se capturan como un objeto JSON que contiene pares de clave-valor con las siguientes claves:

  • "timestamp": la hora en que se generó el mensaje de registro

  • "level": el nivel de registro asignado al mensaje

  • "message": el contenido del mensaje de registro

  • "requestId" (Python, .NET y Node.js) o "AWSrequestId" (Java): el ID de solicitud único para la invocación de la función

Según el tiempo de ejecución y el método de registro que utilice la función, este objeto JSON también puede contener pares de claves adicionales. Por ejemplo, en Node.js, si la función utiliza métodos console para registrar objetos de error con varios argumentos, el objeto JSON contendrá pares de clave-valor adicionales junto con las claves errorMessage, errorType, ystackTrace. Para obtener más información sobre los registros con formato JSON en diferentes tiempos de ejecución de Lambda, consulte Registro y supervisión de las funciones de Lambda de Python, Registro y supervisión de las funciones de Lambda de Node.js, y Registro y supervisión de las funciones de Lambda de Java.

nota

La clave que Lambda utiliza para el valor de marca de tiempo es diferente para los registros del sistema y los registros de la aplicación. En el caso de los registros del sistema, Lambda usa la clave "time" para mantener la coherencia con la API de telemetría. Para los registros de la aplicación, Lambda sigue las convenciones de los tiempos de ejecución compatibles y utiliza "timestamp".

A modo de comparación, los dos ejemplos siguientes muestran la misma salida de registro en formato JSON estructurado y de texto sin formato.

ejemplo Texto sin formato:
2024-10-27T19:17:45.586Z 79b4f56e-95b1-4643-9700-2807f4e68189 INFO some log message
ejemplo JSON estructurado:
{ "timestamp":"2024-10-27T19:17:45.586Z", "level":"INFO", "message":"some log message", "requestId":"79b4f56e-95b1-4643-9700-2807f4e68189" }

Configuración del formato de registro de su función

Para configurar el formato de registro de la función, puede utilizar la consola de Lambda o la AWS Command Line Interface (AWS CLI). También puede configurar el formato de registro de una función mediante los comandos de la API de Lambda CreateFunction y UpdateFunctionConfiguration, el recurso de AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function y el recurso de AWS CloudFormation AWS::Lambda::Function.

Cambiar el formato de registro de la función no afecta a los registros existentes almacenados en Registros de Amazon CloudWatch. Solo los registros nuevos utilizarán el formato actualizado.

Si cambia el formato de registro de la función a JSON y no establece el nivel de registro, Lambda establece automáticamente el nivel de registro de la aplicación y el nivel de registro del sistema de la función en INFO. Esto significa que Lambda envía a Registros de CloudWatch solo las salidas de registro de nivel INFO e inferiores. Para obtener más información sobre el filtrado a nivel de registro de aplicaciones y sistemas, consulte Filtrado a nivel de registro.

nota

Para los tiempos de ejecución de Python, cuando el formato de registro de la función está establecido en texto sin formato, la configuración de nivel de registro predeterminada es WARN. Esto significa que Lambda envía a Registros de CloudWatch solo las salidas de registro de nivel WARN e inferiores. Al cambiar el formato de registro de la función a JSON, se modifica este comportamiento predeterminado. Para obtener más información acerca de los registros de Python, consulte Registro y supervisión de las funciones de Lambda de Python.

En el caso de las funciones de Node.js que emiten registros en formato de métricas integradas (EMF), cambiar el formato de registro de la función a JSON podría provocar que CloudWatch no reconozca las métricas.

importante

Si su función utiliza Powertools para AWS Lambda (TypeScript) o las bibliotecas cliente de EMF de código abierto para emitir registros EMF, actualice las bibliotecas de Powertools y EMF a las versiones más recientes para asegurarse de que CloudWatch pueda seguir analizando los registros correctamente. Si cambia al formato de registro JSON, también le recomendamos que realice pruebas para asegurarse de que es compatible con las métricas integradas de la función. Para obtener más información sobre las funciones de node.js que emiten registros EMF, consulte Uso de bibliotecas cliente de formato de métricas integradas (EMF) con registros JSON estructurados.

Para configurar el formato de registro de una función (consola)
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. En la página de configuración de funciones, elija Herramientas de supervisión y operaciones.

  4. En el panel Configuración de registros, seleccione Editar.

  5. En Contenido del registro, para Formato de registro, seleccione Texto o JSON.

  6. Seleccione Save.

Cambio del formato de registro de una función existente (AWS CLI)
  • Para cambiar el formato de registro de una función existente, utilice el comando update-function-configuration. Configure la opción LogFormat en LoggingConfig para que sea JSON o Text.

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogFormat=JSON
Para establecer el formato de registro al crear una función (AWS CLI)
  • Para configurar el formato de registro al crear una función nueva, utilice la opción --logging-config en el comando create-function. Establezca LogFormat en JSON o Text. El siguiente comando de ejemplo crea una función de Node.js que genera registros en formato JSON estructurado.

    Si no especifica un formato de registro al crear una función, Lambda utilizará el formato de registro predeterminado para la versión de tiempo de ejecución que seleccione. Para obtener información sobre los formatos de registro predeterminados, consulte Formatos de registro predeterminados.

    aws lambda create-function \ --function-name myFunction \ --runtime nodejs22.x \ --handler index.handler \ --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole \ --logging-config LogFormat=JSON