Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

270
Vistas
Encuentre el número de ocurrencias de la palabra clave en el archivo de registro en el último minuto

Con el fin de publicar métricas en AWS CloudWatch, me gustaría obtener información sobre la cantidad de ocurrencias de alguna palabra clave (por ejemplo, error, excepción) en el último minuto (desde la hora actual del sistema) en los registros de mi aplicación.

Los siguientes son los comandos que he probado hasta ahora en función de las respuestas de un hilo relacionado ( filtrar las entradas del archivo de registro según el rango de fechas ):

 awk -vDate=`date -d'now-1 minutes' +["%Y-%m-%d %H:%M:%S"` '($1 FS $2) > Date {print $3}' application.log | grep "ERROR" | uniq -c awk -vDate=`date -d'now-1 minutes' +["%Y-%m-%d %H:%M:%S"` '{if ($1 > Date) {print $3}}' application.log | grep "ERROR" | uniq -c awk -vDate=`date -d'now-1 minutes' +["%Y-%m-%d %H:%M:%S"` '{if ($1 == $Date) {print $3}}' application.log | grep "ERROR" | uniq -c

Pero recibo un error como este cuando intento esto:

 awk: cmd. line:1: 13:06:17 awk: cmd. line:1: ^ syntax error

El siguiente es el formato de mi archivo de registro:

 2016-02-05 12:10:48,761 [INFO] from org.xxx 2016-02-05 12:10:48,761 [INFO] from org.xxx 2016-02-05 12:10:48,763 [INFO] from org.xxx 2016-02-05 12:10:48,763 [INFO] from org.xxx 2016-02-05 12:10:48,763 [ERROR] from org.xxx 2016-02-05 12:10:48,763 [INFO] from org.xxx 2016-02-05 12:10:48,764 [INFO] ffrom org.xxx 2016-02-05 12:10:48,773 [WARN] from org.xxx 2016-02-05 12:10:48,777 [INFO] from org.xxx 2016-02-05 12:10:48,778 [INFO] from org.xxx

Atrapado en esto durante bastante tiempo. ¡Gracias por la ayuda!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Está utilizando acentos graves obsoletos y, por lo tanto, no cita la date de salida. Haz esto en su lugar:

 awk -vDate="$(date -d'now-1 minutes' +"%Y-%m-%d %H:%M:%S")" '($1 FS $2) > Date { if ($3~/ERROR/) print $3}' file

Tenga en cuenta que no necesita canalizar a grep y al no tener un espacio entre -v y Date , su secuencia de comandos es específica de gawk y si es específica de gawk, entonces no necesita esa llamada externa hasta la date ya que gawk tiene su propio funciones de tiempo integradas (pista: BEGIN{Date=strftime("%Y-%m-%d %H:%M:%S",systime()-60)} ).

Tampoco necesita uniq -c pero sin ver su entrada real y la salida esperada (haciendo un uniq -c dado que la entrada no tendría ningún sentido frente a wc -l ) no voy a adivinar más.

Oh, qué diablos, aquí está todo el guión en Gawk:

 $ cat tst.awk BEGIN { #date = strftime("%Y-%m-%d %H:%M:%S",systime()-60) date = "2016-02-05 12:10:48" } ($1" "$2) > date { if ($3 ~ /ERROR/) { cnt[$3]++ } } END { for (err in cnt) { print err, cnt[err] } } $ $ awk -f tst.awk file [ERROR] 1

Supongo que en realidad tienes varios sabores de "ERROR" y es por eso que quieres el recuento de cada uno. Simplemente elimine el comentario de la línea strftime y elimine la línea de marca de tiempo codificada para que se ejecute en sus datos reales.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda