Pesquisa de site

Como configurar o cliente Rsyslog para enviar logs ao servidor Rsyslog no CentOS 7


O gerenciamento de logs é um dos componentes mais críticos em uma infraestrutura de rede. As mensagens de log são constantemente geradas por vários softwares de sistema, como utilitários, aplicativos, daemons, serviços relacionados à rede, kernel, dispositivos físicos e assim por diante.

Os arquivos de log são úteis no caso de solução de problemas do sistema Linux, monitorar o sistema e revisar a força e os problemas de segurança do sistema.

Rsyslog é um programa de registro de código aberto, que é o mecanismo de registro mais popular em um grande número de distribuições Linux. É também o serviço de registro padrão no CentOS 7 ou no RHEL 7.

O daemon Rsyslog no CentOS pode ser configurado para ser executado como um servidor para coletar mensagens de log de vários dispositivos de rede. Esses dispositivos atuam como clientes e são configurados para transmitir seus logs para um servidor rsyslog.

Contudo, o serviço Rsyslog também pode ser configurado e iniciado em modo cliente. Esta configuração instrui o daemon rsyslog a encaminhar mensagens de log para um servidor Rsyslog remoto usando os protocolos de transporte TCP ou UDP. O serviço Rsyslog também pode ser configurado para ser executado como cliente e como servidor ao mesmo tempo.

Neste tutorial, descreveremos como configurar um daemon Rsyslog CentOS/RHEL 7 para enviar mensagens de log para um servidor Rsyslog remoto. Esta configuração garante que o espaço em disco da sua máquina possa ser preservado para armazenar outros dados.

O local onde quase todos os arquivos de log são gravados por padrão no CentOS é o caminho do sistema /var. Também é aconselhável sempre criar uma partição separada para o diretório /var, que pode ser aumentada dinamicamente, para não esgotar a partição /(root).

Um cliente Rsyslog sempre envia as mensagens de log em texto simples, se não for especificado de outra forma. Você não deve configurar um cliente Rsyslog para transmitir mensagens de log pela Internet ou redes que não estejam sob seu controle total.

Requisitos

  1. Procedimento de instalação do CentOS 7.3
  2. Procedimento de instalação do RHEL 7.3
  3. Configure um servidor Rsyslog no CentOS/RHEL 7

Etapa 1: verifique a instalação do Rsyslog

1. Por padrão, o daemon Rsyslog já está instalado e em execução em um sistema CentOS 7. Para verificar se o serviço rsyslog está presente no sistema, emita os seguintes comandos.

rpm -q | grep rsyslog
rsyslogd -v

2. Se o pacote Rsyslog não estiver instalado no CentOS, execute o comando abaixo para instalar o serviço.

yum install rsyslog

Etapa 2: configurar o serviço Rsyslog como cliente

3. Para forçar o daemon Rsyslog instalado em um sistema CentOS 7 para atuar como um cliente de log e rotear todas as mensagens de log geradas localmente para um servidor Rsyslog remoto, modifique o arquivo de configuração rsyslog da seguinte forma:

Primeiro abra o arquivo de configuração principal para edição.

vi /etc/rsyslog.conf

Em seguida, anexe a linha abaixo no final do arquivo, conforme ilustrado no trecho abaixo.

*. *  @192.168.10.254:514

Na linha acima, certifique-se de substituir o endereço IP do FQDN do servidor rsyslog remoto de acordo. A linha acima instrui o daemon Rsyslog a enviar todas as mensagens de log, independentemente da facilidade ou gravidade, para o host com o IP 192.168.10.254 via porta 514/UDP.

4. Se o servidor de log remoto estiver configurado para escutar apenas conexões TCP ou se você quiser usar um protocolo de rede de transporte confiável, como TCP, adicione outro caractere @ na frente do host remoto, conforme mostrado no exemplo abaixo:

*. *  @@logs.domain.lan:514

O rsyslog do Linux também permite alguns caracteres especiais, como = ou !, que podem ser prefixados aos níveis de prioridade para indicar “apenas esta prioridade ” para sinal de igual e “não esta prioridade ou superior a esta ”.

Alguns exemplos de qualificadores de nível de prioridade Rsyslog no CentOS 7:

  • kern.info=logs do kernel com prioridade de informação e superior.
  • kern.=info=apenas mensagens do kernel com prioridade de informação.
  • kern.info;kern.!err=apenas mensagens do kernel com informações, avisos e prioridades de aviso.
  • kern.debug;kern.!=warning=todas as prioridades do kernel, exceto aviso.
  • kern.*=todas as mensagens de prioridades do kernel.
  • kern.none=não registre nenhuma mensagem relacionada ao recurso do kernel, independentemente da prioridade.

Por exemplo, supondo que você queira enviar apenas mensagens de um recurso específico para um servidor de log remoto, como todas as mensagens de correio relacionadas, independentemente do nível de prioridade, adicione a linha abaixo ao arquivo de configuração rsyslog:

mail.* @192.168.10.254:514 

5. Finalmente, para aplicar a nova configuração, o serviço Rsyslog precisa ser reiniciado para que o daemon capte as alterações, executando o comando abaixo:

systemctl restart rsyslog.service

6. Se por algum motivo o daemon Rsyslog não estiver ativado durante o tempo de inicialização, emita o comando abaixo para ativar o serviço em todo o sistema:

systemctl enable rsyslog.service

Etapa 3: enviar logs Apache e Nginx para um servidor de log remoto

7. O servidor Apache HTTP pode ser configurado para enviar mensagens de log para um servidor syslog remoto adicionando a seguinte linha ao seu arquivo de configuração principal, conforme ilustrado no exemplo abaixo.

vi /etc/httpd/conf/httpd.conf

No arquivo conf principal do Apache, adicione a linha abaixo.

CustomLog "| /bin/sh -c '/usr/bin/tee -a /var/log/httpd/httpd-access.log | /usr/bin/logger -thttpd -plocal1.notice'" combined

A linha forçará o daemon HTTP a gravar as mensagens de log internamente no arquivo de log do sistema de arquivos, mas também processará as mensagens através de um canal para o utilitário logger, que as enviará para um servidor syslog distante, marcando-as como provenientes do local1 instalação.

8. Se você também quiser direcionar mensagens de log de erros do Apache para um servidor syslog remoto, adicione uma nova regra como a apresentada no exemplo acima, mas certifique-se de substituir o nome do arquivo de log httpd e o nível de gravidade do arquivo de log para corresponder à prioridade do erro, conforme mostrado no exemplo a seguir:

ErrorLog "|/bin/sh -c '/usr/bin/tee -a /var/log/httpd/httpd-error.log | /usr/bin/logger -thttpd -plocal1.err'"

9. Depois de adicionar as linhas acima, você precisa reiniciar o daemon Apache para aplicar as alterações, emitindo o seguinte comando:

systemctl restart httpd.service                 

10. A partir da versão 1.7.1, o servidor web Nginx possui recursos integrados para registrar diretamente suas mensagens em um servidor syslog remoto, adicionando as seguintes linhas de código para um arquivo de configuração nginx.

error_log syslog:server=192.168.1.10:514,facility=local7,tag=nginx,severity=error;
access_log syslog:server=192.168.10.254:514,facility=local7,tag=nginx,severity=info main;

Para um servidor IPv6, use o seguinte formato de sintaxe para incluir o endereço IPv6.

access_log syslog:server=[7101:dc7::9]:514,facility=local7,tag=nginx,severity=info;

11. No servidor Rsyslog remoto você precisa fazer a seguinte alteração no arquivo de configuração rsyslog, para receber os logs enviados pelo servidor web Apache.

local1.* @Apache_IP_address:514

Isso é tudo! Você configurou com sucesso o daemon Rsyslog para ser executado no modo cliente e, também, instruiu o servidor Apache HTTP ou Nginx a encaminhar suas mensagens de log para um servidor syslog remoto.

Caso o sistema trave, você poderá investigar o problema inspecionando o conteúdo dos arquivos de log armazenados no servidor syslog remoto.