[SOLUCIONADO] Cambiar tiempo default de almacenamiento logs

Iniciado por White ghost, Febrero 10, 2022, 02:54:40 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 10, 2022, 02:54:40 AM Ultima modificación: Febrero 11, 2022, 01:46:13 AM por AXCESS
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?

Febrero 10, 2022, 06:33:57 PM #1 Ultima modificación: Febrero 11, 2022, 04:20:17 AM por DtxdF
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
#!/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), No tienes permitido ver los links. Registrarse o Entrar a mi cuenta te deberá decir:

Código: bash
/var/log/test-log.log.0


Ahora lo que haces es moverlo:

Código: bash
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
/var/log/test-log.log.1


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

Código: bash
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
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:

Código: php
[[[[[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:

Código: php
'19990122T000000'
'990122T000000'
'0122T000000'
'22T000000'
'T000000'
'T0000'
'T00'
'22T'
'T'
''


Mira este:

Código: php
# 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]].


  • hh son las horas;
  • w día de la semana;
  • dd día del mes. 'L' o 'l' es para el último del mes.

Por ejemplo. Lo siguiente:

Código: php
$D0


Es lo mismo que:

Código: php
@T00


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF