Skip to content

Instantly share code, notes, and snippets.

@renizgo
Created July 15, 2018 15:04
Show Gist options
  • Save renizgo/5f5480c6b0c7379f2d45cc279703c411 to your computer and use it in GitHub Desktop.
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
#!/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