quinta-feira, 15 de janeiro de 2026

TRABALHANDO NATIVAMENTE COM LOGS NO LINUX

 


INTRODUÇÃO

A maioria das distribuições Linux (www.vivaolinux.com.br/linux/) já tem um controle nativo dos arquivos de logs, mas ele depende de como o sistema está configurado.

Algum ou outro programa pode instalar seu log em outro lugar que não /var/log ou você mesmo durante a instalação manual pode ter colocado o arquivo de log em outro lugar.

A maioria das distribuições Linux não gera um número fixo de arquivos de log, pois utiliza o diretório centralizado (/var/log) onde o sistema operacional, o kernel e os aplicativos instalados criam seus arquivos e o próprio sistema gerencia isso.

Caso tenha um crescimento exagerado e por "crescimento exagerado" estou falando de coisa de GBs para cima, então é porque tem algum problema no sistema e você terá de identificar qual o problema de o sistema aumentar exageradamente os logs ou um log em específico.

Nas distribuições que tem o Systemd , quem controla logs no Linux hoje é o systemd-journald , no caso, Debian, Arch, Ubuntu, Mint, etc.

Nas distribuições que não tem o Systemd , como, por exemplo, Slackware, Gentoo, Alpine, Void Linux, etc, entra um desses: syslog-ng, rsyslog, busybox, syslogd (sistemas mínimos) e metalog (menos comum), além de outros específicos de cada distribuição.

O logrotate (logs em arquivos texto), comum na esmagadora maioria das distribuições com ou sem
Systemd, cuida de logs como:

/var/log/syslog
/var/log/auth.log
/var/log/apache2/*.log
/var/log/nginx/*.log

O logrotate gira logs (rotate), compacta (.gz), apaga logs antigos, roda automaticamente (cron ou systemd timer), etc. A configuração fica, basicamente, em /etc/logrotate.conf e /etc/logrotate.d/.

Uma boa prática básica para servidor é definir limites no /etc/systemd/journald.conf , por exemplo:

SystemMaxUse=100M
SystemKeepFree=1G

E confiar no logrotate para o resto.

Sem Systemd podemos definir limites em /etc/logrotate.conf:

# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may also be configured here.

Nível do artigo: Básico.

VERIFICANDO E CONFIGURANDO LOGS

Faça o seguinte, primeiro veja quantos arquivos de logs tem no sistema:

$ ls /var/log | wc -l
52

Aqui deu 52 arquivos de logs.

Depois veja o tamanho (em -52 você pode colocar -10, -20, etc, depende de quantos arquivos você quer
visualizar):

$ sudo du -sh /var/log/* | sort -hr | head -52

[sudo] senha para usuario:
309M/var/log/journal
17M/var/log/installer
644K/var/log/chrony
412K/var/log/apt
176K/var/log/wtmp
136K/var/log/dpkg.log.5.gz
120K/var/log/dpkg.log.1
108K/var/log/apache2
96K/var/log/dpkg.log.7.gz
88K/var/log/dpkg.log
80K/var/log/cups
44K/var/log/exim4
36K/var/log/lightdm
32K/var/log/Xorg.0.log.old
32K/var/log/Xorg.0.log
28K/var/log/Xorg.1.log
16K/var/log/dpkg.log.4.gz
12K/var/log/dpkg.log.3.gz
12K/var/log/dpkg.log.2.gz
12K/var/log/aptitude
8,0K/var/log/fontconfig.log
8,0K/var/log/dpkg.log.6.gz
8,0K/var/log/boot.log.7
8,0K/var/log/boot.log.6
8,0K/var/log/boot.log.5
8,0K/var/log/boot.log.4
8,0K/var/log/boot.log.3
8,0K/var/log/boot.log.2
8,0K/var/log/boot.log.1
8,0K/var/log/alternatives.log.7.gz
8,0K/var/log/alternatives.log.5.gz
4,0K/var/log/README
4,0K/var/log/lastlog
4,0K/var/log/aptitude.6.gz
4,0K/var/log/aptitude.5.gz
4,0K/var/log/aptitude.4.gz
4,0K/var/log/aptitude.3.gz
4,0K/var/log/aptitude.2.gz
4,0K/var/log/aptitude.1.gz
4,0K/var/log/alternatives.log.6.gz
4,0K/var/log/alternatives.log.4.gz
4,0K/var/log/alternatives.log.3.gz
4,0K/var/log/alternatives.log.2.gz
4,0K/var/log/alternatives.log.1
4,0K/var/log/alternatives.log
0/var/log/speech-dispatcher
0/var/log/runit
0/var/log/private
0/var/log/faillog
0/var/log/btmp.1
0/var/log/btmp
0/var/log/boot.log

Repare que aqui, no Debian, essa instalação já tem mais de dois anos e nunca fiz controle nenhum dos logs.
O maior log, com 309M, é /var/log/journal e não é grande.

Quer ver todos os logs, pelo menos os do sistema, execute:

$ cd /var/log
$ ls
alternatives.logaptitude.3.gzbtmp.1fontconfig.log
alternatives.log.1aptitude.4.gzchronyinstaller
alternatives.log.2.gzaptitude.5.gzcupsjournal
alternatives.log.3.gzaptitude.6.gzdpkg.loglastlog
alternatives.log.4.gzboot.logdpkg.log.1lightdm
alternatives.log.5.gzboot.log.1dpkg.log.2.gzprivate
alternatives.log.6.gzboot.log.2dpkg.log.3.gzREADME
alternatives.log.7.gzboot.log.3dpkg.log.4.gzrunit
apache2boot.log.4dpkg.log.5.gzspeech-dispatcher
aptboot.log.5dpkg.log.6.gzwtmp
aptitudeboot.log.6dpkg.log.7.gzXorg.0.log
aptitude.1.gzboot.log.7exim4Xorg.0.log.old
aptitude.2.gzbtmpfaillogXorg.1.log

Para ver quanto espaço em disco cada item dentro de /var/log está usando:
$ sudo du -sh /var/log/*

sudo - executa como administrador (necessário porque alguns logs só o root pode ler)
du (disk usage) → calcula o uso de disco
-s (summary) - mostra apenas o total de cada item, sem detalhar subpastas
-h (human-readable) - formata os tamanhos de forma legível (KB, MB, GB)
/var/log/* - todos os arquivos e diretórios dentro de /var/log

Para ver os 10 maiores ordenando do maior para o menor:
$ sudo du -sh /var/log/* | sort -hr | head -n 10

309M/var/log/journal
17M/var/log/installer
644K/var/log/chrony
412K/var/log/apt
176K/var/log/wtmp
136K/var/log/dpkg.log.5.gz
120K/var/log/dpkg.log.1
108K/var/log/apache2
96K/var/log/dpkg.log.7.gz
88K/var/log/dpkg.log

Lembrando que algum ou outro programa pode instalar seu log em outro lugar que não /var/log ou você mesmo durante a instalação manual pode ter colocado o arquivo de log em outro lugar.

A maioria das distribuições Linux, não gera um número fixo de arquivos de log, pois utiliza o diretório centralizado (/var/log) onde o sistema operacional, o kernel e os aplicativos instalados criam seus arquivos e o próprio sistema gerencia isso.

Caso tenha um crescimento exagerado e por "crescimento exagerado" estou falando de coisa de GBs para cima, então é por que tem algum problema no sistema e você terá de identificar qual o problema de o sistema aumentar exageradamente os logs ou um log em específico.

Por exemplo, no meu caso, o maior dos logs é /var/log/journal.

Nesse caso posso editar o arquivo de configuração:

$ sudo vim /etc/systemd/journald.conf

Usei o vim , use teu editor preferido.

Veja as opções abaixo, que nem estão configuradas, mas, por exemplo, em "SystemMaxUse=" podemos definir o tamanho máximo total para os logs (500M para 500MB, 1G para 1GB, etc).

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=0
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#MaxLevelSocket=debug
#LineMax=48K
#ReadKMsg=yes
#Audit=yes

Depois de alterar o arquivo, salve e saia.

Reinicie o serviço:
$ sudo systemctl restart systemd-journald

Para ver quanto ele está usando:
$ journalctl --disk-usage
Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
Archived and active journals take up 59.5M in the file system.

Diz que está usando 59.5M, porém, com o comando "du" mostra 309M.

É que o comando "journalctl --disk-usage" mostra apenas o espaço que o journald considera válido e utilizável, enquanto que o comando "du" soma todo o espaço ocupado no disco pelo diretório incluindo arquivos .journal ativos, arquivos arquivados, arquivos já marcados como deletados mas ainda abertos pelo systemd-journald e overhead do filesystem (blocos alocados), etc.
O journalctl mostra o uso lógico, não o físico.

Reiniciando o journald, os valores ficarão praticamente iguais:
$ sudo systemctl restart systemd-journald

$ sudo du -sh /var/log/journal
309M /var/log/journal

$ sudo journalctl --disk-usage
Archived and active journals take up 308.4M in the file system.

$ journalctl --disk-usage
Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
Archived and active journals take up 59.5M in the file system.

Veja que o comando journalctl com sudo mostra um valor (308.4M) e sem sudo mostra 59.5M.
Na saída sem o sudo está a explicação dizendo que não estamos vendo as mensagens dos outro usuários e do sistema. Para ver todo o tamanho é só usar sudo.

Para reduzir o tamanho para 100M:
$ sudo journalctl --vacuum-size=100M

Ou só últimos 7 dias:
$ sudo journalctl --vacuum-time=7d

Para mais opções:
$ man journalctl


CONFIGURANDO LOGS

Também pode configurar alguns logs do sistema em logrotate.d .
Vá em /etc/logrotate.d/ e edite os arquivos (apache2, aptitude, etc).

$ cd /etc/logrotate.d
$ ls
alternatives  aptitude  chrony       exim4-base      sane-utils         wtmpdb
apache2       bootlog   cups-daemon  exim4-paniclog  speech-dispatcher
apt           btmp      dpkg         ppp             wtmp


Por exemplos:

$ sudo vim aptitude
/var/log/aptitude {
rotate 6
monthly
compress
missingok
notifempty
}

$ sudo vim apt
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}

/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}

$ sudo vim apache2
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then
run-parts /etc/logrotate.d/httpd-prerotate
fi
endscript
postrotate
if pgrep -f ^/usr/sbin/apache2 > /dev/null; then
invoke-rc.d apache2 reload 2>&1 | logger -t
apache2.logrotate
fi
endscript
}

Dependendo do log, tem diferenças entre as opções, mas, basicamente, são as mesmas.
Abaixo temos algumas indicações das opções:

    daily          # Rotação diária
    monthly	   # Rotação mensal
    rotate 7       # Mantém 7 arquivos antigos
    compress       # Comprime logs antigos (gzip)
    delaycompress  # Comprime o arquivo anterior
    missingok      # Não gera erro se o arquivo não existir
    notifempty     # Não rotaciona se vazio
    size 100M      # (Opcional) Rotaciona se o arquivo atingir 100MB


CONCLUSÃO

A maioria das distribuições Linux já tem um controle nativo dos arquivos de logs, mas ele depende de como o sistema está configurado.

Nas distribuições que tem o Systemd , quem controla logs no Linux hoje é o systemd-journald , no caso, Debian, Arch, Ubuntu, Mint, etc.

Nas distribuições que não tem o systemd, como, por exemplo, Slackware, Gentoo, Alpine, Void Linux, etc, entra um desses: syslog-ng, rsyslog, busybox, syslogd (sistemas mínimos) e metalog (menos comum), além de outros específicos de cada distribuição.

O logrotate (logs em arquivos texto), comum na esmagadora maioria das distribuições com ou sem systemd, cuida de logs como:

/var/log/syslog
/var/log/auth.log
/var/log/apache2/*.log
/var/log/nginx/*.log

O logrotate gira logs (rotate), compacta (.gz), apaga logs antigos, roda automaticamente (cron ou systemd timer), etc. A configuração fica, basicamente, em /etc/logrotate.conf e /etc/logrotate.d/ .

Pessoalmente, só acredito ser necessário alterar configurações dos logs caso for um servidor que lida com grandes cargas de dados, então se faz necessário configurar os logs para ter um melhor controle.

Caso for desktop, somente se faz necessário alterar essas configurações caso tenha algum programa específico que gere logs muitos grandes, senão não altere, deixe tudo no padrão e não se preocupe com isso, apenas monitore de vez em quando para ver se não tem algum problema.

Quando tiver um crescimento exagerado dos logs então é porque tem algum problema sério no sistema e você deverá identificá-lo e corrigi-lo.

Nenhum comentário:

Postar um comentário