Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

565
Views
Establecer LogStreamName para la llamada de AWS Lambda

Implementamos funciones de node.js en AWS Lambda. Al llamarlos, generan automáticamente un registro de AWS CloudWatch. El grupo de registro está configurado con el nombre de la función Lambda, eso es útil. Pero el flujo de registro se llama así: 2018/02/14/[$LATEST]794dbaf40a7846c4984ad80ebf110544 .

Flujos de registro de AWS CloudWatch

Eso no es útil cuando busco errores, ya que necesito verificar varias secuencias de registro, porque no sé cuál es la correcta.

¿Hay alguna forma de definir el nombre del flujo de registro, de modo que sea más legible para un ser humano?

El código de node.js se parece a esto:

 exports.handler = function (event, context) { console.log('Called "' + context.functionName + '" with AWS-Request-Id "' + context.awsRequestId + '"'); // do sth. here };
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Echa un vistazo al contexto de tu función. Tiene la propiedad context.logStreamName . Puede cambiarlo a cualquier nombre único.

Tenga en cuenta que si desea agregar sus registros a una transmisión existente, debe conservar su token. Fue la razón por la que creé un nuevo flujo de registro para cada llamada lambda. Además, estoy usando guid para crear el nombre de la transmisión (como: reason why log created + guid() , la marca de tiempo también está bien).

Consulte más detalles en el siguiente artículo: el objeto de contexto (Node.js)

EDITAR : No preste atención a mi respuesta anterior. Estaba completamente equivocado.

Revisé mi código cómo implementé la misma funcionalidad. No es posible cambiar el nombre del grupo o de la secuencia desde el contexto. Pero podría usar CloudWatchLogs en su código para colocar registros en grupos y transmisiones específicos.

Mi código:

 var AWS = require('aws-sdk'); exports.handler = (event, context, callback) => { // TODO implement var cloudwatchlogs = new AWS.CloudWatchLogs({ apiVersion: '2014-03-28' }); // create new stream name for each request // because I don't persist sequenceToken var logStreamName = "myStreamName" + Math.random() var params = { logGroupName: 'myLogGroup', logStreamName: logStreamName }; cloudwatchlogs.createLogStream(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else { var params = { logEvents: [{ message: 'log message', timestamp: new Date().getTime() }, { message: 'one more log message', timestamp: new Date().getTime() } ], logGroupName: 'myLogGroup', logStreamName: logStreamName }; cloudwatchlogs.putLogEvents(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response }); } }); callback(null, 'Hello from Lambda'); };

Las desventajas de este enfoque son:

  • Su lambda crea dos grupos de registro y dos flujos de registro de acuerdo. Una de tus lambda, otra custom. console.log('') escribe en el registro lambda, putLogEvents escribe en su registro personalizado (es decir: myStreamName0.10141409975385463). Sea consciente de esto.
  • Debe crear manualmente 'myLogGroup' (como lo hice) o implementar un código que creará un grupo de registro si no existe.

El resultado de este código de prueba se ve así: ingrese la descripción de la imagen aquí

Los nombres de las transmisiones de mis producciones tienen más sentido que el nombre + aleatorio. Y están usando guid o marca de tiempo como sufijo. No creo que sea seguro usar random.

over 4 years ago · Santiago Trujillo Report

0

No puede cambiar el nombre de Log Stream. Cada contenedor en ejecución para su función Lambda inicia sesión en un Log Stream diferente.

Si desea ver fácilmente los registros juntos como uno solo, puede transmitirlos a Amazon ElasticSearch Service para que pueda usar Kibana para navegar a través de sus registros o puede usar herramientas CLI como awscli para agregarlos y buscarlos en su terminal.

over 4 years ago · Santiago Trujillo Report

0

Si desea realizar un seguimiento de las ejecuciones de todos modos, como en mi caso, también hay un enfoque menos redundante:

Simplemente cree una tabla de dynamodb "Ejecuciones" y asegúrese de insertar una nueva entrada en cada ejecución de lambda con logStreamName (al que se puede acceder desde el contexto) y su nombre personalizado u otra información personalizada que necesite para buscar este logStream.

Ventajas:

  • no se necesita una lógica de registro personalizado/contenedor.
  • no hay entradas duplicadas en cloudwatch

Desventajas:

  • es posible que deba realizar una llamada adicional a dynamodb para averiguar logStreamName, ya que logStreamName en sí mismo no tiene un valor de identificación
  • no hay consideraciones sobre IAM y acceso hasta ahora. tienes que tener eso en cuenta en tu configuración
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!