Created
July 15, 2018 15:04
-
-
Save renizgo/5f5480c6b0c7379f2d45cc279703c411 to your computer and use it in GitHub Desktop.
Script de análise de atividades básicas de nível 1 do Balanceador de Carga BIG IP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
while true | |
do | |
clear; | |
echo -e ' _ _ _ ____ ___ ____ ___ ____' | |
echo -e ' / \ _ __ __ _| (_)___ ___ | __ )_ _/ ___|_ _| _ \' | |
echo -e ' / _ \ | _ \ / _ | | / __|/ _ \ | _ \| | | _ | || |_) |' | |
echo -e ' / ___ \| | | | (_| | | \__ \ __/ | |_) | | |_| || || __/' | |
echo -e ' /_/ \_\_| |_|\__,_|_|_|___/\___| |____/___\____|___|_|' | |
echo -e'' | |
echo " © Created by Renato Marigo & Rafael Casado" | |
#Diretorio que sera criado para a analise dos logs | |
DIRANALISE="/var/log/analise" | |
############################################################## | |
#O Passo a seguir checa se o diretorio existe, senao ele cria# | |
#if -f para arquivo e -e para diretorio # | |
############################################################## | |
##################### | |
#Criando o diretório# | |
##################### | |
echo " " | |
echo "Verificando se o diretorio de analise ($DIRANALISE) esta criado" | |
if [ -e "/var/log/analise" ] | |
then | |
echo "Diretorio $DIRANALISE Encontrado" | |
else | |
echo "Diretorio $DIRANALISE não encontrado" | |
echo "Criando o diretorio $DIRANALISE" | |
mkdir /var/log/analise | |
echo "Diretório $DIRANALISE criado" | |
fi | |
################################# | |
#Fim da verificacao do diretorio# | |
################################# | |
################################### | |
#Definindo as variáveis do sistema# | |
################################### | |
HOSTNAME="$HOSTNAME" | |
LOGS="/var/log/" | |
LOGLTM="ltm" | |
LOGLTMX='ltm.[1-9].gz' | |
DATE=`date +%d%m%Y` | |
############################### | |
#Fim da definicao de variaveis# | |
############################### | |
########################## | |
#Criando o Menu de opcoes# | |
########################## | |
echo " " | |
echo "####################################################################" | |
echo "###################### MENU DE OPCOES ########################" | |
echo "####################################################################" | |
echo " " | |
echo " Escolha umas das opcoes abaixo: " | |
echo " " | |
echo " 1 - Verificar erros conhecidos nos LOGs do LTM" | |
echo " 2 - Digitar algo a ser verificado nos arquivos de LOG" | |
echo " 3 - Verificar se o BIGIP gerou Core Dump" | |
echo " 4 - Realizar o Backup do BIG-IP" | |
echo " 5 - Gerar o Qkview do BIG-IP" | |
echo " 6 - Enviar os arquivos gerados para um servidor de SFTP" | |
echo " 7 - Enviar os arquivos gerados para um servidor de FTP" | |
echo " " | |
echo " Obs: Para sair digite a letra \"q\"" | |
######################## | |
#FIM do Menu de opções # | |
######################## | |
echo " " | |
printf " Digite uma das opções acima: " | |
read OPCAO | |
case $OPCAO in | |
q) | |
exit;; | |
1) #Verifica os erros conhecidos do BIG-IP | |
#Verifica erros nos LOGS "err" | |
zmore $LOGS$LOGLTM | grep -w err 1>$DIRANALISE\/errltm; | |
zmore $LOGS$LOGLTMX | grep -w err 1>>$DIRANALISE\/errltm; | |
cat $DIRANALISE/errltm | wc -l >$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "aggressive mode" | |
zmore $LOGS$LOGLTM | grep aggressive\ mode 1>$DIRANALISE\/aggressive_mode; | |
zmore $LOGS$LOGLTMX | grep Inet\ port\ exhaustion 1>>$DIRANALISE\/aggressive_mode; | |
cat $DIRANALISE/aggressive_mode | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "inet port exaustion" | |
zmore $LOGS$LOGLTM | grep Inet\ port\ exhaustion 1>$DIRANALISE\/Inet_port_exhaustion; | |
zmore $LOGS$LOGLTMX | grep Inet\ port\ exhaustion 1>>$DIRANALISE\/Inet_port_exhaustion; | |
cat $DIRANALISE/Inet_port_exhaustion | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "cookie" | |
zmore $LOGS$LOGLTM | grep cookie 1>$DIRANALISE\/syn_cookie; | |
zmore $LOGS$LOGLTMX | grep cookie 1>>$DIRANALISE\/syn_cookie; | |
cat $DIRANALISE/syn_cookie | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Can't connect" | |
zmore $LOGS$LOGLTM | grep Can\'t\ connect 1>$DIRANALISE\/cant_connect; | |
zmore $LOGS$LOGLTMX | grep Can\'t\ connect 1>>$DIRANALISE\/cant_connect; | |
cat $DIRANALISE/cant_connect | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "offline" | |
zmore $LOGS$LOGLTM | grep offline 1>$DIRANALISE\/offline; | |
zmore $LOGS$LOGLTMX | grep offline 1>>$DIRANALISE\/offline; | |
cat $DIRANALISE/offline | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Leaving active" | |
zmore $LOGS$LOGLTM | grep Leaving\ active 1>$DIRANALISE\/leaving_active; | |
zmore $LOGS$LOGLTMX | grep Leaving\ active 1>>$DIRANALISE\/leaving_active; | |
cat $DIRANALISE/leaving_active | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Standby" | |
zmore $LOGS$LOGLTM | grep -i Standby 1>$DIRANALISE\/standby; | |
zmore $LOGS$LOGLTMX | grep -i Standby 1>>$DIRANALISE\/standby; | |
cat $DIRANALISE/standby | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "tmm fails" | |
zmore $LOGS$LOGLTM | grep "tmm\ fails" 1>$DIRANALISE\/tmm_fails; | |
zmore $LOGS$LOGLTMX | grep "tmm\ fails" 1>>$DIRANALISE\/tmm_fails; | |
cat $DIRANALISE/tmm_fails | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "restart" | |
zmore $LOGS$LOGLTM | grep "restart" 1>$DIRANALISE\/logrestart; | |
zmore $LOGS$LOGLTMX | grep "restart" 1>>$DIRANALISE\/logrestart; | |
cat $DIRANALISE/logrestart | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Insufficient memory" | |
zmore $LOGS$LOGLTM | grep "Insufficient\ memory" 1>$DIRANALISE\/insufficient_memory; | |
zmore $LOGS$LOGLTMX | grep "Insufficient\ memory" 1>>$DIRANALISE\/insufficient_memory; | |
cat $DIRANALISE/insufficient_memory | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "MCP connection is up" | |
zmore $LOGS$LOGLTM | grep "MCP\ connection\ is\ up" 1>$DIRANALISE\/mcp_connection_is_up; | |
zmore $LOGS$LOGLTMX | grep "MCP\ connection\ is\ up" 1>>$DIRANALISE\/mcp_connection_is_up; | |
cat $DIRANALISE/mcp_connection_is_up | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Leaving Standby for Active" | |
zmore $LOGS$LOGLTM | grep "Leaving\ Standby\ for\ Active" 1>$DIRANALISE\/leaving_standby; | |
zmore $LOGS$LOGLTMX | grep "Leaving\ Standby\ for\ Active" 1>>$DIRANALISE\/leaving_standby; | |
cat $DIRANALISE/leaving_standby | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Leaving Offline for Standby" | |
zmore $LOGS$LOGLTM | grep "Leaving\ Offline\ for\ Standby" 1>$DIRANALISE\/leaving_offline; | |
zmore $LOGS$LOGLTMX | grep "Leaving\ Offline\ for\ Standby" 1>>$DIRANALISE\/leaving_offline; | |
cat $DIRANALISE/leaving_offline | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "shutdown signal 15" | |
zmore $LOGS$LOGLTM | grep "shutdown\ signal\ 15" 1>$DIRANALISE\/shutdown_signal; | |
zmore $LOGS$LOGLTMX | grep "shutdown\ signal\ 15" 1>>$DIRANALISE\/shutdown_signal; | |
cat $DIRANALISE/shutdown_signal | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "boot_marker" | |
zmore $LOGS$LOGLTM | grep "boot_marker" 1>$DIRANALISE\/boot_marker; | |
zmore $LOGS$LOGLTMX | grep "boot_marker" 1>>$DIRANALISE\/boot_marker; | |
cat $DIRANALISE/boot_marker | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Packet rejected" | |
zmore $LOGS$LOGLTM | grep "Packet\ rejected" 1>$DIRANALISE\/packet_rejected; | |
zmore $LOGS$LOGLTMX | grep "Packet\ rejected" 1>>$DIRANALISE\/packet_rejected; | |
cat $DIRANALISE/packet_rejected | wc -l >>$DIRANALISE\/relatorio; | |
#Verifica erros de LOGS "Connection Error" | |
zmore $LOGS$LOGLTM | grep "Connection\ Error" 1>$DIRANALISE\/connection_error; | |
zmore $LOGS$LOGLTMX | grep "Connection Error" 1>>$DIRANALISE\/connection_error; | |
cat $DIRANALISE/connection_error | wc -l >>$DIRANALISE\/relatorio; | |
################################ | |
#Criar o cabecalho do relatorio# | |
################################ | |
echo -e ' ____ _ _ _'>$DIRANALISE\/cabecalho | |
echo -e ' | _ \ ___| | __ _| |_ ___ _ __(_) ___'>>$DIRANALISE\/cabecalho | |
echo -e ' | |_) / _ \ |/ _` | __/ _ \| '__\ \| \|/ _ \\''>>$DIRANALISE\/cabecalho | |
echo -e ' | _ < __/ | (_| | || (_) | | | | (_) |'>>$DIRANALISE\/cabecalho | |
echo -e ' |_| \_\___|_|\__,_|\__\___/|_| |_|\___/'>>$DIRANALISE\/cabecalho | |
################################ | |
#FIM o cabecalho do relatorio# | |
################################ | |
#Adicionando os indices no arquivo relatorio | |
sed -i "1s/^/ 1- Erros do LTM (err) /g" $DIRANALISE\/relatorio; | |
sed -i "2s/^/ 2- Erros do LTM (Aggressive Mode): /g" $DIRANALISE\/relatorio; | |
sed -i "3s/^/ 3- Erros do LTM (Inet Port Exaustion): /g" $DIRANALISE\/relatorio; | |
sed -i "4s/^/ 4- Erros do LTM (Syn cookie): /g" $DIRANALISE\/relatorio; | |
sed -i "5s/^/ 5- Erros do LTM (Can't connect): /g" $DIRANALISE\/relatorio; | |
sed -i "6s/^/ 6- Erros do LTM (Offline): /g" $DIRANALISE\/relatorio; | |
sed -i "7s/^/ 7- Erros do LTM (Leaving active): /g" $DIRANALISE\/relatorio; | |
sed -i "8s/^/ 8- Erros do LTM (Standby): /g" $DIRANALISE\/relatorio; | |
sed -i "9s/^/ 9- Erros do LTM (Tmm fails): /g" $DIRANALISE\/relatorio; | |
sed -i "10s/^/ 10- Erros do LTM (Restart): /g" $DIRANALISE\/relatorio; | |
sed -i "11s/^/ 11- Erros do LTM (Insufficient memory): /g" $DIRANALISE\/relatorio; | |
sed -i "12s/^/ 12- Erros do LTM (MCP connection is up): /g" $DIRANALISE\/relatorio; | |
sed -i "13s/^/ 13- Erros do LTM (Leaving Standby for Active): /g" $DIRANALISE\/relatorio; | |
sed -i "14s/^/ 14- Erros do LTM (Leaving Offline for Standby): /g" $DIRANALISE\/relatorio; | |
sed -i "15s/^/ 15- Erros do LTM (Received shutdown signal 15): /g" $DIRANALISE\/relatorio; | |
sed -i "16s/^/ 16- Erros do LTM (boot_marker): /g" $DIRANALISE\/relatorio; | |
sed -i "17s/^/ 17- Erros do LTM (Packet rejected): /g" $DIRANALISE\/relatorio; | |
sed -i "18s/^/ 18- Erros do LTM (Connection Error): /g" $DIRANALISE\/relatorio; | |
clear; | |
echo''; | |
cat $DIRANALISE\/cabecalho; | |
echo''; | |
echo''; | |
cat $DIRANALISE\/relatorio; | |
echo ''; | |
echo ''; | |
echo " Deseja visualizar alguns dos logs gerados?"; | |
printf " Digite o número do log ou \"q\" para sair: "; | |
read OPCAO; | |
case $OPCAO in | |
1) | |
cat $DIRANALISE\/errltm | less;; | |
2) | |
cat $DIRANALISE\/aggressive_mode | less;; | |
3) | |
cat $DIRANALISE\/Inet_port_exhaustion | less;; | |
4) | |
cat $DIRANALISE\/syn_cookie | less;; | |
5) | |
cat $DIRANALISE\/cant_connect | less;; | |
6) | |
cat $DIRANALISE\/offline | less;; | |
7) | |
cat $DIRANALISE\/leaving_active | less;; | |
8) | |
cat $DIRANALISE\/standby | less;; | |
9) | |
cat $DIRANALISE\/tmm_fails | less;; | |
10) | |
cat $DIRANALISE\/logrestart | less;; | |
11) | |
cat $DIRANALISE\/insufficient_memory | less;; | |
12) | |
cat $DIRANALISE\/mcp_connection_is_up | less;; | |
13) | |
cat $DIRANALISE\/leaving_standby | less;; | |
14) | |
cat $DIRANALISE\/leaving_offline | less;; | |
15) | |
cat $DIRANALISE\/shutdown_signal | less;; | |
16) | |
cat $DIRANALISE\/boot_marker | less;; | |
17) | |
cat $DIRANALISE\/packet_rejected | less;; | |
18) | |
cat $DIRANALISE\/connection_error | less;; | |
q) | |
;; | |
*) | |
echo " Favor digitar uma opção valida" | |
sleep 3 | |
esac;; | |
2) #Digitar algo a ser verificado nos arquivos de LOG | |
echo '' | |
echo '' | |
echo -e 'Obs: Na consulta é indiferente letras maiusculas e minusculas'; | |
printf 'Digite a informação que deseja procurar nos LOGs: ' | |
read PESQUISA; | |
echo '' | |
echo '' | |
zmore $LOGS$LOGLTM | grep -i "$PESQUISA" 1>$DIRANALISE\/pesquisa_interativa; | |
zmore $LOGS$LOGLTMX | grep -i "$PESQUISA" 1>>$DIRANALISE\/pesquisa_interativa; | |
cat $DIRANALISE/pesquisa_interativa | wc -l >$DIRANALISE\/relatorio_interativo; | |
sed -i "1s/^/Ocorrencias encontradas da(s) palavra(s) $PESQUISA: /g" $DIRANALISE\/relatorio_interativo; | |
cat $DIRANALISE\/relatorio_interativo; | |
printf "Deseja exibir estas informações? "; | |
read input; | |
if [[ $input == "Y" || $input == "y" ]]; then | |
echo '' | |
cat $DIRANALISE\/pesquisa_interativa | less | |
else | |
echo "" | |
fi;; | |
3) #Verfica a existencia de arquivos core e faz uma copia para /var/log/analise/core/ | |
DIRCORE="/var/log/analise/core/" | |
DIRCOREORIG="/var/core/" | |
if [ -e "$DIRCORE" ]; then | |
echo "Diretorio $DIRCORE Encontrado" | |
sleep 1 | |
else | |
echo "Diretorio $DIRCORE não encontrado" | |
echo "Criando o diretorio..." | |
mkdir "/var/log/analise/core/" | |
sleep 1 | |
fi | |
find $DIRCOREORIG -mtime -7 -type f -exec ls -l {} \; | cut -d "/" -f4 > /tmp/coredumps.txt | |
COUNT=`cat /tmp/coredumps.txt | wc -l` | |
i=1 | |
while [ $i -le $COUNT ]; | |
do | |
FILE=`sed -n "$i"p /tmp/coredumps.txt` | |
CHECK_CORE1=`md5sum /var/core/$FILE | cut -d " " -f1` | |
cp $DIRCOREORIG$FILE $DIRCORE | |
CHECK_CORE2=`md5sum /var/log/analise/core/$FILE | cut -d " " -f1` | |
i=`expr $i + 1` | |
if [ "$CHECK_CORE2" != "$CHECK_CORE1" ]; then | |
echo "O arquivo $FILE esta corrompido, tente novamente!" | |
break | |
else | |
echo "Arquivo $FILE salvo no diretorio $DIRCORE" | |
fi | |
done | |
sleep 4 | |
rm -f /tmp/coredumps.txt;; | |
4) #Executa o backup do BIG-IP e copia para o diretorio /var/log/analise/backup/. | |
DIRBACKUP="/var/log/analise/backup/" | |
if [ -e "$DIRBACKUP" ]; then | |
echo "Diretorio $DIRBACKUP Encontrado" | |
echo "" | |
sleep 1 | |
else | |
echo "Diretorio $DIRBACKUP não encontrado" | |
echo "" | |
echo "Criando o diretorio..." | |
mkdir "/var/log/analise/backup/" | |
echo "" | |
sleep 1 | |
fi | |
tmsh save sys ucs "$HOSTNAME"_$DATE.ucs | |
echo "" | |
CHECK_BACKUP1=`md5sum /var/local/ucs/""$HOSTNAME"_$DATE.ucs" | cut -d ' ' -f1` | |
mv /var/local/ucs/""$HOSTNAME"_$DATE.ucs" /var/log/analise/backup/ | |
CHECK_BACKUP2=`md5sum /var/log/analise/backup/""$HOSTNAME"_$DATE.ucs" | cut -d ' ' -f1` | |
if [ "$CHECK_BACKUP2" != "$CHECK_BACKUP1" ]; then | |
echo "ERRO: Backup não foi realizado. Tente novamente!" | |
echo "" | |
else | |
echo "Backup realizado com sucesso." | |
echo "Arquivo "$HOSTNAME"_$DATE.ucs salvo no diretorio $DIRBACKUP" | |
echo "" | |
sleep 4 | |
fi;; | |
5) #Gera o Qkview do BIG-IP e copia para o diretorio /var/log/analise/qkview. | |
DIRQKVIEW="/var/log/analise/qkview/" | |
if [ -e "$DIRQKVIEW" ]; then | |
echo " Diretorio $DIRQKVIEW Encontrado" | |
sleep 1 | |
else | |
echo " Diretorio $DIRQKVIEW não encontrado" | |
echo " Criando o diretorio... " | |
mkdir "/var/log/analise/qkview/" | |
sleep 1 | |
fi | |
echo "" | |
echo " Aguarde enquanto o Qkview esta sendo gerado..." | |
echo " Este processo pode demorar alguns minutos" | |
echo "" | |
tmsh qkview &> /dev/null | |
CHECK_QKVIEW1=`md5sum /var/tmp/$HOSTNAME.qkview | cut -d ' ' -f1` | |
mv /var/tmp/$HOSTNAME.qkview /var/log/analise/qkview/ | |
CHECK_QKVIEW2=`md5sum /var/log/analise/qkview/$HOSTNAME.qkview | cut -d ' ' -f1` | |
if [ "$CHECK_QKVIEW2" != "$CHECK_QKVIEW1" ]; then | |
echo "ERRO: Qkview não foi realizado. Tente novamente!" | |
else | |
echo "Qkview gerado com sucesso!!!" | |
echo "Arquivo $HOSTNAME.qkview salvo no diretorio $DIRQKVIEW" | |
sleep 3 | |
fi;; | |
6) | |
echo "Aguarde enquanto estamos compactando suas informações... " | |
tar -cvzf /tmp/$HOSTNAME$DATE.tgz /var/log/analise/ 1&>/dev/null | |
echo " " | |
printf "Digite o IP do servidor SFTP: " | |
read IP | |
printf "Digite o usuario: " | |
read USER | |
echo " " | |
cd /tmp/ | |
/usr/bin/sftp $USER@$IP <<EOF | |
cd /$USER/ | |
mput $HOSTNAME$DATE.tgz | |
quit | |
EOF | |
rm -f /tmp/$HOSTNAME$DATE.tgz | |
sleep 2;; | |
7) | |
echo "Aguarde enquanto estamos compactando suas informações... " | |
tar -cvzf /tmp/$HOSTNAME$DATE.tgz /var/log/analise/ 1&>/dev/null | |
echo " " | |
printf "Digite o IP do servidor FTP: " | |
read IP | |
printf "Digite o usuario: " | |
read USER | |
printf "Digite a senha: " | |
read PASSWORD | |
echo " " | |
cd /tmp/ | |
ftp -ivn $IP << FTP | |
user $USER $PASSWORD | |
cd /$USER/ | |
mput $HOSTNAME$DATE.tgz | |
bye | |
FTP | |
rm -f /tmp/$HOSTNAME$DATE.tgz | |
sleep 4;; | |
*) | |
echo "Você tem de entrar com um parâmetro válido" | |
sleep 2;; | |
esac | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment