Monitore vários servidores ao mesmo tempo com Apache + shellscript
Publicado por Roberto Fettuccia (última atualização em 22/03/2012)
[ Hits: 4.563 ]
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---------
Criar pacotes .deb apartir de script
Calculadora de host de uma rede
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como gerar um podcast a partir de um livro em PDF
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Resolvendo o erro "libQt6Widgets.so.6: cannot open shared object file" no Linux
Como instalar protetores de tela (Debian e derivados)
Conheça a 4Devs, caixa de ferramentas online para desenvolvedores
Como converter um vídeo MP4 para um GIF para publicar no README.md do seu repositório Github
Driver de rede realtek 8821ce bugado (1)
Problemas de compartilhame... de impressora no Ubuntu 24.04 (3)