Hecho con Chinaski

Logs del Sistema y Eventos de Seguridad

Los logs de la aplicación van a stdout/stderr y llegan al journal de systemd; los eventos de alta señal se emiten además como JSON de una línea para ingesta por máquina. Opcionalmente, los eventos más relevantes de seguridad pueden también espejarse a un archivo append-only fuera de la base de datos. Esta página cubre ambas capas más las consideraciones de retención/PII.

Leer el journal

journalctl -u chinaski@<N> -f                         # tail del stream en vivo
journalctl -u chinaski@<N> -o json --since '1 hour ago' | grep -F '"event"'

Las líneas de texto plano [chinaski] … y las líneas JSON estructuradas comparten el stream. El filtro grep aísla el conjunto estructurado.

Los eventos estructurados (JSON)

Eventos documentados y sus niveles/campos:

Evento Nivel Campos
login_success info user, role, ip
login_failure warn user, ip, reason
login_lockout warn ip, wait_seconds
setup_completed info user
build_started info triggered_by
build_finished info/error status, files_written, error_count
webhook_fired info url_host, status_code

Además, un conjunto más amplio de eventos de seguridad se espeja al log externo cuando está configurado (ver abajo).

PII y retención

Los campos ip contienen la dirección IP del cliente que hace la petición, necesaria para la forense de seguridad (correlacionar intentos de login, bloqueos) pero datos personales bajo GDPR/CCPA. El README trae una muestra de política de retención para journald:

# /etc/systemd/journald.conf.d/chinaski.conf
[Journal]
SystemMaxUse=2G          # cap disk use
MaxRetentionSec=30day    # auto-prune after N days

Recarga el journal con systemctl restart systemd-journald. Si los logs se envían a un SIEM externo, aplica allí la misma retención.

Log de seguridad externo

Establecer security log destination (Settings → Security) a una ruta de archivo habilita un segundo canal: los eventos de seguridad de alta señal listados (login success/failure, bloqueo y cuenta suspendida, login SSO, limpiezas de sesiones obsoletas, sondas de honeypot, rate-limiting de registro) se agregan como líneas JSON a ese archivo (creado con modo 0600). El punto es la durabilidad forense: el journal sobrevive a un compromiso de la base de datos SQLite.

Lee este sitio en