Atualizado: 24/10/2024

rsyslog - Linux

Uma das características notáveis do Linux é a abundante criação de logs para diversas ações realizadas no sistema. Um dos principais componentes responsáveis pelo log no Linux é o processo rsyslog. Este processo é configurado para monitorar o que está acontecendo no computador, geralmente registrando as ações em arquivos na pasta /var/log. Se examinarmos essa pasta, veremos vários arquivos e diretórios usados para log:

programicio@Programicio:~$ ls -l /var/log
total 49200
-rw-r--r--  1 root              root                5267 Mar 20 11:22 alternatives.log
drwxr-x---  2 root              adm                 4096 Mar 21 07:08 apache2
-rw-r-----  1 root              adm                  426 Mar 21 07:08 apport.log
drwxr-xr-x  2 root              root                4096 Mar 20 11:22 apt
-rw-r-----  1 syslog            adm               141654 Mar 21 09:17 auth.log
...
-rw-rw-r--  1 root              utmp              187008 Mar 21 07:09 wtmp

O conteúdo específico pode variar dependendo do sistema e do software instalado. No entanto, podemos destacar principalmente o arquivo syslog (ou log do sistema), que registra os eventos principais do sistema.

Além do processo rsyslog, outros processos também podem gravar logs nesta pasta. Por exemplo, o servidor web Apache grava suas mensagens em uma pasta específica aqui. Como o rsyslog é o principal processo responsável pelo log no sistema, sua configuração é de grande importância, pois permite definir vários aspectos do log.

O arquivo principal de configuração do rsyslog é /etc/rsyslog.conf. Além deste arquivo, a configuração é complementada pelos arquivos do diretório /etc/rsyslog.d. O conteúdo desses arquivos é adicionado à configuração especificada em /etc/rsyslog.conf, permitindo que pacotes RPM ou Debian expandam a configuração sem alterar o conteúdo do arquivo /etc/rsyslog.conf.

Vamos examinar como é a configuração em /etc/rsyslog.conf:

programicio@Programicio:~$ cat /etc/rsyslog.conf
# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf


#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")

###########################
#### GLOBAL DIRECTIVES ####
###########################

# Filter duplicated messages
$RepeatedMsgReduction on

#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

A estrutura do arquivo consiste principalmente de dois componentes: módulos e diretivas globais. No final do arquivo, podemos ver a diretiva:

$IncludeConfig /etc/rsyslog.d/*.conf

Ela inclui o conteúdo dos arquivos com extensão .conf do diretório /etc/rsyslog.d/. Nesse diretório, podemos encontrar o arquivo 50-default.conf.

O arquivo 50-default.conf define as regras básicas de log para o rsyslog. Vamos verificar o conteúdo desse arquivo. No meu caso, ele é assim:

programicio@Programicio:~$ cat /etc/rsyslog.d/50-default.conf
#  Default rules for rsyslog.
#
#			For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none		-/var/log/syslog
#cron.*				/var/log/cron.log
#daemon.*			-/var/log/daemon.log
kern.*				-/var/log/kern.log
#lpr.*				-/var/log/lpr.log
mail.*				-/var/log/mail.log
#user.*				-/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info			-/var/log/mail.info
#mail.warn			-/var/log/mail.warn
mail.err			/var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#	auth,authpriv.none;\
#	news.none;mail.none	-/var/log/debug
#*.=info;*.=notice;*.=warn;\
#	auth,authpriv.none;\
#	cron,daemon.none;\
#	mail,news.none		-/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg				:omusrmsg:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#	news.=crit;news.=err;news.=notice;\
#	*.=debug;*.=info;\
#	*.=notice;*.=warn	/dev/tty8

Regras de Log

As regras determinam onde os logs serão registrados para um determinado objeto (facility). Em particular, é possível estabelecer regras para os seguintes objetos:

  • auth: Processa eventos relacionados à autenticação.

  • authpriv: Similar ao auth, também processa eventos de autenticação.

  • cron: Processa mensagens criadas pelo subsistema cron.

  • daemon: Registra mensagens criadas por um daemon (serviço).

  • kern: Registra mensagens relacionadas ao kernel, incluindo aquelas geradas pelo firewall do kernel (iptables).

  • lpr: Registra mensagens relacionadas ao sistema de impressão obsoleto lpr.

  • mail: Registra mensagens relacionadas ao serviço de correio.

  • news: Registra mensagens relacionadas ao protocolo NNTP (protocolo de notícias da rede).

  • user: Registra mensagens relacionadas ao usuário.

Prioridades

Ao registrar logs, os objetos criam mensagens com uma prioridade definida. Se uma prioridade for especificada, todas as mensagens com essa prioridade e com prioridades mais altas são registradas no arquivo de log indicado. No rsyslog, são usadas as seguintes prioridades (em ordem crescente):

  • debug: Informação de depuração, fornece detalhes sobre tudo o que o objeto faz, como chamadas de sistema e bibliotecas executadas.

  • info: Informação padrão sobre o que o processo está fazendo, como arquivos abertos, sem detalhes de chamadas de sistema e bibliotecas.

  • notice: Informação sobre erros não críticos, como a criação automática de um arquivo ausente.

  • warn (forma obsoleta: warning): Informação sobre advertências durante a execução do processo, indicando que a funcionalidade normal foi interrompida, mas o objeto continua a funcionar.

  • err (forma obsoleta: error): Informação sobre erros que afetam o funcionamento normal do objeto.

  • crit: Informação sobre situações críticas que ameaçam o funcionamento normal do computador.

  • alert: Informação sobre situações que podem levar à interrupção do computador.

  • emerg (forma obsoleta: panic): Indica a cessação do funcionamento normal do computador.

Para configurar o log no arquivo de configuração, combina-se o objeto com a prioridade no formato:

objeto.prioridade

A prioridade mencionada também inclui todas as prioridades mais altas. Por exemplo:

kern.info

Essa entrada se refere a mensagens informativas e a mensagens com prioridade mais alta geradas pelo kernel.

Pode-se especificar vários objetos em uma linha, separados por vírgula. Por exemplo, a entrada a seguir se refere a mensagens informativas tanto do kernel quanto do processo cron:

kern,cron.info

Como alternativa, pode-se referir a todos os objetos usando um asterisco, como no exemplo a seguir:

*.crit

Especificar uma prioridade por padrão também inclui o registro de prioridades mais altas. No entanto, se for necessário definir uma regra de log apenas para uma prioridade específica, sem incluir mensagens de prioridades mais altas, usa-se o sinal de igual:

mail.=info

Nesse caso, são registradas mensagens informativas relacionadas ao correio, mas mensagens com prioridades mais altas não são registradas.

Também é possível usar o operador de exclusão para a prioridade e para cada prioridade superior, colocando um ponto de exclamação antes do nome da prioridade:

mail.!info

Arquivos de Log

Quando ocorre um evento, uma ação é executada sobre ele. Normalmente, essa ação significa que a mensagem é enviada para algum lugar. O arquivo de configuração permite definir o local de log para várias combinações de objetos e prioridades. Geralmente, os locais de log são arquivos. Ao especificar o nome de um arquivo, as mensagens são registradas nesse arquivo, cujo nome é fornecido como um caminho absoluto. Para que cada mensagem não seja registrada imediatamente no arquivo, pode-se colocar um sinal de menos - antes do nome do arquivo. Isso indica que as alterações são primeiro armazenadas em buffer antes de serem gravadas no arquivo real. Por exemplo:

kern.*				-/var/log/kern.log

Nesse caso, todas as mensagens (de todas as prioridades) relacionadas ao kernel são registradas no arquivo /var/log/kern.log com bufferização prévia.

O ponto e vírgula ; é usado como separador, e a barra invertida \ garante que a próxima parte seja interpretada como pertencente à mesma linha:

#*.=debug;\
#	auth,authpriv.none;\
#	news.none;mail.none	-/var/log/debug

Ou, por exemplo, no arquivo de configuração há uma linha assim:

*.*;auth,authpriv.none		-/var/log/syslog

A expressão *.* indica todos os objetos e todas as prioridades. Mas então auth,authpriv.none é adicionado. Isso significa que o log para o objeto auth/authpriv é excluído dessa regra. Assim, os eventos para todos os objetos, exceto auth/authpriv (e todas as prioridades), são registrados com bufferização prévia no arquivo /var/log/syslog. Portanto, ao abrir esse arquivo, encontraremos a maioria dos eventos do sistema.

Comando logger

O comando logger permite enviar mensagens para o rsyslog. Isso possibilita seu uso para registrar logs em scripts onde o log padrão não está disponível. Para registrar uma mensagem, basta passar a mensagem como uma string para o comando:

logger hello www.programicio.com

Após isso, no arquivo /var/log/syslog, aparecerá uma linha semelhante a esta:

2024-03-21T09:01:15.794001+03:00 Programicio programicio: hello www.programicio.com

Ao usar o comando logger, a mensagem de log pode ser marcada com uma tag específica. Isso facilita a identificação dessas mensagens posteriormente. Para isso, utiliza-se o parâmetro -t. Por exemplo, o comando:

logger -t hello hi  www.programicio.com

marcará a mensagem "hi www.programicio.com" no arquivo syslog com a tag hello, facilitando a busca de mensagens adicionadas com o logger. Por exemplo, a linha no syslog será algo como:

2024-03-21T09:09:03.924923+03:00 Programicio hello: hi  www.programicio.com
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com