Mesclando Arquivos Grandes Cronologicamente (UNIX)

1

No momento, estamos usando o syslog-ng para despejar arquivos em um local de armazenamento de rede. Cada dia há 5 arquivos .log que são escritos por vários servidores e no final do dia eu preciso mesclar os 5 arquivos em ordem cronológica e depois comprimi-los. Nos últimos dois anos, usei logmerge e funcionou muito bem. A sintaxe exata é:

/local/bin/logmerge -f /mnt/logs/Windows/'date -d yesterday +\%Y-\%m-\%d'-sys*.log | gzip -9 -c > /mnt/logs/Windows/'date -d yesterday +\%Y-\%m-\%d'.log.gz && rm -f /mnt/logs/Windows/'date -d yesterday +\%Y-\%m-\%d'-sys*.log

Nas últimas semanas, esse processo foi interrompido devido ao tamanho dos arquivos .log obtidos. Cada um agora tem mais de 7 GB e o processo de logging está falhando na classificação de tantas linhas. No momento eu estou apenas gzip deles, mas torna a busca mais difícil porque os logs não estão em ordem.

Existe uma maneira melhor de mesclar esses arquivos e compactá-los?

    
por Eric 23.03.2017 / 15:33

1 resposta

1

Em vez disso, parece que você pode querer procurar algum tipo de banco de dados para armazenar seus registros.

Uma possibilidade pode ser usar a pilha ELK:

  • Elasticsearch como o banco de dados (ele é baseado no Lucene, portanto, é voltado para a pesquisa, mas também fornece um número de agregação, mapa -reduzir e funcionalidade relacionada)
  • Logstash como seu agente de ingestão e analisador de log - você pode, entre outras coisas, usar o entrada syslog para receber logs de seus nós (você pode enviá-los diretamente ou usar o daemon syslog-ng local para alimentar uma cópia para logstash)
  • O Kibana é usado para visualizar, pesquisar e manipular seus registros.

Não é necessariamente a resposta que você procurava, mas parece que você pode ter um caso de uso legítimo para uma solução como essa. Você também pode considerar algo como Splunk , mas, dado o volume de dados, isso vai custar caro.

O Logstash também pode ser usado em máquinas Windows para ler o EventLog, portanto, pode permitir que você atinja suas metas sem usar o syslog (se eu estiver lendo nas entrelinhas de sua configuração corretamente).

Também pode haver algo que você possa fazer sobre como os logs estão sendo gravados para ajudar a evitar esses arquivos enormes, mas eu tenderia a pensar que, se você está lidando regularmente com 7 GB de logs que você precisa periodicamente pesquisar, uma solução voltada para esse caso de uso pode ser mais prática.

Atualizado eu vejo. Nesse caso, não é possível fazer com que o syslog-ng grave tudo em um arquivo diário massivo (em vez de 5) ou que o syslog-ng grave tudo em uma série de arquivos até um certo tamanho (por exemplo, arquivos de 10 700 M , cada um criado após o último preenchimento)?

Realmente parece que o problema é ter seus dados fora de ordem, e eu teria pensado que existem maneiras de evitar esse problema, configurando o syslog de acordo. Como parece que os timestamps são mais importantes que os fontes, imagino que apenas os timestamps (ou possivelmente, timestamps e tamanho máximo do log) devem determinar como os eventos são armazenados em primeiro lugar.

    
por 23.03.2017 / 15:49

Tags