Olá pessoal!
Neste artigo, quero falar sobre como escolhi o arquivador para compactar os logs do nosso sistema de front-office.
A divisão em que trabalho está envolvida no desenvolvimento e manutenção de um sistema unificado de front office do Banco. Sou responsável por sua manutenção, monitoramento e DevOps.
Nosso sistema é um aplicativo altamente carregado que atende a mais de 5.000 usuários únicos diariamente. Hoje é um "monólito" com todas as suas vantagens e desvantagens. Mas agora o processo de transferência de funcionalidade para microsserviços está em andamento.
Todos os dias, nosso sistema gera mais de 130 GB de logs brutos e, apesar de usarmos a pilha ENG (Elasticsearch Nxlog Graylog), os logs de arquivos contêm muito mais informações (por exemplo, erros de rastreamento de pilha) e, portanto, requerem arquivamento e armazenamento.
Como o local de armazenamento é limitado, surge a pergunta: "E qual arquivador melhor lidará com esta tarefa".
Para resolver esse problema, escrevi um script do PowerShell que executava a análise para mim.
A tarefa do script é chamar os arquivadores rar, 7z e zip com diferentes parâmetros de compactação, para calcular a velocidade da formação do arquivo, bem como o espaço em disco usado.
Trabalho preparatório:
Analisamos com mais detalhes
$table|Sort-Object -Property "Size %","Result %"|Format-Table -AutoSize
$table|Sort-Object -Property "Result %","Size %","Time %"|Format-Table -AutoSize
O resultado:
O mais econômico em termos de espaço em disco foi 7z com uma taxa de compressão de -mx = 8 e -mx = 9

O tempo de criação do arquivo mais rápido foi 7z com uma taxa de compactação de -mx = 1

O melhor em velocidade e espaço ocupado foi 7z com uma taxa de compressão de -mx = 3

Escolhemos 7z com uma taxa de compactação de -mx = 8, pois o tamanho do arquivo morto é -mx 9, mas funciona um pouco mais rápido.
Ótimo, a taxa de arquivamento e compactação está selecionada, agora vamos arquivar os logs!
Precisamos resolver os seguintes problemas:
- Evite alta carga do servidor durante a operação.
- Processe todas as pastas com os registros de uma subpasta.
- Exclua arquivos com mais de 30 dias (para não ficar sem espaço em disco).
- Crie arquivos por dia, dependendo da hora em que os arquivos foram modificados.
Aqui não vou pintar todas as linhas do script (descritas nos comentários), mas focar apenas na função Set-MMTCore, que nos permite calcular o número de threads para 7z para não carregar o processador em nosso servidor:
Function Set-MMTCore {
Sem usar a função Set-MMTCore
Pode-se ver que a CPU fica em 100%. Isso significa que inevitavelmente causaremos problemas no servidor e receberemos um alerta do sistema de monitoramento.

Ao usar a função Set-MMTCore
Pode-se ver que a CPU é de 30 a 35%. Isso significa que o uso da função Set-MMTCore permite arquivar arquivos sem afetar a operação do servidor.

O resultado do script de backup:
Pasta antes do arquivamento:

Pasta após o arquivamento:

Arquivos criados durante o processo de arquivamento:

Arquivos no arquivo:

