Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

273
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda