Linux: logwatch (8) é muito barulhento. Como posso controlar o nível de ruído?

30

Nossos sistemas Linux executam o utilitário logwatch (8) por padrão. Em um sistema RedHat / CentOS / SL, o Logwatch é chamado pelo /etc/cron.daily/cronjob, que envia um email diário com os resultados. Esses e-mails têm um assunto como:

Subject: Logwatch for $HOSTNAME

O problema é que, por padrão, esses e-mails diários são muito barulhentos e contêm muitas informações supérfluas (erros HTTP, uso diário de disco, etc.) que já são monitoradas por outros serviços (Nagios, Cacti, syslog central, etc.). Para 100 sistemas, o carregamento do email é insuportável. As pessoas ignoram os e-mails, o que significa que podemos perder problemas detectados pelo logwatch.

Como posso reduzir a quantidade de ruído gerado pelo logwatch, mas ainda usar o logwatch para nos notificar sobre problemas significativos?

Vou postar minha própria resposta abaixo, mas gostaria de ver o que os outros fizeram.

Nota : Eu tenho uma pergunta semelhante em relação ao FreeBSD, no FreeBSD: o periódico (8) é muito barulhento. Como posso controlar o nível de ruído?

Stefan Lasiewski
fonte

Respostas:

39

No geral, a documentação disponível para o Logwatch carece de explicação adequada e geralmente é muito vaga. Reuni alguns exemplos úteis e reduzi o ruído do Logwatch em mais de 95%.

Aqui está o que eu encontrei.

Lembre-se de que você pode encontrar alguma documentação do Logwatch em /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch, e ela contém alguns exemplos úteis.

  1. No RHEL / CentOS / SL, a configuração padrão do relógio de registro está em /usr/share/logwatch/default.conf/logwatch.conf

    Essas configurações podem ser substituídas colocando sua configuração local em /etc/logwatch/conf/logwatch.conf. Coloque o seguinte nesse arquivo para instruir o logwatch a ignorar completamente serviços como 'httpd' e as verificações diárias de uso do disco:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. Às vezes, não quero desabilitar completamente o relógio de registro para um serviço específico, só quero ajustar os resultados para torná-los menos barulhentos. /usr/share/logwatch/default.conf/services/*.confcontém a configuração padrão para os serviços. Esses parâmetros podem ser substituídos colocando sua configuração local em /etc/logwatch/conf/services/$SERVICE.conf. Infelizmente, a capacidade do logwatch aqui é limitada e muitos dos executáveis ​​do logwatch estão cheios de Perl não documentado. Sua escolha é substituir o executável por outra coisa ou tentar substituir algumas configurações usando /etc/logwatch/conf/services.

    Por exemplo, eu tenho um scanner de segurança que executa varreduras na rede. À medida que os testes são executados, o scanner de segurança gera muitas mensagens de erro nos logs do aplicativo. Gostaria que o logwatch ignorasse os erros dos meus scanners de segurança, mas ainda me notificasse de ataques de outros hosts. Isso é coberto com mais detalhes no Logwatch: Ignorar determinados IPs para verificações de SSH e PAM? . Para fazer isso, coloque o seguinte em /etc/logwatch/conf/services/sshd.conf:

    # Ignore these hosts
    *Remove = 192.168.100.1
    *Remove = X.Y.123.123
    # Ignore these usernames
    *Remove = testuser
    # Ignore other noise. Note that we need to escape the ()
    *Remove = "pam_succeed_if\(sshd:auth\): error retrieving information about user netscan.*
    

    "

  3. O logwatch também permite remover a saída dos e-mails do logwatch, inserindo expressões regulares /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch diz:

    ignore.conf: este arquivo especifica expressões regulares que, quando correspondidas pela saída do logwatch, suprimirão a linha correspondente, independentemente de qual serviço esteja sendo executado.

    No entanto, não tive muita sorte com isso. Meus requisitos precisam de uma declaração condicional, que é algo como 'Se houver avisos de segurança devido ao meu scanner de segurança, não imprima a saída. Mas se houver avisos de segurança do meu scanner de segurança e de alguns bandidos, imprima as partes úteis - O cabeçalho que diz "Falha no logon de:", os IPs dos hosts ruins, mas não os IPs dos scanners.

  4. Corte-o na fonte (conforme sugerido por @ user48838). Essas mensagens estão sendo geradas por algum aplicativo e, em seguida, o Logwatch transmite os resultados para você. Nesses casos, você pode modificar o aplicativo para registrar menos.

    Isso nem sempre é desejável, porque às vezes você deseja que os logs completos sejam enviados para algum lugar (para um servidor syslog central, servidor IDS central, Splunk, Nagios etc.), mas não deseja que o logwatch envie um e-mail sobre isso a partir de todo servidor, todos os dias.

Stefan Lasiewski
fonte
Foi exatamente isso que fiz, no entanto, se bem me lembro, havia alguns serviços (acredito que algo a ver com rejeições de email) que não estavam sendo analisados ​​corretamente nos logs e, portanto, estavam listados em algum tipo de categoria "outro" e as linhas inteiras dos logs estavam sendo enviadas por email. Isso foi extremamente barulhento. Portanto, acabei de editar o código-fonte do logwatch e adicionar / alterar os respectivos filtros e cortar provavelmente 20kb por e-mail. Isso foi há alguns anos atrás, então eu tenho certeza que o logwatch melhorou desde então, mas não atualizei minha versão, caso contrário.
29411 Mike
5

Sim - o logwatch geralmente é muito barulhento. Você já mencionou desabilitar as verificações completamente.

Se você não quiser fazer isso, evite que certos eventos apareçam. Por exemplo - não é interessante se o nagios se conectar via ssh a um sistema DMZ. Mas é interessante se houver outros logins via ssh.

Usamos o rsyslog em vez do ksyslogd (primeiro instale o rsyslog e remova o ksyslogd). Com o rsyslog, você pode ajustar o que vai para os logs e o que não (por exemplo, criar uma expressão que elimine mensagens dos "nagios conectados" contendo sshd). Dessa forma, o logwatch relatará apenas informações úteis.

Outro caso pode ser o xinetd - não quero ser informado sobre conexões bem-sucedidas - isso pode ser configurado no xinetd itselv - sem desativar a verificação do loginet para o xinetd.

Nils
fonte
3

Como ponto de interesse, segui a opção 2 da resposta de Stefan Lasiewski, mas, para meus propósitos, queria incluir apenas linhas específicas em vez de excluir todo o ruído que não queria.

Eu estava configurando o vsftpd, então criei /etc/logwatch/conf/services/vsftpd.confe, em vez de usar algo como o *Remove = testuserque remove linhas que incluem o texto testuser, usei a linha *OnlyContains = "testuser"que retorna apenas linhas, incluindo esse texto.

Esses 2 scripts funcionam basicamente usando grepe grep -v.

A diferença é que você pode usar *Removequantas vezes quiser, mas com *OnlyContainsvocê precisará usá-lo uma vez se quiser algo ou algo mais ou algo mais. Então, para vários valores que você faz*OnlyContains = "testuser|testuser2|testuser3"

Jacob Tomlinson
fonte
1

Você já pensou em canalizar as mensagens de status de e-mail para um servidor de lista, talvez um que possa fornecer resumos com base em atributos programáveis ​​de tamanho e / ou duração / idade? A abordagem não reduz a quantidade de logs enviados por email, mas pode controlar a quantidade de emails individuais em lote para reduzir a frequência de email.

user48838
fonte
Eu tenho. Também consideramos uma solução apenas para syslog, onde filtramos parte do ruído. No entanto, por simplicidade, queríamos ver se era possível controlar essas coisas na fonte.
Stefan Lasiewski
11
Se você estiver olhando para "beliscá-lo" na fonte e minimizar os contratempos ao fazê-lo, considere limitar os esforços para ajustar os níveis de registro quando disponíveis.
user48838
0

Recentemente, eu precisava acalmar a saída do serviço sshd. Algumas das seções eram bastante longas e não podiam ser controladas definindo o nível de detalhe.

Não é uma solução ideal, mas acabei substituindo o script sshd copiando-o daqui: /usr/share/logwatch/scripts/services/sshdpara aqui:/etc/logwatch/scripts/services/sshd

Obviamente, agora você precisa manter as atualizações nesse arquivo de script, mas ele fornece um controle muito bom sobre o que é produzido. Como alternativa, suponho que você possa canalizar a saída logwatchatravés de uma ferramenta como awkou sedremover o que não deseja, mas isso me pareceu mais difícil.

Dominic P
fonte
0

Eu tinha a mesma pergunta no UNIX e Linux Stackexchange e aqui está a resposta que eu o corrigi:

Você pode dizer ao logwatch para olhar 7 dias em vez de 1 dia, alterando o parâmetro Range no seu logwatch.conf:

Range = between -7 days and -1 days

Você pode dizer logwatchpara executar semanalmente, em vez de diariamente, movendo-o do diretório cron semanal para o crondiretório diário :

mv /etc/cron.daily/00logwatch /etc/cron.weekly/

Obrigado a @JeffSchaller

alguma coisa alguma coisa
fonte