Entorno eficiente para ver registros

Entorno eficiente para ver registros

Actualmente lo estoy usando tail -fpara ver registros.

¿Existe alguna forma más eficiente, legible o mejor de ver los registros?

Respuesta1

¡Sí! perlrepresentarLenguaje práctico de extracción e investigación..

En lugar de utilizar shellsintaxis, como:

tail -f file | grep --line-buffered someting

o

tail -f file | sed -une '/someting/{s/^.*:/doing some formatting/;p}'

(Nota: --line-buffereden grep, como -uen sedson útiles para preveniralmacenamiento en búfer mediante bloques de tamaño fijo)

Para ver/explorar registros, perleselidioma.

Dependiendo delo que estás esperando...Es posible que tengas que crear un pequeño script que se ajuste exactamente a tus necesidades.

Es posible que encuentre algunas muestras útiles en perlfaq, como en perldoc perlfaq5(o man perlfaq5si no lo ha instalado perldoc), hay una pregunta:¿Cómo hago una "cola -f" en Perl?donde he tomado esto:

Primer intento

seek(GWFILE, 0, 1);

La declaración seek(GWFILE, 0, 1)no cambia la posición actual, pero sí borra la condición de fin de archivo en el identificador, de modo que la siguiente <GWFILE>hace que Perl intente leer algo nuevamente.

Si eso no funciona (depende de las características de su implementación stdio), entonces necesita algo más como esto:

for (;;) {
    for ($curpos = tell(GWFILE); <GWFILE>; $curpos = tell(GWFILE)) {
      # search for some stuff and put it into files
    }
    # sleep for a while
    seek(GWFILE, $curpos, 0);  # seek to where we had been
  }

Ya he usado esto muchas veces para activar casos especiales.

MANIFESTACIÓN

Para muestra, hay unquick and dirty contador de registros en tiempo real¡intentalo! (necesita acceso de lectura a /var/log/syslog;-):

#!/usr/bin/perl -w
my %counter;

open FH, "</var/log/syslog" or die;
my $curpos = ( stat FH )[7];
seek( FH, $curpos, 0 );

for ( ; ; ) {
    for ( $curpos = tell(FH) ; <FH> ; $curpos = tell(FH) ) {
        $counter{$3}++ if /^(\S+\s+){4}(\S+\/|)([^\/\[:]*)[\[:]/;
    }
    syswrite STDOUT, sprintf "\r%s\e[K",
      join( ", ", map { sprintf "%s:%s", $_, $counter{$_} } keys %counter );
    select undef,undef,undef,1;
    seek( FH, $curpos, 0 );
}

Produciría una línea, que se actualizaría automáticamente cada segundo, y contendría todo lo visto.demonioel nombre y un contador para cada uno de ellos:

smtp:6, pop3d-ssl:13, local:6, imapd:8, smtpd:30, CRON:5, pickup:1, named:1

Respuesta2

Como sugiere F. Hauri, podrías usar Perl para formatear la salida.

Para mi uso, creé un alias para tail en mi ~/.bashrcpara leer los registros de Glassfish. Es muy simple (una línea) y colorea mi salida para subrayar las líneas de error/advertencia:

tail-color() {
    tail $* | perl -p -e 's/(.*WARN.*)/\033[31;43;1m$1\033[0m\007/g;' -e 's/(.*ERROR.*)/\033[33;41;1m$1\033[0m\007/g;' -e 's/(.*SEVERE.*)/\033[33;41;1m$1\033[0m\007/g'
}
  1. -p: envuelve el script dentro de un bucle y genera la línea procesada
  2. -e 's/(.*WARN.*)/\033[31;43;1m$1\033[0m\007/g;'colorea cada línea que contiene "WARN"
    • \033[comienza la secuencia de escape (habilita el formateo)
    • 31significa primer plano rojo
    • 43significa fondo amarillo
    • 1permite caracteres en negrita
    • mcierra la secuencia de escape
    • $1incluye la línea de entrada
    • \033[0mes una segunda secuencia para restablecer el formato predeterminado al estándar, después de que se haya generado la línea
    • \007pitidos
  3. -e 's/(.*ERROR.*)/\033[33;41;1m$1\033[0m\007/g;'colorea cada línea que contiene "ERROR"; las únicas diferencias se refieren a los colores:
    • 31significa primer plano amarillo
    • 43significa fondo rojo

En mi caso, activé la campana visual, por lo que mi pantalla parpadea en caso de error (y mi altavoz no emite ningún pitido) y las líneas de error/advertencia se pueden detectar muy rápidamente.

Puede obtener más información sobre:

Nuevamente, como explica F. Hauri en su respuesta, puedes hacer muchas cosas gracias a Perl, por lo que podrías "desarrollar" tu propio lector de registros según tus necesidades.

información relacionada