Por que os arquivos de log do journald são tão grandes?

Por que os arquivos de log do journald são tão grandes?

Quando eu faço journalctl --disk-usageisso diz algo sobre300MBtamanho dos arquivos do diário, mas quando olho para o texto real, é journalctl | wc -calgo sobre28 MB. Bem, o journald tem compactação e mesmo considerando os metadados como carimbo de data / hora, uid, hash de mensagem e coisas assim, me parece um desperdício ridículo de espaço em disco.

Alguém pode me dizer por que os arquivos do diário são tão grandes em comparação com o texto real dentro dele?

Responder1

Existem duas razões. Primeiro, como @Mella mencionou, há uma diferença entre o log atual e todos os logs.

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

journactl --output=verbose

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

Consulte man journald.confpara saber como limitar a quantidade de espaço em disco journaldusado se você estiver preocupado.

Responder2

  1. Eles são enormes, porque é uma espécie de bug:

Como está indicadorio acimae, portanto, conhecido pelos desenvolvedores do journald, o formato de log binário usado não é nada bom (ainda?).

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

Também existe uma opção em /etc/systemd/journald.confnomeado Compress=yes, que pode não estar ativa em seu sistema, de modo que efetivamente não há compactação.

  1. A questão dos periódicos arquivados não importa aqui.

Embora em princípio seja verdade que o Journald distingue entreativoearquivadologs de diário, esta é uma resposta enganosa das outras respostas, pois man journalctlafirma inequivocamente:

A saída é intercalada de todos os arquivos de diário acessíveis, estejam eles rotacionados ou sendo gravados no momento, e independentemente de pertencerem ao próprio sistema ou serem diários de usuário acessíveis.

A outra resposta é, portanto, enganosa aqui.

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

"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 tamanhos de arquivo múltiplos de 8 MiB. Como consequência, meu arquivo de diário do sistema terá 8 MiB de tamanho, mesmo quando apenas uma fração (como em um caso, 56 KiB) de dados estiver realmente armazenada nele.

"problema anticorrupção" De acordo com Poettering, um dos desenvolvedores journalde systemdno caso de um periódico ser considerado corrompido por journald, ele não será "consertado", mas deixado como está, para evitar mais problemas. (verhttps://bugs.freedesktop.org/show_bug.cgi?id=64116#c3)

É claro que isso significa que há uma boa chance de que arquivos de log binário de diário descompactados e quase vazios fiquem espalhados em seu log var, tornando-o efetivamente muito maior do que uma alternativa sensata de texto simples.

Responder3

journalctlsem parâmetros (cuja saída você está medindo wc -c) está exibindo apenas lançamentos no diário ativo (não tenho certeza do que gera uma rotatividade). journalctl --disk-usageestá exibindo o espaço usado pelos diários arquivados, bem como pelo diário ativo.

informação relacionada