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 daysRecarga 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.