Esse artigo foi produzido pelo site Linoxide.com e trata de um script que executa a verificação de integridade do sistema Linux. Esse Script coleta informações do sistema como por exemplo, hostname, versão do kernel, uptime, uso de cpu, memória, disco dentre outras informações. 

O script, retorna um arquivo de texto que será gerado no diretório atual. Uma variável será definida para fornecer um endereço de e-mail para o qual o script poderá enviar o arquivo de relatório.

Além do status do sistema, o script verificará um limite predefinido para a carga da CPU e o tamanho do sistema de arquivos.




Observação Importante:


Esse Script usa os comandos hostname, uptime, who, mpstat, lscpu, ps, top, df, free, bc commands to get system information e cut, grep, awk para processamento de texto.

Lembre-se: Certifique-se de que tem todos esses comandos acima estejam funcionando, para exibir todos os resultados do sistema corretamente.






Compreendendo o script linuxhealthcheck.sh


Logo abaixo eu tentei exemplificar o funcionamento do script, porém não copie do exemplo abaixo, pois no final da página estará disponível o link para download do script completo e correto:



#tell que shell para usar
#! / Bin / bash
#Aqui vamos colocar o endereço de e-mail para enviar e-mail com relatório. Se nenhum e-mail - arquivo de log será salvo.
EMAIL='alerts@account.com '
# Vamos criar uma função para gerenciar facilmente o que fazer com a saída.
Function sysstat {

#Print header, hostname (nome do hostname usado), versão do kernel (uname -r), Uptime (do comando uptime) e Last reboot time (do comando who)
echo -e "
#! / Bin / bash

Function sysstat {

Echo -e "

################################################## ##################

Relatório de verificação de integridade (CPU, processo, uso de disco, memória)

################################################## ##################

#hostname comando retorna hostname
Nome de host: `hostname`

Comando #uname com a chave -r retorna Versão do
Kernel Versão do Kernel: `uname -r`

#uptime comando usado para obter uptime, e com o comando sed nós cat saída do processo para obter apenas uptime.
Tempo de atividade: `uptime | Sed 's /.* up \ ([^,] * \),. * / \ 1 /' `

#who comando é usado para obter o último tempo de reinicialização, awk para processamento de saída
Last Reboot Time: `who -b | Awk '{print $ 3, $ 4}'

************************************************** *******************

CPU Load -> Threshold <1 Normal> 1 Cuidado,> 2 Insalubre

************************************************** *******************

"

#here verificamos se o comando mpstat está no nosso sistema
MPSTAT = `which mpstat`

#here we get código de saída do comando anterior
MPSTAT = $?

#if estado de saída não é 0, isto significa que o comando mpstat não foi
encontrado (ou não existe no nosso sistema) se [$ MPSTAT! = 0]

então

Echo "Instale o mpstat!"

Echo "Em sistemas baseados em Debian:"

Echo "sudo apt-get install sysstat"

Echo "Em sistemas baseados em RHEL:"

Echo "yum install sysstat"

outro

Echo -e ""

#here verificamos da mesma forma se lscpu instalou
LSCPU = `which lscpu`



LSCPU = $?

Se [$ LSCPU! = 0]

então

RESULT = $ RESULT "lscpu necessário para procedimento resultados precisos"

outro

# If temos lscpu instalado, podemos obter o número de CPU's em nosso sistema e obter estatística para cada usando o comando mpstat.
Cpus = `lscpu | Grep -e "^ CPU (s):" | Cut -f2 -d: | Awk '{print $ 1}'

I = 0

#here nós fazemos loop para obter e imprimir estatísticas de uso da CPU para cada CPU.
Enquanto [$ i -lt $ cpus]

Faz

# Aqui obtemos estatísticas para a CPU e imprimi-lo. Awk comando ajuda para fazer isso, uma vez que a saída não permite que isso fazer com grep. AWK verifica se o terceiro valor é igual à variável $ i (muda de 0 para o número de CPU) e imprime o valor% usr para este CPU
echo "CPU $ i:` mpstat -P ALL | awk -v var = $ i ' {If ($ 3 == var) print $ 4} '`"

#here incrementamos a variável $ i para loop
let i = $ i + 1

feito

Fi

Echo -e "

#here com comando de uptime obtemos média de carga para o sistema, eo comando de corte ajuda a processar o resultado.
Carga média: `uptime | Awk -F'load média: '' {print $ 2} '| Cut -f1 -d, `

#same como antes, mas com o comando awk, verificamos se o sistema é normal (se valor inferior a 1, Caution (se entre 1 e 2) e Insaluável.
Status de estado: `uptime | awk -F'load average: '' print $ 2} '| cut -f1 -d, | awk' {if ($ 1> 2) imprimir

"Pouco saudável"; Else if ($ 1> 1) print "Cuidado"; Else imprimir "Normal"} '`

"

Fi

Echo -e "

************************************************** ****************

Processo

************************************************** ****************

Memória superior usando processos / aplicação

PID% MEM RSS COMANDO

#with ps comando temos uma lista de processos, awk mostram apenas as colunas necessárias. Depois com o comando sort ordenamos por terceira coluna e precisamos apenas do top 10, por isso usamos o comando head
`ps aux | Awk '{print $ 2, $ 4, $ 6, $ 11}' | Sort -k3rn | Cabeça -n 10`

CPU superior usando processo / aplicativo

Com o comando #with top obtemos CPU de topo usando processos, e com a combinação de cabeça e cauda chegamos top 10.
`top b -n1 | Head -17 | Cauda -11`

************************************************** ********************

Uso do disco -> Limiar <90 Normal> 90% Cuidado> 95 Insalubre

************************************************** ********************

"
#we obter o uso do disco com o comando df. -P chave usada para ter postfix como saída (houve problemas com compartilhamentos de rede, etc e -P resolver esses problemas). Nós imprimimos a saída para o arquivo temporário para trabalhar com informações mais do que um.
Df -Pkh | grep -v 'Sistema de arquivos'> /tmp/df.status

#We criar loop para processar linha a linha de df.status
enquanto ler DISK

Faz

#here nós começ a linha do df.status e imprima o resultado formatado com comando do awk
LINE = `echo $ DISK | Awk '{print $ 1, "\ t", $ 6, "\ t", $ 5, "usado", "\ t", $ 4, "espaço livre"

Echo -e $ LINE

eco

Feito </ tmp/df.status

Echo -e "

Estado de saúde "

eco

#here quase o mesmo loop, mas verificamos o uso do disco e imprimimos Normal se valor menor 90, Atenção se entre 90 e 95 e Insalubre se maior que 95)
enquanto lemos DISK

Faz

USAGE = `echo $ DISK | Awk '{print $ 5}' | Cut -f1 -d% `

Se [$ USAGE -ge 95]

então

STATUS = 'Insalubre'

Elif [$ USAGE -ge 90]

então

STATUS = 'Cuidado'

outro

STATUS = 'Normal'

Fi

LINE = `echo $ DISK | Awk '{print $ 1, "\ t", $ 6}' `

#here nós imprimimos resultados com status
echo -ne $ LINE "\ t \ t" $ STATUS

eco

Feito </ tmp/df.status

#here removemos o arquivo
df.status rm /tmp/df.status

#here nós obtemos a memória total, a memória usada, a memória livre, a troca usada e os valores livres da troca e excepto os às variáveis.
TOTALMEM = `free -m | Head -2 | Tail -1 | Awk '{print $ 2}'
# Todas as variáveis ​​como esta são usadas para armazenar valores como float (estamos usando bc para fazer todas as operações matemáticas, já que sem bc todos os valores serão inteiros). Também usamos se
adicionar zero antes do valor, se valor menor que 1024 eo resultado da divisão será menor que 1. TOTALBC = `eco 'scale = 2; if ($ TOTALMEM 0) print 0; $ TOTALMEM / 1024" |
Bc -l` USEDMEM = `free -m | Head -2 | Tail -1 | Awk '{print $ 3}'
USEDBC = `eco 'scale = 2; if ($ USEDMEM 0) print 0; $ USEDMEM / 1024" | bc -l`
FREEMEM = `free -m | Head -2 | Tail -1 | Awk '{print $ 4}' `
FREEBC =` eco 'escala = 2;

TOTALSWAP = `free -m | Tail -1 | Awk '{print $ 2}'
TOTALSBC = `eco 'scale = 2; if ($ TOTALSWAP 0) print 0; $ TOTALSWAP / 1024" |
Bc -l` USEDSWAP = `free -m | Tail -1 | Awk '{print $ 3}'
USEDSBC = `eco 'scale = 2; if ($ USEDSWAP 0) print 0; $ USEDSWAP / 1024" | bc -l`
FREESWAP = `free -m | Tail -1 | Awk '{print $ 4}' `
FREESBC =` echo 'scale = 2; if ($ FREESWAP 0) print 0; $ FREESWAP / 1024 "| bc -l`

Echo -e "

************************************************** ******************

Memória

************************************************** ******************

Memória física

Total \ tUsed \ tFree \ t% Livre

# Como obtemos valores em GB, também obtemos% de uso
dividindo Free por Total $ {TOTALBC} GB \ t $ {USEDBC} GB \ t $ {FREEBC} GB \ t $ ($ FREEMEM * 100 / $ TOTALMEM) )%

Trocar memória

Total \ tUsed \ tFree \ t% Livre

#Same como acima - valores em GB, e da mesma forma que obtemos% de uso
$ {TOTALSBC} GB \ t $ {USEDSBC} GB \ t $ {FREESBC} GB \ t $ ($ FREESWAP * 100 / $ TOTALSWAP) )%
"

}

#here nós fazemos o valor do nome de arquivo, usando hostname, e data.
FILENAME = "health-`hostname` -`date +% y% m% d` -`date +% H% M`.txt"

# Aqui executamos a função e salvamos o resultado no nome do arquivo gerado
sysstat> $ FILENAME

#here nós imprimimos a saída ao usuário.
Echo -e "Arquivo reportado $ FILENAME gerado no diretório atual." RESULTADO $

#here verificamos se o usuário fornece seu endereço de e-mail para enviar e-mail
se ["$ EMAIL"! = '']

então

#if email proviced - verificamos se temos mailx comando para enviar e-mail
STATUS = `que mail`
#if mailx comando não existe no sistema (o comando anterior retornou código de saída diferente de zero nós avisamos ao usuário que mailx não está instalado
se [ ? "! = 0]

então

Echo "O programa 'mail' não está instalado no momento."

#if mailx instalado, enviamos e-mail com relatório para o usuário
mais

Cat $ FILENAME | Mail -s "$ FILENAME" $ EMAIL

Fi

Fi




Imagem: LinOxide.com




Retorno – Relatório de Integridade do sistema


[Root @ linóxido script] # gato health-linoxide.com-140831-0909.txt | Mais

################################################## ################### Relatório de Verificação de
Saúde (CPU, Processo,
Utilização de Disco, Memória) ################## ################################################## #

Nome do host: linoxide.com
Kernel Versão: 3.15.4-x86_64-linoxide342
Tempo de atividade : 7 dias
Última reinicialização: 2014-08-27 08:46

************************************************** *******************
CPU Load -> Threshold <1 Normal> 1 Cuidado,> 2 Insalubre
**************** ************************************************** -benzóico.

CPU0: 0,06

Carga Média: 0.00

Estado de saúde: Normal

************************************************** *******************
Processo
****************************** ***************************************

=> Memória superior usando processos / aplicação

PID% MEM RSS COMANDO
1361 12.6 127896 / usr / lib / systemd / systemd-journald
1642 7.1 72252 / usr / sbin / rsyslogd
1644 1.9 20148 /usr/bin/python
2340 1.8 19092 / sbin / dhclient
1634 1.4 14748 / usr / sbin / NetworkManager
31410 0.8 8724 sshd:
31441 0.7 7888 sshd:
31432 0.7 7784 sshd:
2558 0,5 5988 / usr / sbin / sshd
1 0,5 5412 / sbin / init

=> Início CPU usando processo / aplicação
PID USER PR NI VIRT RES SHR S% CPU% MEM TEMPO + COMANDO
1 root 20 0 98572 5412 2796 S 0.0 0.5 0: 11.82 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0: 00.00 kthreadd
3 raiz 20 0 0 0 0 S 0,0 0,0 0: 00,51 ksoftirqd / 0
5 raiz 0 -20 0 0 0 S 0,0 0,0 0: 00,00 kworker / 0: 0H
6 raiz 20 0 0 0 0 S 0,0 0,0 0: 03,33 kworker / U2: 0
7 raiz 20 0 0 0 0 S 0,0 0,0 0: 04,17 rcu_sched
8 raiz 20 0 0 0 0 S 0,0 0,0 0: 00,00 rcu_bh
9 raiz rt 0 0 0 0 S 0,0 0,0 0: 00,00 migração / 0
10 raiz 0 -20 0 0 0 S 0,0 0,0 0: 00,00 khelper
11 raiz 20 0 0 0 0 S 0,0 0,0 0: 00,00 kdevtmpfs

************************************************** *******************
Uso do disco -> Limiar <90 Normal> 90% Cuidado> 95 Insalubre
**************** ************************************************** -benzóico.

/ Dev / root / 11% usado 13G espaço livre

Devtmpfs / dev 0% usado 495M de espaço livre

Tmpfs / dev / shm 0% usado 496M espaço livre

Tmpfs / run 1% usado 495M espaço livre

Tmpfs / sys / fs / cgroup 0% usado 496M espaço livre

Tmpfs / tmp 0% usado 496M espaço livre

Estado de saúde

/ Dev / root / Normal
devtmpfs / dev Normal
tmpfs / dev / shm Normal
tmpfs / run Normal
tmpfs / sys / fs / cgroup Normal
tmpfs / tmp Normal

************************************************** *******************
Memória
****************************** ***************************************

=> Memória física

Total Usado Grátis% Gratuito

0,96 GB 0,46 GB 0,50 GB 52%

=> Trocar Memória

Total Usado Grátis% Gratuito

0.24GB 0GB 0.24GB 100%

[Root @ linoxide script] #




Download do script:  script linuxhealthcheck.sh





Eu fiz um teste e comigo funcionou bem, considerando que utilizo a distribuição Debian Jessie.

Caso você também utilize esse script, compartilhe o seus resultado nos comentários. 




Fonte desse artigo: linoxide.com - todos os créditos
tags: scripts, ferramentas, integridade,sistema