Daemon de log do sistema

O Daemon de log simplesmente é um programa que registra as saída de logs do kernel e sistema. No Linux o daemon mais usado é o syslogd.

A classificação de qual arquivo em /var/log receberá qual tipo de mensagem é controlado pelo arquivo de configuração /etc/rsyslog.conf através de facilidades e níveis (veja “Arquivo de configuração rsyslog.conf para detalhes).

rsyslogd

Este daemon controla o registro de logs do sistema.

rsyslogd [opções]

opções, -f

Especifica um arquivo de configuração alternativo ao /etc/rsyslog.conf.

-h

Permite redirecionar mensagens recebidas a outros servidores de logs especificados.

-n

Evita que o processo caia automaticamente em background. Necessário principalmente se o syslogd for controlado pelo init.

-d

Ativa o modo de depuração do syslog. O syslog permanecerá operando em primeiro plano e mostrará as mensagens no terminal atual.

Na distribuição Debian, o daemon syslogd é iniciado através do script /etc/init.d/sysklogd.

Arquivo de configuração rsyslog.conf

O arquivo de configuração /etc/rsyslog.conf possui o seguinte formato:

facilidade.nível                    destino

A facilidade e nível são separadas por um "." e contém parâmetros que definem o que será registrado nos arquivos de log do sistema:

  • facilidade - É usada para especificar que tipo de programa está enviando a mensagem. Os seguintes níveis são permitidos (em ordem alfabética):

    • auth - Mensagens de segurança/autorização (é recomendável usar authpriv ao invés deste).

    • authpriv - Mensagens de segurança/autorização (privativas).

    • cron - Daemons de agendamento (cron e at).

    • daemon - Outros daemons do sistema que não possuem facilidades específicas.

    • ftp - Daemon de ftp do sistema.

    • kern - Mensagens do kernel.

    • lpr - Subsistema de impressão.

    • local0 a local7 - Reservados para uso local.

    • mail - Subsistema de e-mail.

    • news - Subsistema de notícias da USENET.

    • security - Sinônimo para a facilidade auth (evite usa-la).

    • syslog - Mensagens internas geradas pelo syslogd.

    • user - Mensagens genéricas de nível do usuário.

    • uucp - Subsistema de UUCP.

    • * - Confere com todas as facilidades.

    Mais de uma facilidade pode ser especificada na mesma linha do rsyslog.conf separando-as com ",".

  • nível - Especifica a importância da mensagem. Os seguintes níveis são permitidos (em ordem de importância invertida; da mais para a menos importante):

    • emerg - O sistema está inutilizável.

    • alert - Uma ação deve ser tomada imediatamente para resolver o problema.

    • crit - Condições críticas.

    • err - Condições de erro.

    • warning - Condições de alerta.

    • notice - Condição normal, mas significante.

    • info - Mensagens informativas.

    • debug - Mensagens de depuração.

    • * - Confere com todos os níveis.

    • none - Nenhuma prioridade.

    Além destes níveis os seguintes sinônimos estão disponíveis:

    • error - Sinônimo para o nível err.

    • panic - Sinônimo para o nível emerg.

    • warn - Sinônimo para o nível warning.

  • destino - O destino das mensagens pode ser um arquivo, um pipe (se iniciado por um "|"), um computador remoto (se iniciado por uma "@"), determinados usuários do sistema (especificando os logins separados por vírgula) ou para todos os usuários logados via wall (usando "*").

Todas as mensagens com o nível especificado e superiores a esta especificadas no rsyslog.conf serão registradas, de acordo com as opções usadas. Conjuntos de facilidades e níveis podem ser agrupadas separando-as por ";".

OBS1: Sempre use TABS ao invés de espaços para separar os parâmetros do rsyslog.conf.

OBS2: Algumas facilidades como security, emitem um beep de alerta no sistema e enviam uma mensagem para o console, como forma de alerta ao administrador e usuários logados no sistema.

Existem ainda 4 caracteres que garantes funções especiais: "*", "=", "!" e "-":

  • "*" - Todas as mensagens da facilidade especificada serão redirecionadas.

  • "=" - Somente o nível especificado será registrado.

  • "!" - Todos os níveis especificados e maiores NÃO serão registrados.

  • "-" - Pode ser usado para desativar o sync imediato do arquivo após sua gravação.

Os caracteres especiais "=" e "!" podem ser combinados em uma mesma regra.

Exemplo: Veja abaixo um exemplo de um arquivo /etc/rsyslog.conf padrão de sistemas Debian

# /etc/rsyslog.conf arquivo de configuração do rsyslog
#
# Para mais detalhes, instale o rsyslog-doc e veja o arquivo
# /usr/share/doc/rsyslog-doc/html/configuration/index.html


#################
#### MODULOS ####
#################

module(load="imuxsock") # fornece suporte para log local do sistema
module(load="imklog")   # fornece suprote a log do kernel (antigo ulogd)
#module(load="immark")  # fornece recurso de colocação da mensagem --MARK-- 

# fornece suporte a recebimento de mensagens do UDP
#module(load="imudp")
#input(type="imudp" port="514")

# fornece suporte a recebimento de mensagens TCP
#module(load="imtcp")
#input(type="imtcp" port="514")


###########################
#### DIRETIVAS GLOBAIS ####
###########################

#
# Usar o formato tradicional de timestamps.
# Para ativar a precisão de timestamps, comente a seguinte linha.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

#
# Configura as permissões padrões para todos os arquivos de log
#
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

#
# Onde devem ser colocados os arquivos de spool e estado
#
$WorkDirectory /var/spool/rsyslog

#
# Inclui todos os arquivos de configuração que existirem em /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
#
# Primeiro alguns arquivos de log padrões. Registrados por facilidade
#

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
uucp.*                          -/var/log/uucp.log

#
# Registro de logs do sistema de mensagens. Divididos para facilitar
# a criação de scripts para manipular estes arquivos.
#
mail.info                       -/var/log/mail.info
mail.warn                       -/var/log/mail.warn
mail.err                        /var/log/mail.err

# Registro para o sistema de news INN
#
news.crit                       /var/log/news/news.crit
news.err                        /var/log/news/news.err
news.notice                     -/var/log/news/news.notice

#
# Alguns arquivos de registro "pega-tudo".
# São usadas "," para especificar mais de uma prioridade (por 
# exemplo, "auth,authpriv.none") e ";" para especificar mais de uma 
# facilidade.nível que será gravada naquele arquivo.
# Isto permite deixar as regras consideravelmente menores e mais legíveis
#
*.=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

#
# Emergências são enviadas para qualquer um que estiver logado no sistema. Isto
# é feito através da especificação do "*" como destino das mensagens e são
# enviadas através do comando wall.
#
*.emerg                         *

#
# Eu gosto de ter mensagens mostradas no console, mas somente em consoles que 
# não utilizo.
#
#daemon,mail.*;\
#       news.=crit;news.=err;news.=notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       /dev/tty8

# O pipe /dev/xconsole é usado pelo utilitário "xconsole". Para usa-lo,
# você deve executar o "xconsole" com a opção "-file":
# 
#    $ xconsole -file /dev/xconsole [...]
#
# NOTA: ajuste as regras abaixo, ou ficará maluco se tiver um site 
# muito movimentado...
#
daemon.*;mail.*;\
        news.crit;news.err;news.notice;\
        *.=debug;*.=info;\
        *.=notice;*.=warn       |/dev/xconsole

# A linha baixo envia mensagens importantes para o console em que 
# estamos trabalhando logados (principalmente para quem gosta de ter 
# controle total sobre o que está acontecendo com seu sistema).
*.err;kern.debug;auth.notice;mail.crit	/dev/console