Existe uma maneira de controlar o syslog?

3

Usamos o Log4J com seu SyslogAppender para enviar mensagens para um servidor syslog-ng central, todas em execução em máquinas Unix.

Existe uma maneira (seja Java ou Unix) de limitar o número de mensagens que são enviadas para evitar que um servidor chateado também atrapalhe a rede?

A única opção que posso imaginar é definir o nível de log mais alto para que menos mensagens sejam realmente enviadas, mas isso não é ideal, pois mensagens importantes podem ser suprimidas em uma máquina que está se comportando de outra maneira.

Suponho que, em um mundo ideal, um nível de mudança dinâmica seria bom: se o número de mensagens / segundo passa por um certo nível, o limite aumenta, mas ao mesmo tempo isso soa um pouco exagerado.

Alguma idéia?

Obrigado

Rich

    
por Rich 09.09.2010 / 15:45

4 respostas

3

Acho que a pergunta é: você se importa se não consegue todos os seus logs no servidor central? O que você está falando é essencialmente deixar cair mensagens - nesse caso, você perderá logs. Está tudo bem? Se estiver, você já respondeu à sua própria pergunta - aumente o nível de depuração para receber apenas mensagens que realmente importam.

Se, no entanto, você estiver tentando corresponder, digamos, a uma restrição de largura de banda (como o limite de processamento mensal do Splunk), precisará escrever um servidor intermediário para obter os logs do syslog e priorizá-los. Não é difícil, mas é altamente específico para o seu caso de uso. Um bônus com esse método é que este intermediário pode enviar imediatamente logs importantes para o servidor de agregação e, no final do dia / mês, enviar os próximos logs de prioridade mais alta que não foram enviados originalmente. Dessa forma, você pode preencher a cota exatamente.

Se você adicionar requisitos mais específicos (por exemplo, por que você precisa fazer isso), e o que você quer dizer com limitação de logs (linhas duplicadas? largura de banda? espaço? servidor de agregação não pode acompanhar? etc.) então você Vou ter uma resposta muito melhor.

Boa sorte!

    
por 09.09.2010 / 16:06
1

Se você estiver usando o log4j corretamente, usar um nível de log mais alto não deverá impactar as mensagens de importação, pois elas devem ter um nível alto. Registre os detalhes localmente com rotação local.

    
por 09.09.2010 / 16:08
0

A única coisa que sei que é perto disso é uma configuração para mensagens silenciosas que são as mesmas, como, se uma mensagem de log se repetir como 200 vezes, você pode pedir ao syslog para registrá-la uma vez e ignorar as outras. mensagem dizendo que a mensagem repetiu 199 vezes mais. Acelerar o log pode fazer você perder as mensagens de log e isso não é desejável.

Talvez você possa colocar um QOS / traffic shaping entre seu servidor e o servidor de log e usá-lo para controlar a velocidade.

    
por 09.09.2010 / 15:55
0

Se é problema de largura de banda, como você disse, você pode até usar a compressão (É suportado no rsyslog, mas não tenho certeza sobre o syslog-ng). Além disso, se você não estiver usando logs para alertas em tempo real, poderá criar um script que leia os logs locais a cada alguns segundos e enviar uma agregação compactada deles.

Se você quiser uma solução distribuída, use a sugestão acima. (Salva largura de banda em muitos links). Mas se você preferir algo mais centralizado (com um pouco mais de desperdício de largura de banda, porque você tem que enviar logs inúteis para o servidor intermediário), então a solução Redmumba é muito melhor.

    
por 09.09.2010 / 17:02