Como visualizar logs do journalctl mais antigos (talvez após uma rotação?)

23

Estou executando o docker no ubuntu 16.04 e gostaria de visualizar os logs. No entanto, não consigo visualizar os logs depois do que acho que seja algum tipo de rotação ou os logs aumentam para um determinado tamanho.

Eu não fiz nenhuma alteração no meu journald.conf, então estou usando os padrões lá.

Exemplos do que estou vendo:

systemctl docker statusconfirma que o serviço está ativo since Thu 2016-10-13 18:56:28 UTC.

No entanto, quando executo algo como journalctl -u docker.service --until "2016-10-13 22:00"- a única saída que recebo é -- Logs begin at Fri 2016-10-14 01:18:49 UTC, end at Fri 2016-10-14 16:18:25 UTC. --que posso visualizar os logs nesse intervalo conforme o esperado.

Minha pergunta é: por que não consigo visualizar logs mais antigos com o journalctl e como posso corrigir esse problema para poder visualizar os logs?

jdf
fonte

Respostas:

15

Pode ser porque você está tentando revisar o diário desde a última inicialização, o que parece provável em uma imagem do docker.

No Ubuntu 16.04, o armazenamento do diário é padrão na memória. Você pode alterar o padrão para ser persistente, abrindo /etc/systemd/journald.confe alterando a Storage=linha de autopara persistent. Pode ser necessário reiniciar o journald systemctl restart systemd-journaldapós a edição do arquivo de configuração.

Eu acho que o diário deve ser persistente por padrão , então eu abri um bug sobre isso.

Mark Stosberg
fonte
Concordo com você, que deve ser persistente por padrão (e alterará essa configuração), mas estou certo de que esta máquina não foi reinicializada, por isso não estou 100% convencido de que sozinho resolva meu problema. Ainda bem que você registrou esse problema.
Jdf #
Sob certas condições, os logs podem pousar no diário com metadados incompletos, para que possam ser encontrados ao revisar a journalctlsaída completa, mas não os logs da unidade. Sabe-se que isso ocorre com problemas de logs pouco antes de uma unidade ser desligada. Os logs são enviados para journald e, em seguida, journald emite uma consulta para os metadados. Às vezes, entretanto, o processo existe. No entanto, isso também não parece adequado para o seu caso.
Mark Stosberg
3

A razão pela qual isso acontece é devido aos padrões do tamanho dos arquivos de diário armazenados. Há mais detalhes sobre isso nos documentos . Vale a pena ler a seção inteira à qual vinculei, mas os padrões funcionam assim:

journald will use 10% of the disk or 4G, whichever is smaller.

journald will leave free 15% of the disk or 4G, whichever is larger.

Para visualizar logs da última inicialização, supondo que você tenha Storage=persistentno journald.conf, como a outra resposta observa, você pode usar o --boot=-1sinalizador nos journalctlcomandos para obter logs apenas da inicialização anterior.

No caso do OP em que eles tinham certeza de que o host não havia sido reinicializado, a perda de logs foi causada simplesmente pelos padrões SystemMaxUsee / ou SystemKeepFree.

Nota: Eu sou o OP e essa pergunta ainda tem votos positivos subindo, então, como adquiri mais experiência com o journald (e o rtfm), estou postando isso aqui na esperança de ajudar outros.

jdf
fonte