Obtenha o uso da CPU e execute um comando se ele for maior que 80%

3

Meu VPS foi hackeado várias vezes, hackers colocaram um minerador de CPU. Meu provedor de hospedagem interrompe o VPS se o mineiro for detectado e eu não reaja nas próximas 12 horas. Mas eles podem me enviar um aviso às 21h00 no sábado :), e desligar o servidor às 9h00 no domingo.

Por isso, quero monitorar o uso da CPU e bloquear a pasta em que o minerador está sempre pronto para ser escrito.

Eu não estou muito familiarizado com o Linux, então, por favor, sugira com esse script

  1. Verifique o uso da CPU, se for maior que 80% (como exemplo) Faça alguma coisa.
  2. No meu caso, exclua tudo da pasta de instalação e torne-o somente para leitura.

Na verdade, não tenho ideia de como implementar o item №1.

    
por Alexey Shatrov 15.01.2018 / 10:37

2 respostas

4

Eu tive um problema parecido e tive esse pequeno script bash pronto. Ele está calculando a média da carga nos últimos 15 minutos, se você quiser um período de tempo diferente, deve ser alterado (para verificar a carga média dos últimos 5 minutos, altere a awk para print $1 ).
Isto irá dizer-lhe o uso relativo das CPUs:

#!/bin/bash
cores=$(nproc) 
load=$(awk '{print $3}'< /proc/loadavg)
echo | awk -v c="${cores}" -v l="${load}" '{print "relative load is " l*100/c "%"}'

Deve ser executado no Ubuntu e no Centos.

Para chegar ao ponto em que você verifica se a carga está acima de 80% e "faça algo", adicione a este script:

usage=$(echo | awk -v c="${cores}" -v l="${load}" '{print l*100/c}' | awk -F. '{print $1}')
if [[ ${usage} -ge 80 ]]; then
    echo "delete all from install folder and make it read only"
fi
    
por 15.01.2018 / 11:22
0

Check CPU usage, if it is higher than 80% (as example) Do something.

As CPUs modernas têm vários núcleos e geralmente cada núcleo suporta vários segmentos. Além disso, os núcleos geralmente têm velocidade de clock variável. Não é assim tão simples definir como calcular uma carga da CPU. Sem mencionar que uma única vCPU pode ser 100% inativa ou 100% ocupada a qualquer momento. Não existe uma CPU 80% ocupada instantaneamente.

O que você pode fazer é obter a carga média para cada vCPU durante um período de tempo (o mpstat fornece isso) ou a média para todas as vCPUs combinadas (vmstat).

Mesmo com limite total de CPU, se o consumidor de CPU hostil tiver um único encadeamento, ele poderá não aparecer descaradamente no último caso, porque outras vCPUs podem estar ociosas.

Se multi-threaded e CPU ligado, ele será detectado por ambos os comandos, mas você tem que ter certeza que não é um aplicativo legítimo ou daemon que está carregando sua máquina.

Outra métrica mais útil é derivada da contenção da CPU, ou seja, medir quantos segmentos estão usando e competindo pelos recursos da vCPU. É isso que a média de carga foi projetada para mostrar. Infelizmente, no Linux, a média de carga considera um estado ininterrupto do encadeamento como sendo a carga da CPU. Na verdade, a CPU está inativa e livre para outras tarefas, portanto você deve prestar atenção a esse fator e identificar possíveis casos em que a carga é alta mas a contenção real é baixa.

Finalmente, pode haver situações em que a fila de execução é muito alta, mas por um período de tempo muito limitado. Se o cálculo da média de carga que usa amostragem para obter o valor da fila de execução tiver que selecionar o número nesse momento de pico, o valor médio da carga será strongmente influenciado por vários minutos ou dezenas de minutos.

    
por 15.01.2018 / 12:34