Servidor de Log · 8 min read · Nov 15, 2025

Instalar um Servidor de Log Centralizado com Rsyslog no Debian 9

No Linux, os arquivos de log são arquivos que contêm mensagens sobre as funções do sistema, que são usados pelos administradores de sistema para identificar eventuais problemas nas máquinas. Os logs ajudam os administradores a visualizar os eventos que ocorreram no sistema ao longo do tempo. Normalmente, todos os arquivos de log são mantidos no diretório /var/log no Linux. Neste local, existem vários tipos de arquivos de log para armazenar várias mensagens, como um arquivo de log para registrar eventos do sistema, um arquivo de log para mensagens relacionadas à segurança, outros arquivos de log dedicados ao kernel, usuários ou tarefas cron. O principal objetivo dos arquivos de log é solucionar problemas do sistema. A maioria dos arquivos de log no Linux é controlada pelo serviço rsyslogd. Nas versões mais recentes das distribuições Linux, os arquivos de log também são controlados e gerenciados pelo serviço de sistema journald, que é parte do programa de inicialização systemd. Os logs armazenados pelo daemon do journal são escritos em um formato binário e são principalmente voláteis, armazenados na RAM e em um buffer circular em /run/log/journal/. No entanto, o serviço de journal também pode ser configurado para armazenar permanentemente as mensagens Syslog.

No Linux, o servidor rsyslog pode ser configurado para executar um gerenciador de log central, em um modelo de cliente-servidor, e enviar mensagens de log pela rede via protocolos de transporte TCP ou UDP ou receber logs de dispositivos de rede, servidores, roteadores, switches ou outros sistemas ou dispositivos embutidos que geram logs.

O daemon Rsyslog pode ser configurado para funcionar como cliente e servidor ao mesmo tempo. Configurado para funcionar como servidor, o Rsyslog ouvirá na porta padrão 514 TCP e UDP e começará a coletar mensagens de log que são enviadas pela rede por sistemas remotos. Como cliente, o Rsyslog enviará pela rede as mensagens de log internas para um servidor Ryslog remoto através das mesmas portas TCP ou UDP.

O Rsyslog filtrará as mensagens syslog de acordo com as propriedades e ações selecionadas. Os filtros rsyslog são os seguintes:

  1. Filtros de Facilidade ou Prioridade
  2. Filtros baseados em Propriedade
  3. Filtros baseados em Expressão

O filtro facilidade é representado pelo subsistema interno do Linux que produz os logs. Eles são categorizados como apresentado abaixo:

  • auth/authpriv = mensagens produzidas por processos de autenticação
  • cron = logs relacionados a tarefas cron
  • daemon = mensagens relacionadas a serviços do sistema em execução
  • kernel = mensagens do kernel Linux
  • mail = mensagens do servidor de e-mail
  • syslog = mensagens relacionadas ao syslog ou outros daemons (o servidor DHCP envia logs aqui)
  • lpr = mensagens de impressoras ou servidor de impressão
  • local0 - local7 = mensagens personalizadas sob controle do administrador

Os níveis de prioridade ou severidade são atribuídos a uma palavra-chave e um número, conforme descrito abaixo.

  • emerg = Emergência – 0
  • alert = Alertas – 1
  • err = Erros – 3
  • warn = Avisos – 4
  • notice = Notificação – 5
  • info = Informação – 6
  • debug = Depuração – 7 nível mais alto

Existem também algumas palavras-chave especiais do Rsyslog disponíveis, como o sinal de asterisco ( *) para definir todas as facilidades ou prioridades, a palavra-chave none que especifica nenhuma prioridade, o sinal de igual ( =) que seleciona apenas aquela prioridade e o sinal de exclamação ( !) que nega uma prioridade.

A parte de ação do syslog é representada pela declaração de destino. O destino de uma mensagem de log pode ser um arquivo armazenado no sistema de arquivos, um arquivo no caminho do sistema /var/log/, outra entrada de processo local via um pipe nomeado ou FIFO. As mensagens de log também podem ser direcionadas a usuários, descartadas para um buraco negro (/dev/null) ou enviadas para stdout ou para um servidor syslog remoto via protocolo TCP/UDP. As mensagens de log também podem ser armazenadas em um banco de dados, como MySQL ou PostgreSQL.

Configurar Rsyslog como Servidor

O daemon Rsyslog é instalado automaticamente na maioria das distribuições Linux. No entanto, se o Rsyslog não estiver instalado em seu sistema, você pode emitir um dos comandos abaixo para instalar o serviço; você precisará de privilégios de root para executar os comandos.

Em distribuições baseadas em Debian:

sudo apt-get install rsyslog

Em distribuições baseadas em RHEL, como CentOS:

sudo yum install rsyslog

Para verificar se o daemon Rsyslog está iniciado em um sistema, execute os comandos abaixo, dependendo da versão da sua distribuição.

Em distribuições Linux mais novas com systemd:

systemctl status rsyslog.service

Em versões mais antigas do Linux com init:

service rsyslog status
/etc/init.d/rsyslog status

Para iniciar o daemon rsyslog, emita o seguinte comando.

Em versões mais antigas do Linux com init:

service rsyslog start
/etc/init.d/rsyslog start

Em distribuições Linux mais recentes:

systemctl start rsyslog.service

Para configurar um programa rsyslog para rodar em modo servidor, edite o arquivo de configuração principal em /etc/rsyslog.conf. Neste arquivo, faça as seguintes alterações, conforme mostrado no exemplo abaixo.

sudo vi /etc/rsyslog.conf

Localize e descomente removendo o hashtag (#) as seguintes linhas para permitir a recepção de mensagens de log UDP na porta 514. Por padrão, a porta UDP é usada pelo syslog para enviar-receber mensagens.

$ModLoad imudp   
$UDPServerRun 514

Como o protocolo UDP não é confiável para trocar dados em uma rede, você pode configurar o Rsyslog para enviar mensagens de log para um servidor remoto via protocolo TCP. Para habilitar o protocolo de recepção TCP, abra o arquivo /etc/rsyslog.conf e descomente as seguintes linhas, conforme mostrado abaixo. Isso permitirá que o daemon rsyslog se vincule e escute em um socket TCP na porta 514.

$ModLoad imtcp   
$InputTCPServerRun 514 

Ambos os protocolos podem ser habilitados no rsyslog para funcionar ao mesmo tempo.

Se você quiser especificar a quais remetentes você permite acesso ao daemon rsyslog, adicione a seguinte linha após as linhas de protocolo habilitadas:

$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com

Você também precisará criar um novo template que será analisado pelo daemon rsyslog antes de receber os logs de entrada. O template deve instruir o servidor Rsyslog local onde armazenar as mensagens de log de entrada. Defina o template logo após a linha $AllowedSender conforme mostrado no exemplo abaixo.

$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"  
**.*  *?Incoming-logs  
& ~

** Para registrar apenas as mensagens geradas pela facilidade kern, use a sintaxe abaixo.

kern.*   ?Incoming-logs

Os logs recebidos são analisados pelo template acima e serão armazenados no sistema de arquivos local no diretório /var/log/, em arquivos nomeados de acordo com o nome do host do cliente e a facilidade do cliente que produziu as mensagens: %HOSTNAME% e %PROGRAMNAME% variáveis.

A regra de redirecionamento abaixo & ~ configura o daemon Rsyslog para salvar as mensagens de log de entrada apenas nos arquivos acima especificados pelos nomes das variáveis. Caso contrário, os logs recebidos serão processados e também armazenados no conteúdo dos logs locais, como o arquivo /var/log/syslog.

Para adicionar uma regra para descartar todas as mensagens de log relacionadas ao e-mail, você pode usar a seguinte declaração.

mail.* ~

Outras variáveis que podem ser usadas para gerar nomes de arquivos são: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%

A partir da versão 7 do Rsyslog, um novo formato de configuração pode ser usado para declarar um template em um servidor Rsyslog.

Um exemplo de template da versão 7 pode parecer como mostrado nas linhas abaixo.

template(name="MyTemplate" type="string"  
         string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"  
        )

Outro modo de escrever o template acima também pode ser como mostrado abaixo:

template(name="MyTemplate" type="list") {  
    constant(value="/var/log/")  
    property(name="fromhost-ip")  
    constant(value="/")  
    property(name="programname" SecurePath="replace")  
    constant(value=".log")  
    } *  
***

Para aplicar quaisquer alterações feitas no arquivo de configuração do rsyslog, você deve reiniciar o daemon para carregar a nova configuração.

sudo service rsyslog restart
sudo systemctl restart rsyslog

Para verificar quais sockets do rsyslog estão em estado de escuta abertos em um sistema Debian Linux, você pode executar o comando netstat com privilégios de root. Passe os resultados por um utilitário de filtro, como grep.

sudo netstat –tulpn | grep rsyslog

Esteja ciente de que você também deve abrir as portas do Rsyslog no firewall para permitir que conexões de entrada sejam estabelecidas.

Em distribuições baseadas em RHEL com Firewalld ativado, emita os comandos abaixo:

firebase-cmd --permanent --add-port=514/tcp
firebase-cmd --permanent --add-port=514/tcp
firebase-cmd –reload

Em distribuições baseadas em Debian com o firewall UFW ativo, emita os comandos abaixo:

ufw allow 514/tcp
ufw allow 514/udp

Regras do firewall iptables:

iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
iptables -A INPUT -p udp --dport 514 -j ACCEPT

Configurar Rsyslog como Cliente

Para habilitar o daemon rsyslog para funcionar em modo cliente e enviar mensagens de log locais para um servidor Rsyslog remoto, edite o arquivo /etc/rsyslog.conf e adicione uma das seguintes linhas:

*. *  @IP_REMOTE_RSYSLOG_SERVER:514
*. *  @FQDN_RSYSLOG_SERVER:514

Esta linha habilita o serviço Rsyslog para enviar todos os logs internos para um servidor Rsyslog distante na porta UDP 514.

Para enviar os logs via protocolo TCP, use o seguinte template:

*. *  @@IP_reomte_syslog_server:514

Para enviar apenas logs relacionados ao cron com todas as prioridades para um servidor rsyslog, use o template abaixo:

cron.* @ IP_reomte_syslog_server:514

Nos casos em que o servidor Rsyslog não está acessível via rede, acrescente as linhas abaixo ao arquivo /etc/rsyslog.conf no lado do cliente para armazenar temporariamente os logs em um arquivo em buffer no disco, até que o servidor fique online.

$ActionQueueFileName queue  
$ActionQueueMaxDiskSpace 1g  
$ActionQueueSaveOnShutdown on  
$ActionQueueType LinkedList  
$ActionResumeRetryCount -1

Para aplicar as regras acima, o daemon Rsyslog precisa ser reiniciado para atuar como cliente.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.