quarta-feira, 25 de março de 2015

Um concentrador de logs

O journald atua como um concentrador de logs de todos os daemons do sistema, independente de usarem arquivos unit nativos ou init scripts. Ver Log de erros.

+----------+  +----------+  +----------+
|          |  |          |  |          |
| DAEMON 1 |  | DAEMON 2 |  | DAEMON 3 | ...
|          |  |          |  |          |
+----------+  +----------+  +----------+
        \           |          /
         \          |         /    stdout/stderr
          \         |        /     syslog()
           \        |       /      sd_journal_*()
            v       v      v
          +------------------+
          |                  |
          | systemd-journald |---> /var/log/journal/<machine-id> 
          |                  |
          +------------------+
                   |
                   v
             +------------+
             | rsyslog,   |
             | syslog-ng, |------> /var/log/messages, etc
             | etc        |
             +------------+

Não pode ser desativado, pois é um componente fundamental. Quem prefere os tradicionais arquivos de log, não precisa ficar consternado. Tendo uma implementação syslog instalada (rsyslog é o mais usado), faz o journald automaticamente repassar as mensagens para ela. Se a sua distribuição habilitar o journal persistente, existirão logs salvos em dois lugares. Eu não acho uma boa. Prefiro que apenas um daemon armazene as mensagens no disco.

Na configuração padrão (Storage=auto em /etc/systemd/journald.conf), a existência da pasta /var/log/journal é que determina o armazenamento ou não do journal — Storage=persistent, por outro lado, automaticamente cria a pasta quando necessário, sempre armazenando-o, portanto. Quando a pasta não existe, atua como Storage=volatile (a seguir). Então caso sua distribuição habilite o journal persistente (seja criando a pasta ou alterando a opção) e você instalou o rsyslog e quer evitar escrita em excesso no disco, descomente-a, coloque Storage=volatile e reinicie o serviço (systemctl restart systemd-journald.service). volatile mantém um log circular em /run/log/journal (runtime journal), que é muito útil mesmo com um daemon syslog presente (para a saída de systemctl status, por exemplo), e não acarreta em escritas no disco (/run é tmpfs). Storage=none, por fim, desativa qualquer armazenamento das mensagens e faz o journald apenas repassá-las para o deamon syslog e nada mais. Como de costume: man journald.conf.

[Atualização - 05/04/2015] A partir da versão 216, ele não repassa mais automaticamente, pois o rsyslog possui um módulo (imjournal) que lê as mensagens diretamente do journal usando sua API. Se o seu daemon syslog não tiver esse recurso (aparentemente o syslog-ng não tem), é possível voltar ao comportamento antigo com ForwardToSyslog=yes.

[Atualização - 24/05/2015] Cabe esclarecer que se for configurado ForwardToSyslog=no e o módulo imjournal do rsyslog (ou outro código qualquer que obtenha as mensagens usando a API) for usado, Storage= não pode ser none. A documentação foi atualizada na versão 220.

Nenhum comentário:

Postar um comentário