Logs do Sistema e Eventos de Segurança
Os logs da aplicação vão para stdout/stderr e caem no journal do systemd; eventos de alto sinal são adicionalmente emitidos como JSON de uma linha para ingestão por máquina. Opcionalmente, os eventos mais relevantes de segurança também podem ser espelhados em um arquivo append-only fora do banco de dados. Esta página cobre ambas as camadas mais as considerações de retenção/PII.
Lendo o journal
journalctl -u chinaski@<N> -f # siga o stream ao vivo
journalctl -u chinaski@<N> -o json --since '1 hour ago' | grep -F '"event"'Linhas em texto simples [chinaski] … e linhas JSON estruturadas compartilham o stream (o filtro grep isola o conjunto estruturado.)
Os eventos estruturados (JSON)
Eventos documentados e seus níveis/campos:
| Evento | Nível | 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 |
Além disso, um conjunto mais amplo de eventos de segurança é espelhado no log externo quando configurado (veja abaixo).
PII e retenção
Os campos ip contêm o endereço IP do cliente requisitante, necessário para forense de segurança (correlacionar tentativas de login, bloqueios) mas dados pessoais sob GDPR/CCPA. O README embarca uma amostra de política de retenção para o journald:
# /etc/systemd/journald.conf.d/chinaski.conf
[Journal]
SystemMaxUse=2G # teto no uso de disco
MaxRetentionSec=30day # poda automática após N diasRecarregue o journal com systemctl restart systemd-journald. Se os logs vão para um SIEM externo, aplique retenção equivalente lá.
Log de segurança externo
Definir o security log destination (Settings → Security) para um caminho de arquivo habilita um segundo canal: os eventos de segurança de alto sinal listados (login com sucesso/falha, bloqueio e conta suspensa, login SSO, limpezas de sessão obsoleta, sondagens de honeypot, rate limit de registro) são anexados como linhas JSON àquele arquivo (criado com modo 0600). O objetivo é a durabilidade da forense: o journal sobrevive a um comprometimento do banco de dados SQLite.