Por que logfiles journald são tão grandes?

2

Quando eu faço um journalctl --disk-usage , ele diz algo sobre o tamanho 300MB dos arquivos de diário, mas quando eu olho para o texto real com journalctl | wc -c é algo sobre 28MB . Bem, journald tem compressão e até considerando os metadados como timestamp, uid, hash de mensagens e coisas parecidas, isso me parece um desperdício ridículo de espaço em disco.

Alguém pode me dizer por que os arquivos de diário são tão grandes se comparados ao texto em si?

    
por Smith_33 26.02.2018 / 18:16

3 respostas

3

Existem dois motivos. Primeiro, como mencionado por @Mella, há a diferença entre o registro atual e todos os registros.

Segundo, conforme documentado em man journalctl , há vários formatos de saída. Você estava medindo o tamanho do mais compacto / menos detalhado. Para ver os dados máximos no diário do systemd, use:

journactl --output=verbose

No meu caso, a saída compacta do diário retorna 32 Megas de dados, enquanto 128 MB são retornados com --output=verbose e 152 M são encontrados com journalctl --disk-usage , cobrindo os diários ativos e arquivados.

Veja man journald.conf para saber como limitar a quantidade de espaço em disco journald se você estiver preocupado.

    
por 26.02.2018 / 20:48
2
  1. Eles são enormes, porque é um tipo de bug:

Como é indicado upstream e, portanto, conhecido pelos desenvolvedores do journald, o usado no formato de log binário não é nada demais (ainda?).

  1. Eles são enormes, porque talvez a Compressão não esteja ativada

Há também uma opção em /etc/systemd/journald.conf com o nome Compress=yes , que pode não estar ativa em seu sistema, para que não haja compactação efetiva.

  1. A questão dos diários arquivados não importa aqui.

Embora, em princípio, seja verdade que journald distingue entre logs de diário ativos e arquivados , esta é uma resposta enganosa das outras respostas, como em man journalctl afirma inequivocamente:

Output is interleaved from all accessible journal files, whether they are rotated or currently being written, and regardless of whether they belong to the system itself or are accessible user journals.

A outra resposta é, portanto, enganosa aqui.

  1. O uso de disco do journalctl é enorme (ou seja, maior que os arquivos de texto simples com nível de informações comparável - ou seja, campos) devido a algumas alocações de arquivos, fragmentação e medidas anticorrupção.

"problemas de fragmentação / alocação de arquivos"

Na minha caixa, journalctl --version == "systemd 239[...]" os arquivos de diário que contêm os dados existem em filesizes, sendo um múltiplo de 8MiB. Como consequência, no meu arquivo de diário do sistema, será 8MiB grande mesmo quando apenas uma fração (como em um caso 56kiB) de dados estiver realmente armazenada nele.

"problema anti-corrupção" De acordo com Poettering, um dos desenvolvedores de journald e systemd em um caso em que uma revista é considerada corrompida por journald , ela não será "consertada", mas deixada como está, para evitar problemas futuros. (veja link )

Isso, é claro, significa que há uma boa chance de que arquivos de log binários descompactados, quase vazios, sejam armazenados no seu log de log, tornando-o efetivamente muito mais interessante do que uma alternativa sã de texto plano.

    
por 13.08.2018 / 13:57
0

journalctl sem parâmetros (cuja saída você está medindo com wc -c ) está exibindo apenas entradas de diário no diário ativo (não sei ao certo o que solicita um volume de negócios). journalctl --disk-usage está exibindo o espaço usado pelos diários arquivados, bem como o diário ativo.

    
por 26.02.2018 / 18:29