Como faço para processar novas adições aos logs

3

Eu sei que posso usar algumas ferramentas como tail e less para exibir as adições mais recentes em um arquivo de log crescente. O que eu quero fazer, no entanto, é executar algum tipo de script em intervalos regulares (como cron ) nas adições. Ele deve ser capaz de lidar com novas adições, uma linha ou várias adições de linha.

A parte difícil é acompanhar o que já foi processado, então eu só recebo as coisas novas desde a última vez que verifiquei. Isso deve, de preferência, levar em conta os registros que passam para os novos arquivos.

Existe alguma ferramenta para isso?

    
por s g 24.04.2015 / 22:35

1 resposta

0

Desde que o OP disse

This should preferably account for the logs rolling over to new files.

(note o "preferencialmente"), e não há outra resposta até agora, e no meu caso não houve log-rotate envolvido, eu acho que isso é solução "boa o suficiente", e pelo menos responde o título da questão.

Eu assumo um arquivo de entrada chamado input.txt, e escrevi um script que só gera as novas linhas desde a última vez em que foi chamado, tomando o arquivo de entrada como parâmetro. Aqui eu mostro o script (bastante primitivo) e como ele funciona.

[user@system test]$ ll
insgesamt 8
-rwxrwxr-x 1 user user 304 30. Jan 11:33 find-new-lines
-rw-rw-r-- 1 user user   6 30. Jan 10:42 input.txt
[user@system test]$ cat find-new-lines
#!/bin/bash

# We need last line count. Assume 0 on first run.
if [ ! -f "$1-last-lines-count.txt" ]; then
   echo 0 > $1-last-lines-count.txt
fi
# Find current line count
wc -l $1 | cut -d' ' -f1 > $1-current-lines-count.txt
# Find number of new lines, if any
expr 'cat $1-current-lines-count.txt' - 'cat $1-last-lines-count.txt' > $1-new-lines-count.txt
# Save current line count for next call
mv -f $1-current-lines-count.txt $1-last-lines-count.txt
# Output only new lines, if any
tail -'cat $1-new-lines-count.txt' $1
[user@system test]$ cat input.txt
a
b
c
[user@system test]$ ./find-new-lines input.txt
a
b
c
[user@system test]$ ll
insgesamt 16
-rwxrwxr-x 1 user user 304 30. Jan 11:33 find-new-lines
-rw-rw-r-- 1 user user   6 30. Jan 10:42 input.txt
-rw-rw-r-- 1 user user   2 30. Jan 12:30 last-lines-count-input.txt
-rw-rw-r-- 1 user user   2 30. Jan 12:30 new-lines-count-input.txt
[user@system test]$ ./find-new-lines input.txt
[user@system test]$
    
por 30.01.2017 / 12:47