Curso de Ubuntu 26.04 / Gestionar registros con journald y logrotate

La gestión de registros de Ubuntu distingue entre el almacenamiento y la conservación de journald y la rotación de archivos de registro normales. Primero, compruebe el recolector real y, como reducir el período de conservación puede eliminar registros anteriores, asegúrese de conservar los registros antes de cambiar la política.

Verificar la ruta de recolección de registros real

systemctl status systemd-journald rsyslog --no-pager
journalctl --disk-usage
journalctl --list-boots
ls /var/log

En los sistemas donde rsyslog no está instalado, puede que no exista el familiar /var/log/syslog. No se rota directamente el archivo binario de journal con logrotate ni se borran archivos a la fuerza. También compruebe si la aplicación escribe en su propio archivo o en el journal junto con la configuración del servicio correspondiente.

Verificación de las condiciones de búsqueda y la creación real de registros

logger -t ubuntu-course-log 'retention-lab-marker'
journalctl -t ubuntu-course-log --since '5 minutes ago' --no-pager
journalctl -b -p warning --no-pager

Compruebe si realmente puede encontrar el nuevo marcador y reduzca el rango de arranque, tiempo, unidad y prioridad según sea necesario. La ausencia de salida puede deberse tanto a un fallo en la generación de registros como a la incompatibilidad de las condiciones de búsqueda, por lo que se investiga por separado. No amplíe innecesariamente los permisos de visualización de todos los registros del sistema a los usuarios normales.

Administrar la política de conservación de journald en un archivo separado

Para probar la política en una VM dedicada, haga una copia de seguridad de la configuración existente y revise un archivo nuevo como /etc/systemd/journald.conf.d/60-lab-retention.conf. Los siguientes valores son un ejemplo en un entorno de práctica pequeño y no reemplazan las normas legales u organizacionales de conservación. Reducir la límites de conservación por debajo de los originales puede eliminar registros antiguos.

[Journal]
Storage=persistent
SystemMaxUse=200M
RuntimeMaxUse=50M
MaxRetentionSec=7day

SystemMaxUse limita los archivos persistentes de /var/log/journal y RuntimeMaxUse, los volátiles de /run/log/journal. MaxRetentionSec=7day establece un máximo temporal; no garantiza conservar siete días si antes se alcanza un límite de espacio. La gestión se realiza por archivos y los activos pueden hacer que el uso observado supere el límite configurado. Después de revisar la política y aplicarla en el momento previsto, compruebe el almacenamiento persistente con journalctl --flush, el uso y un marcador nuevo.

El documento journald.conf explica las condiciones de aplicación del almacenamiento persistente y la capacidad/duración de retención.

Aplicar la configuración del journal y restaurar el estado original

Solo se prueba en una nueva VM dedicada que asegura los registros a conservar en una ubicación independiente. El código abajo se detiene si existen archivos de laboratorio antiguos y no sobrescribe los archivos complementarios de otros administradores. Los 200M·50M·7d mencionados antes son ejemplos de práctica pequeños, y los registros ya eliminados no volverán al restaurar la configuración.

(
set -eu
lab_conf=/etc/systemd/journald.conf.d/60-lab-retention.conf
if sudo test -e "$lab_conf" || sudo test -L "$lab_conf"; then
    printf 'Existing lab file: inspect it instead of overwriting.\n' >&2
    exit 1
fi
backup_dir=$(sudo mktemp -d /root/journal-before-lab.XXXXXX)
sudo cp -a /etc/systemd/journald.conf "$backup_dir/"
if sudo test -d /etc/systemd/journald.conf.d; then
    sudo cp -a /etc/systemd/journald.conf.d "$backup_dir/"
fi
sudo install -d -m 0755 /etc/systemd/journald.conf.d
sudo sh -c 'set -C; cat > "$1"' sh "$lab_conf" <<'EOF'
[Journal]
Storage=persistent
SystemMaxUse=200M
RuntimeMaxUse=50M
MaxRetentionSec=7day
EOF
sudo systemd-analyze cat-config systemd/journald.conf
printf 'Review configuration and backup: %s\n' "$backup_dir"
)

Solo continúe con la siguiente aplicación después de leer los cuatro valores esperados en cat-config y asegurarse de que no hay otras configuraciones que los sobrescriban. Reiniciar el servicio es diferente de borrar los archivos de registro directamente. Se verifica el resultado de Storage=persistent y --flush, así como la retención de registros de marcadores y del historial de reinicio.

sudo systemctl restart systemd-journald.service && sudo journalctl --flush && sudo journalctl --disk-usage
logger -t ubuntu-course-log 'after-retention-change'
sudo journalctl -t ubuntu-course-log --since '5 minutes ago' --no-pager

La restauración se aplicará solo al archivo 60-lab-retention.conf recién creado en esta ocasión. Luego, sin realizar otras ediciones, primero confirme que dicho archivo contiene el contenido actual antes de ejecutar lo siguiente. Dado que no se sobrescribió el archivo existente, al eliminarlo se volverá a la combinación de configuraciones anterior y no se regenerarán los registros antiguos.

sudo rm -- /etc/systemd/journald.conf.d/60-lab-retention.conf && sudo systemctl restart systemd-journald.service && sudo journalctl --flush
sudo systemd-analyze cat-config systemd/journald.conf

Ejecutar logrotate con un archivo de práctica separado

La práctica siguiente requiere logrotate y gzip. Ejecute el bloque completo en Bash como usuario normal y registre la carpeta temporal creada. Usa solo sus datos de ejemplo y un archivo de estado propio, sin procesar la configuración de logrotate del sistema. Las etapas se encadenan con && para detener las posteriores si falla la creación del directorio u otra etapa.

work=$(mktemp -d "$HOME/logrotate-lab.XXXXXX") &&
for i in {1..200}; do printf 'lab line %04d\n' "$i"; done > "$work/app.log" &&
cat > "$work/logrotate.conf" <<EOF &&
"$work/app.log" {
    size 1k
    rotate 2
    compress
    missingok
    notifempty
    create 0600
}
EOF
logrotate -d -s "$work/state" "$work/logrotate.conf" &&
logrotate -s "$work/state" "$work/logrotate.conf" &&
ls -l "$work" &&
printf 'Lab folder: %s\n' "$work"

El modo de depuración de logrotate, -d, muestra el plan sin cambiar los registros ni actualizar el archivo de estado. La segunda ejecución realiza la rotación. Compruebe que existe un app.log nuevo y el archivo app.log.1.gz; lea su contenido con gzip -cd "$work/app.log.1.gz". En una aplicación real, los descriptores abiertos y las acciones postrotate o de recarga requieren el procedimiento específico de esa aplicación.

Verificación de resultados de restauración y conservación

Al terminar, compruebe que se retiró únicamente el archivo complementario creado para el laboratorio, que se aplica la configuración anterior y que los marcadores siguen siendo consultables. Revise por separado el archivo de práctica comprimido. Antes de limpiar sus archivos temporales, confirme la ruta y que solo contiene datos de este ejercicio.

La política de registros debe registrar la capacidad de retención, la duración, los sujetos de acceso, el procesamiento de datos personales y la detección de fallos. Es necesario verificar por separado que el servicio responda correctamente y que la creación, búsqueda y rotación de registros permiten su lectura posterior para no perder los registros operativos.