Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: White ghost en Febrero 10, 2022, 02:54:40 AM

Título: [SOLUCIONADO] Cambiar tiempo default de almacenamiento logs
Publicado por: White ghost en Febrero 10, 2022, 02:54:40 AM
Hola.

Estoy utilizando rsyslog para el almacenamiento centralizado de logs.
Actualmente estoy enviando los logs de un firewall al servidor de ryslog y funciona correctamente.

Sin embargo, necesito configurar para que se cree un archivo de logs cada hora. La configuración default me crea un archivo cada día.

El template que utilice fue template RemoteLogs, "/var/log/firewall/%HOSTNAME%/%PROGRAMNAME%.log"

¿Cómo puedo hacer para que los logs no se almacenen por día sino por hora?
Título: Re: Cambiar tiempo default de almacenamiento logs
Publicado por: DtxdF en Febrero 10, 2022, 06:33:57 PM
Las veces que desees

Necesitas usar a tu compañero crontab, y rotar un archivo (el log) las veces que necesites (cada hora).

Primero que nada, debes saber cómo rotarlo. Eso es sencillo:

Código (bash) [Seleccionar]
#!/bin/sh

# See sysexits(3)
EX_USAGE=64
EX_NOINPUT=66

usage()
{
        echo "usage: `basename $0` file" >&2
        return $EX_USAGE
}

main()
{
        local file errno

        file=$1

        if [ -z "${file}" ]; then
                return `usage`
        fi

        if ! [ -f "${file}" ]; then
                echo "Can't be find the file "${file}", please choose the correct!" >&2

                return $EX_NOINPUT
        fi

        # Get the number rotation
        rn=`ls -d "${file}"* 2> /dev/null | wc -l | tr -d ' '`

        # Syslog style ;)
        rn=$(($rn-1))

        echo "${file}.${rn}"
}

main $@


Este script te permite obtener un nombre que deberás usar para mover el archivo a rotar. Si, por ejemplo, el archivo se llama /var/log/test-log.log, y solo tienes un archivo en total (sin rotación), rotate.sh te deberá decir:

Código (bash) [Seleccionar]
/var/log/test-log.log.0

Ahora lo que haces es moverlo:

Código (bash) [Seleccionar]
mv /var/log/test-log.log /var/log/test-log.log.0

Ahora si ejecutas nuevamente el script, te deberá decir lo siguiente:

Código (bash) [Seleccionar]
/var/log/test-log.log.1

Te recomiendo ejecutar el siguiente comando cada vez que lo mueves:

Código (bash) [Seleccionar]
touch /var/log/test-log.log

Eso es debido a que syslog no escribirá en un archivo que no exista.

Haces el mismo proceso una y otra vez dentro de otro script, que deberás colocar en tu crontab (o el del sistema: /etc/crontab):

Código (bash) [Seleccionar]
0    *    *    *    *    root    /bin/sh /usr/local/bin/rotate-logs.sh /var/log/test-log.log

Listo, ahora cada hora lo rotarás.

Un momento en específico

Eso no se encarga syslog, sino su hermano: newsyslog.

Estoy en FreeBSD así que me basaré en él, lo que tienes que hacer es una equivalencia.

newsyslog.conf acepta un parámetro llamado when que le indica a newsyslog cuándo debe rotar el log. También puedes hacerlo por tamaño -y de hecho, te recomiendo que también los ajustes si el archivo crece exponencialmente en poco tiempo.-

Básicamente esta es la sintaxis: si es un asterisco (*) le dejará todo en manos a size para rotarlo. Si no es un asterisco, se debe colocar un arroba (@) o un signo de dólar ($). Los dos símbolos usan sintaxis diferentes.

El arroba usa el formato especificado en el ISO 8601, y su sintaxis es la siguiente:

[[[[[cc]yy]mm]dd][T[hh[mm[ss]]]]]

Si no se especifica los campos, se usará la fecha y la hora actual. Lo que colocaré a continuación es válido:

'19990122T000000'
'990122T000000'
'0122T000000'
'22T000000'
'T000000'
'T0000'
'T00'
'22T'
'T'
''


Mira este:

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/messages 600  5    1000 @0101T JC


Este rotará el log cada vez que el primero del primer mes de cada año y siglo, o lo rotará cuando llegue a 1 MB. Se comprimirá usando bzip2 (flag J) y si no existe, newsyslog debe crearlo (flag C) cuando se inicie newsyslog.

FreeBSD tiene otra sintaxis con el signo dólar. Este signo usa tres sintaxis: [Dhh], [Ww[Dhh]], y [Mdd[Dhh]].


Por ejemplo. Lo siguiente:

$D0

Es lo mismo que:

@T00

~ DtxdF