Monitore vários servidores ao mesmo tempo com Apache + shellscript
Publicado por Roberto Fettuccia (última atualização em 22/03/2012)
[ Hits: 4.446 ]
Pessoal estou aqui para compartilhar uma solução desenvolvida por mim mesmo, após inúmeros problemas com alguns servidores acabei por desenvolver um "sisteminha" em shell script.
Objetivo :
O sistema tem por objetivo de realizar determinado teste e retornar o erro, publicando em uma página web que fica atualizando de segundo em segundo, ficando assim um monitoramento em tempo real.
- Instale o apache
- Crie uma pasta dentro de /var/www/monitor
- Verifique as permissões da pasta criada, certifique-se que está com permissão de escrita..
- Instale no diretório /var/www/ os arquivos "html" fornecidos no artigo..
Copie os scripts para /bin
Certifique as permissões 555 para os scripts..
Observe se a página no apache apareceu no navegador http://192.168.0.1/monitor/index.html
Modo de uso:
Chame o script tester no terminal da mesma máquina com o script, com a seguinte sintaxe..
$ tester [nome do servidor] [ip] [service] [status] [tabela1.html]
Obs: vc criará para cada teste a saída com nome diferente, está configurado no arquivo index.html o link da tabela1.html até tabela20.html,
EX:
teste monitoramento 1 : $tester "proxy server" 10.12.0.1 Proxy tabela1.html
teste monitoramento 2 : $tester "apache server" 10.12.0.2 Apache tabela2.html
teste monitoramento 3 : $tester "SQLserver" 10.12.0.3 Sql tabela3.html
Nesta primeira versão o tester somente está realizando um teste de ping com 3 saltos, o tester repassa o resultado do teste para o monitor que desenha a tabela X linkada a página index.html
Estarei analisando outras metodologias para conseguir monitorar determinados serviços, assim podendo ficar mais completo e usual, este sistema pode ser muito útil a provedores.
Façam bom proveito!!!
By Roberto Fettuccia
------------Script monitor-------------- #!/bin/bash clear semntr="$1" ipmntr="$2" stmntr="$4" scmntr="$3" Xouthtm="$5" wwwroot="/var/www/monitor" varmktemp="$(echo $$)" main(){ if [ "$1" == "--help" ]; then fun.help fi if [ -z "$semntr" ] || [ -z "$ipmntr" ] || [ -z "$scmntr" ] || [ -z "$stmntr" ] || [ -z "$Xouthtm" ]; then if [ -z "$semntr" ] ; then echo "Error change NAME string valid!...." fi if [ -z "$ipmntr" ]; then echo "Error change IP string valid!...." fi if [ -z "$scmntr" ]; then echo "Error change SERVICE string valid!...." fi if [ -z "$stmntr" ] || [ "0" =! "$stmntr" ] || [ "1" =! "$stmntr" ] ; then echo "Error change STATUS vallue valid!.... 0 = service error or offline 1 = service ok, online" fi if [ -z "$Xouthtm" ]; then echo "Error change OUTFILE string valid!...." fi fun.help else fun.publica fi } fun.publica(){ unset vxhtm unset updownservice #verify return status for fized color string to $stmntr if [ $stmntr == "0" ]; then updownservice="#FFFF00" # Yellow Vallue varSTATUS="ERROR" # message error strBEG="<b>" # Apply Bold "negrito" strEOF="</b>" # Xcontrast="#000000" else updownservice="#0000FF" # blue Vallue varSTATUS="OK" strBEG="" strEOF="" Xcontrast="#FFFFFF" fi export vxhtm='<META HTTP-EQUIV="REFRESH" CONTENT="5"> <body> <!--tabela dados inicio--> <TABLE WIDTH=100% CELLPADDING=4 CELLSPACING=0 #0000ff> <COL WIDTH=85*> <COL WIDTH=85*> <COL WIDTH=85*> <TR VALIGN=TOP> <TD WIDTH=25% STYLE="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> <!--Servidor--><P STYLE="background: '$Xcontrast'"><FONT COLOR="'$updownservice'">'$strBEG''$semntr''$strEOF'</P> </TD> <TD WIDTH=25% STYLE="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> <!--IP--><P STYLE="background: '$Xcontrast'"><FONT COLOR="'$updownservice'">'$strBEG''$ipmntr''$strEOF'</P> </TD> <TD WIDTH=25% STYLE="border: 1px solid #000000; padding: 0.1cm"> <!--Serviço--><P STYLE="background: '$Xcontrast'"><FONT COLOR="'$updownservice'">'$strBEG''$scmntr''$strEOF'</P> </TD> <TD WIDTH=25% STYLE="border: 1px solid #000000; padding: 0.1cm"> <!--Status--><P STYLE="background: '$Xcontrast'"><FONT COLOR="'$updownservice'">'$strBEG''$varSTATUS''$strEOF'</FONT></P> </TD> </TR> </TABLE> <!--tabela dados fim--> </body>' echo "$vxhtm" > $wwwroot/tmp/$varmktemp.tmp mv $wwwroot/tmp/$varmktemp.tmp $wwwroot/"$Xouthtm" } fun.help(){ echo " Usage .. monitor [name] [ip] [service] [status] [outfile HTML] mail contact : rpaulafettuccia@yahoo.com.br by Roberto Fettuccia" exit } main ------------fim script monitor------------------- ----------script tester---------------- #!/bin/bash ping -c 3 $2 && vtest="1" if [ -z $vtest ] || [ $vtest =! "1" ]; then vtest="0" fi ./monitor "$1" "$2" "$3" "$vtest" "$4" --------------fim script tester-------------- arquivo para colocar no apache /var/www/monitor --------arquivo cabecalho.html-------- <BODY LANG="pt-BR" DIR="LTR"> <P ALIGN=CENTER><BR> </P> <P ALIGN=CENTER><B>MONITOR Web</B></P> <P ALIGN=CENTER><B>Ver 1,0 By Roberto Fettuccia</B></P> <P ALIGN=CENTER><BR><BR></P> <!--tabela cabeçalho inicio--> <TABLE WIDTH=100% CELLPADDING=4 CELLSPACING=0> <COL WIDTH=85*> <COL WIDTH=85*> <COL WIDTH=85*> <TR VALIGN=TOP> <TD WIDTH=25% STYLE="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> <P><B>SERVIDOR</B></P> </TD> <TD WIDTH=25% STYLE="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> <P><B>IP</B></P> </TD> <TD WIDTH=25% STYLE="border: 1px solid #000000; padding: 0.1cm"> <P><B>SERVIÇO</B></P> </TD> <TD WIDTH=25% STYLE="border: 1px solid #000000; padding: 0.1cm"> <P><B>STATUS</B></P> </TD> </TR> </TABLE> <!--tabela cabeçalho fim--> </body> --------fim arquivo cabecalho.html-------- --------inicio arquivo index.html--------- <HTML> <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8"> <META HTTP-EQUIV="REFRESH" CONTENT="3"> <TITLE>monitoramento de servicos</TITLE> <STYLE TYPE="text/css"> </STYLE> </HEAD> <FRAMESET ROWS="45%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%,10%" FRAMEBORDER="0" FRAMESPACING="0"> <FRAME SRC="./cabecalho.html" NAME="superior" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela1.html" NAME="tb1" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela2.html" NAME="tb2" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela3.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela4.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela5.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela6.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela7.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela8.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela9.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela10.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela11.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela12.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela13.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela14.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela15.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela16.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela17.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela18.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela19.html" NAME="tb3" NORESIZE SCROLLING="NO"> <FRAME SRC="./tabela20.html" NAME="tb3" NORESIZE SCROLLING="NO"> </FRAMESET> </BODY> </HTML> --------fim arquivo index.html---------
gera saída com substituindo coluna por outra (substr)
Fluxbox: Wallpapers aleatórios
Iniciar firewall quando houver rede habilitada (Internet)
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Estou com sede em aprender sobre o nosso querido Linux. (1)
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta