Estou pensando em criar um aplicativo que leia meus diferentes arquivos de log do servidor, salve os dados analisados em um banco de dados e remova a linha do arquivo de log.
Este é o meu lado do programador tentando pensar em maneiras melhores de obter todos os arquivos de log em um console de aplicativo utilizável/pesquisável do qual posso visualizar vários servidores ao mesmo tempo e scripts de programa para encontrar correlações ou enviar um e-mail/mensagem de texto enquanto estou fora quando algo parece errado.
Parece haver soluções caras para isso já no mercado, mas não posso justificar os altos preços de US$ 500 a US$ 2.000/mês.
De qualquer forma, meu problema é como removo linhas de um arquivo de log gravado ativamente sem causar problemas? Alguns dos arquivos de log são rotacionados (como o nginx), enquanto outros não. Suponho que a coisa mais segura seria copiar o arquivo e depois echo '' > file.log
apagá-lo. Eu posso perder 300ms de gravações.
A outra questão é se eu quero apagar os logs. Suponho que não apagar os logs significaria que eu teria que abrir o arquivo, pular para o final e depois retroceder até chegar à última entrada conhecida.
Qual seria uma boa maneira de canalizar dados de log para um aplicativo/banco de dados externo?
Não reinvente a roda.
Use o logstash para obter seus logs de seus sistemas.
Faça com que logstash envie os logs para elasticsearch.
Use o front-end kibana para análises.
Essa combinação é tão comum que é conhecida como pilha ELK. E é tudo de código aberto.
syslog-ng