rsync: gzip na fonte tolerante

0

Eu preciso transferir alguns arquivos de log a cada hora para um logstorage que todos os usuários podem acessar, e eu uso o rsync para fazer isso, mas o problema surge quando o arquivo de log é girado e automaticamente zipado, o rsync detecta é um novo arquivo e o transferiu também, isso significa que no servidor de destino eu tenho:

example.log.2014-01-17--00

e

example.log.2014-01-17--00.gz

que é o mesmo arquivo de log, mas zipado com gzip -9.

esta é a minha linha rsync, está incluída em um script:

rsync -rvzt --include "*/" --include "$pattern" --exclude "*" $directory [email protected]:/home/loguser/logstorage/$subdir/$basefilename

é executado a cada hora por um crontab e transfere todos os arquivos correspondentes a um $ pattern e $ directory incluídos em um arquivo que contém caminhos e padrões que eu quero transferir.

Então, minha pergunta é se existe uma opção de rsync que eu não vi, ou se há alguma possibilidade de fazer isso e como.

Obrigado antecipadamente.

    
por Adryoid 17.01.2014 / 14:46

2 respostas

0

Você já pensou em usar o encaminhamento de rsyslog [1]?

Além disso, de [2], parece que adicionar --exclude '*.gz' deve corrigir seu problema. Por que você --exclude '*' ? Minha leitura disso seria que todos os arquivos são excluídos da sincronização.

[1] link

[2] link

    
por 17.01.2014 / 15:40
0

Ok, vou explicar um pouco mais sobre o meu ambiente e o que estou procurando:

Eu tenho um ambiente com tantos arquivos de log, esses arquivos de log são rotacionados dependendo do seu peso, então nem todos os arquivos de log são rotacionados, eu também tenho muitos caminhos diferentes onde esses arquivos de log residem, e aqueles log -arquivos são nomeados com padrões.

Este é um exemplo de um arquivo contendo caminhos, nomes, ZIP e DEL:

# all entries in this file are logfile directories.
# Report: NO # Specify if you want to receive result by mail, options (YES/NO)
# These files will be zipped after <ZIP> days and deleted after <DEL> days
# If <DEL> is not specified, no files will be deleted
# Format: <DIR> <FILEPATTERN> <ageInDaysBeforeBZIP> [<ageInDaysBeforeDELETE>]
# Example: /home/loguser/logstorage       "PATTERN"       <ZIP>    <DEL>
#
/home/user1/www/logs/                     "example.log*"    3        30

Nesse caso, o script será lido e levará os caminhos para a variável $directory , levará o padrão para a variável $pattern e ZIP & O DEL será usado para arquivos de log zip com mais de 3 dias e excluirá arquivos de log antigos com mais de 30 dias, mas essa é outra parte do script.

Então, o que preciso fazer é transferir os arquivos de log atuais de hora em hora para o servidor de destino, mas não posso usar --delete , porque no servidor de destino preciso manter arquivos de log por 90 dias.

Por isso, criei esse script que está sendo executado por hora e transferindo arquivos de padrão de correspondência para o servidor de destino.

Em ambos os servidores há outro cronjob para "manter a sala arrumada", rodando uma vez por dia e fechando arquivos de log com mais de 1 dia e excluindo aqueles com mais de 90 dias, mas não pode fazer seu trabalho porque se tentar para gzip -9 example.log.2014-01-17--12 não pode fazer isso, o arquivo existe porque foi compactado na origem e transferido para o destino zipado.

Estou percebendo que se eu adicionar, ou modificar --exclude "*.gz" ao invés de --exclude "*" arquivos zipados não serão transferidos, de qualquer forma ele será compactado no destino e problema resolvido, mas preciso ter certeza de que existem os mesmos arquivos com o mesmo md5sum, porque existem muitos arquivos de log importantes.

Woow, espero que você entenda e estou muito grato pelo seu tempo e cooperação, espero que isso ajude mais alguns administradores de sistema com o mesmo problema ou similar.

Se você precisar de mais alguma explicação, por favor me avise.

    
por 18.01.2014 / 15:37