Registre avisos de recursos

ShellBeginner
Pratique Agora

Introdução

A FRAME Studio precisa de um registro curto de uma sessão de trabalho, não de uma tela de terminal que desaparece. O amostrador de recursos já está completo nesta instância independente. Você transformará observações em avisos explícitos e os acrescentará sem perder o registro anterior do operador.

Você implementará três funções: classificar uma leitura, registrar uma linha completa e repetir a ação de amostragem preparada. São necessários variáveis, funções, condições e laços básicos de Bash; o primeiro laboratório explica os indicadores. Seus arquivos não são necessários. Os limites são uma política didática local, não recomendações universais de produção. A duração é uma estimativa do autor.

Atribua um estado explícito a cada leitura

Nesta etapa, você converterá uma porcentagem e seu limite em uma decisão de aviso reutilizável.

Comece em Terminal. Esta instância independente já contém um metrics.sh funcional; você não precisa de arquivos anteriores. Entre no espaço de trabalho:

cd /home/labex/project/resource-watch

Observe uma leitura atual:

bash snapshot.sh

Os quatro campos separados por tabulação são marca UTC, CPU não ociosa, pressão de memória e uso do sistema de arquivos alvo. Descrevem esta instância, não uma frota de produção. Um aviso de recursos não prova falha na exportação das fotos.

cat mostra a política sem modificá-la:

cat policy.sh

Leia os três limites e os caminhos completos do alvo e do registro. Nesta unidade, os limites de CPU e memória são 80 e o de disco é 50. São decisões didáticas. A regra explícita é WARN se uma leitura for maior ou igual ao próprio limite; caso contrário, OK. A igualdade importa. Preserve a política e o amostrador fornecidos.

Abra as funções incompletas com nano:

Este laboratório recomeça com um arquivo de métricas preparado e funcional. Edite o arquivo de funções de monitoramento indicado no próximo comando, em vez de copiar aqui as métricas anteriores. Os três valores LIMIT da política são porcentagens inteiras; TARGET é o diretório observado e LOG o caminho do histórico salvo. Ler a política não a altera.

nano monitor-functions.sh

Substitua apenas classify por:

classify() {
    if (( $1 >= $2 )); then
        echo WARN
    else
        echo OK
    fi
}

O primeiro argumento é a leitura e o segundo é o limite. ((...)) compara números; >= inclui igualdade. Os dois ramos imprimem um estado: uma leitura normal diz OK em vez de ficar silenciosa. Salve com Ctrl+O, Enter, Ctrl+X.

source carrega as definições. Execute os testes dentro de bash -c, pois o shell interativo é Zsh. As aspas simples preservam os comandos para Bash:

bash -c 'source ./monitor-functions.sh; classify 79 80; classify 80 80; classify 81 80'
OK
WARN
WARN

Estas leituras fornecidas testam a regra; não são medições atuais de CPU. Uma função que sempre retorna WARN ou OK está incorreta mesmo que a estação coincida com esse estado hoje.

Acrescente um registro de monitoramento completo

Nesta etapa, você registrará todas as leituras e seus estados independentes sem substituir o histórico.

Permaneça em Terminal, em /home/labex/project/resource-watch. Leia primeiro o histórico do operador:

cat history.tsv

A linha original deve permanecer idêntica byte a byte no início. history.tsv é a entrega real, não um relatório preenchido à mão. Cada nova linha tem sete campos com tabulação: marca UTC, CPU, memória, disco e depois os estados de CPU, memória e disco nessa ordem.

Abra as funções:

nano monitor-functions.sh

Substitua apenas record_sample por:

record_sample() {
    local stamp=$1 cpu=$2 memory=$3 disk=$4 logfile=$5
    printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
        "$stamp" "$cpu" "$memory" "$disk" \
        "$(classify "$cpu" "$CPU_LIMIT")" \
        "$(classify "$memory" "$MEMORY_LIMIT")" \
        "$(classify "$disk" "$DISK_LIMIT")" >> "$logfile"
}

printf substitui cada %s, \t escreve uma tabulação e \n termina a linha. Uma barra invertida ao final de uma linha continua o mesmo comando. $(...) captura a saída de uma função. Aspas duplas preservam cada valor e um caminho de registro com espaços. >> acrescenta; usar > destruiria registros anteriores. Salve com Ctrl+O, Enter, Ctrl+X.

Teste um registro fornecido em um arquivo de prática separado. source ./policy.sh carrega os limites neste processo Bash. Eles não persistem automaticamente em outro terminal nem em uma chamada posterior de bash -c.

bash -c 'source ./policy.sh; source ./monitor-functions.sh; record_sample 2026-01-02T03:04:05Z 10 85 20 practice.tsv'
cat practice.tsv
2026-01-02T03:04:05Z 10 85 20 OK WARN OK

O aviso de memória compara 85 com 80; não transforma os outros estados em WARN. Repetir a chamada acrescenta outra linha de prática. Não adicione exemplos a history.tsv: esse arquivo fica reservado para amostragem real.

Use o exemplo de prática para ler os sete campos da esquerda para a direita:

Campo Exemplo Significado
1 2026-01-02T03:04:05Z Hora UTC; Z indica UTC
2 10 Porcentagem de CPU não ociosa
3 85 Porcentagem de pressão de memória
4 20 Porcentagem de uso do sistema alvo
5 OK CPU 10 está abaixo de seu limite 80
6 WARN Memória 85 atinge ou ultrapassa seu limite 80
7 OK Disco 20 está abaixo de seu limite 50

Tabulações podem parecer espaços desiguais em Terminal. Preserve as tabulações reais produzidas pela função; não alinhe manualmente o histórico real com espaços. A linha original do operador é contexto preparado, então sua data anterior é normal. Apenas o arquivo de prática separado recebe este exemplo fornecido.

Execute uma observação limitada e preserve o histórico

Nesta etapa, você repetirá amostragens reais, inspecionará o resultado e executará novamente sem perder o progresso.

Permaneça em Terminal, em /home/labex/project/resource-watch. O monitor.sh preparado fornece capture_once target logfile: obtém uma nova observação, chama seu registrador e mostra a linha salva. run_monitor precisa transmitir os caminhos sem alterações e chamar a ação exatamente a quantidade solicitada. Cada captura inclui uma nova janela de CPU de um segundo; é uma observação limitada, não um agendador preciso.

nano monitor-functions.sh

Substitua apenas essa função por:

run_monitor() {
    local count=$1 target=$2 logfile=$3
    local n
    for ((n = 0; n < count; n++)); do
        capture_once "$target" "$logfile"
    done
}

O laço aritmético começa em zero, continua enquanto n for menor que count e incrementa n após cada captura. As aspas preservam os dois caminhos. Um laço while equivalente também é válido. Salve com Ctrl+O, Enter, Ctrl+X.

Execute três amostras reais:

bash monitor.sh 3

Três linhas devem aparecer antes de retornar ao prompt. Cada marca UTC deve ser posterior à anterior. Valores reais variam e uma execução normal pode não gerar avisos. O programa aceita de 1 a 30 amostras. Em uma observação longa, Ctrl+C interrompe o script em primeiro plano e preserva as linhas acrescentadas. Você não precisa encerrar outros processos.

Leia o resultado e conte linhas. wc -l conta linhas terminadas por uma quebra de linha:

cat history.tsv
wc -l history.tsv

Após a primeira execução descrita, deve haver quatro linhas: a original e três novas. Se você coletou mais amostras, haverá mais. Preserve essas observações válidas.

Continue com uma amostra:

bash monitor.sh 1
wc -l history.tsv

O total aumenta em um. Repetir é seguro porque o registrador acrescenta em vez de substituir. Compare cada estado com a leitura e seu limite em policy.sh.

Teste intencionalmente um erro comum de entrada: zero é rejeitado antes da amostragem.

bash monitor.sh 0
Use a sample count from 1 to 30.

Essa falha esperada sai com estado 2 e não altera o histórico. Recupere usando uma quantidade válida, sem reiniciar a VM nem editar o registro:

bash monitor.sh 1

Uma nova linha é acrescentada. O amostrador preparado também rejeita métricas incompletas, em vez de acrescentar uma observação vazia com aparência plausível.

Confira o resultado

  • A linha original do operador continua no início, seguida das novas observações.
  • A primeira execução acrescenta três linhas; continuar com uma amostra acrescenta mais uma. Mais linhas válidas são permitidas se você repetiu um comando.
  • Leia primeiro as três porcentagens e compare cada uma com seu próprio limite. Três estados OK são válidos; não é preciso gerar carga nem apagar arquivos para provocar um aviso.
  • Cada captura espera um novo intervalo de CPU. Uma pausa breve é normal; não pressione Enter repetidamente durante a amostragem. Quando o prompt retorna, a execução limitada terminou. Fechar Terminal não mantém um monitor contínuo funcionando.

Resumo

Você implementou uma regra de aviso que inclui igualdade, acrescentou registros completos com três estados independentes e repetiu amostragens reais preservando o histórico. Agora pode executar uma observação curta, ler suas evidências e continuá-la. O desafio independente muda o alvo e a política, reutilizando as ferramentas e os contratos ensinados.