Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão Script para Monitorar Sinal de Clientes em HTML, sem precisar de SNMP!

    Pessoal, há algum tempo atrás fiz um post divulgado sobre um script que estava desenvolvendo para monitorar sinal dos clientes via página Web de uma maneira mais prática do que a usual via WinBox.

    Como o script naquela época estava muito pouco padrão, não divulguei o mesmo, e agora estou postando ele com as devidas alterações pra que o pessoal possa usar e também aperfeiçoá-lo.

    Vou fazer um passo-a-passo de como rodá-lo, bem como informar o ambiente em que ele é compatível.

    1. Requerimentos Básicos
    1.1 Máquina Linux que interaja com os Pops Mikrotik, melhor dizendo, uma máquina linux com permissão de acesso FTP aos mikrotiks;
    1.2 Possuir Servidor Apache, Tomcat ou outro server web instalado nesta mesma máquina.
    1.3 Nos POPs mikrotik que você for monitorar é necessário seguir os seguinte cenário: A monitoração é feita baseada nas 1.4 Access-List das Interfaces wireless, e obrigatoriamente, é necessário que todos os macs estejam cadastrados nas ACL-lists com comentários individuais para cada mac, ex:

    add mac-address=00:FF:FF:FF:FF:FF interface=wlan1 authentication=yes forwarding=no ap-tx-limit=0 client-tx-limit=0
    private-algo=none private-key="" comment="NomeDoUsuario" disabled=no

    Lembrando que o "comment" não pode ter separação por espaço, tipo: comment="Nome Do Usuario"

    Por fim, se seu ambiente é compatível com as condições acima citadas, o SCRIPT funcionará perfeitamente:

  2. #2

    Padrão Continuando...

    2. Mãos à obra: Segue-se o script inteiro, logo abaixo, irei citar passo a passo como botar pra funcionar:

    Código :
    #!/bin/bash
    # SCRIPT PARA MONITORAMENTO DE SINAL DE CLIENTES MIKROTIK
    # Descrição: Interage com o ftp do mikrotik, coletando dados
    #            referente ao sinal dos clientes (RX,TX,ACK,NOISE...)
    #            e gera uma página web com o resultado filtrado.
     
    # ZERA TODAS A VARIAVES E ARQUIVOS
    ARQUIVO=0
    ARQUIVO=0
    FTP_HOST=0
    FTP_USER=0
    FTP_PASS=0
    NOMEAP=0
    PAGINA=0
    PASTAFILES=0
    PASTAPAGINA=0
    echo > sinal2
    echo > sinal3
    echo > sinal4
     
    #######################################################################################################
    ## CONFIGURAÇÕES GERAIS ###############################################################################
    #######################################################################################################
    ACK_ALARME="91"                                                     # DEFINE VALOR MINIMO PARA O ACK
    SNR_ALARME="30"                                                     # DEFINE VALOR MINIMO PARA SNR
    ARQUIVO="sinal.txt"                                                 # NOME DO ARQUIVO SINAL DO MIKROTIK
    FTP_HOST="10.1.1.1"                                                 # IP DO MIKROTIK
    FTP_USER="admin"                                                    # USUARIO DO FTP  DO MIKROTIK
    FTP_PASS="senha"                                              # SENHA DO FTP DO MIKROTIK
    NOMEAP="ApTeste"                                                  # NOME DO AP
    PAGINA="mkt-apteste.html"                                           # NOME DO ARQUIVO PAGINA HTML
    PASTAFILES="/apteste"                                    # PASTA DE ARMAZENAMENTO LOCAL
    PASTAPAGINA="/srv/www/default/html/"                  # PASTA DE ARMAZENAMENTO PAGINA
    cd $PASTAFILES
     
    # ZERA ARQUIVOS
    echo > $PAGINA
    echo > $PAGINAFILES/$PAGINA
    echo > $PASTAPAGINA/$PAGINA



  3. #3

    Padrão Continuando...

    Código :
    # ROTINA FTP DE DOWNLOAD DO  ARQUIVO (SINAL.TX) DO MIKROTIK
     cd $PASTAFILES
     ftp -in <<EOF
     open $FTP_HOST
     user $FTP_USER $FTP_PASS
     get $ARQUIVO
     bye
     EOF
     
     # ROTINA DE TRATAMENTO DO ARQUIVO PRA GERACAO DO HTML
     cat sinal.txt | grep ";;; " | cut -f1 | awk {'print "="$3'} > sinalusuario
     cat sinal.txt | fmt -w 1 | grep rx-rate > sinalrx
     cat sinal.txt | fmt -w 1 | grep tx-rate > sinaltx
     cat sinal.txt | fmt -w 1 | grep uptime > sinaluptime
     cat sinal.txt | fmt -w 1 | grep last-activity > sinallast
     cat sinal.txt | fmt -w 1 | grep signal-strength > sinalstrength
     cat sinal.txt | fmt -w 1 | grep signal-to-noise > sinalnoise
     cat sinal.txt | fmt -w 1 | grep tx-ccq > sinaltxccq
     cat sinal.txt | fmt -w 1 | grep p-throughput > sinaltrough
     cat sinal.txt | fmt -w 1 | grep ack-timeout > sinalack
     cat sinal.txt | fmt -w 1 | grep distance > sinaldistance
     paste sinalstrength sinalusuario sinalrx sinaltx sinalnoise sinaltxccq sinaltrough sinalack sinaldistance sinaluptime > sinal2.txt
     cat sinal2.txt | sed -e 's/rx-rate/RX/g' | sed -e 's/tx-rate/TX/g' | sed -e 's/uptime/Associado/g' | sed -e 's/signal-strength/sinal/g' | sed -e 's/signal-to-noise/Rel Sinal Ruído/g' | sed -e 's/ack-timeout/ACK/g' | sed -e 's/distance/Distancia/g' | sort -n > sinal3.txt
     cat sinal3.txt | sed 's/[\x09]//g' | sed 's/ /=/g' > sinal4.txt
     TOTAL=`cat $PASTAFILES/sinal4.txt | wc -l`
     
     # ROTINA DE GERACAO DO ARQUIVO HTML BASE
     echo \ "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>" >> $PAGINA
     echo \ "<html xmlns='http://www.w3.org/1999/xhtml'>                                                                              " >> $PAGINA
     echo \ "<head>                                                                                                                   " >> $PAGINA
     echo \ "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />                                               " >> $PAGINA
     echo \ "<title>Monitoramento de Sinal<title>                                                                                     " >> $PAGINA
     echo \ "<style type='text/css'>                                                                                                  " >> $PAGINA
     echo \ "<!--                                                                                                                     " >> $PAGINA
     echo \ ".style1 {color: #000000 font-size: 8px }                                                                                 " >> $PAGINA
     echo \ ".style6 {font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: 88888888px; }                          " >> $PAGINA
     echo \ "-->                                                                                                                      " >> $PAGINA
     echo \ "</style>                                                                                                                 " >> $PAGINA
     echo \ "</head>                                                                                                                  " >> $PAGINA
     echo \ "<body>                                                                                                                   " >> $PAGINA
     echo \ "<div align='center' class='style1'>MONITORAMENTO DE SINAL WIRELESS MIKROTIK ("$NOMEAP")</div>                            " >> $PAGINA
     echo \ "<div align='center' class='style1'>Powered by NetPerdizes 2008</div>                                                     " >> $PAGINA
     echo \ "<div align=left' class='style1'><a href='javascript: history.go(-1)'><< VOLTAR</a></div>                                 " >> $PAGINA
     echo \ "<div align='center' class='style1'><hr></div>                                                                            " >> $PAGINA
     echo \ "<div align='center' class='style1'>Clientes Associados: "$TOTAL"</div>                                                   " >> $PAGINA
     echo \ "<div align='center' class='style1'><hr></div>                                                                            " >> $PAGINA
     echo \ "<table width='100%' border='0' cellpadding='2'>                                                                          " >> $PAGINA
     echo \ "  <tr class='style1'>                                                                                                    " >> $PAGINA
     echo \ "    <td width='14%' bgcolor='#FF9900'><span class='style3'>Usu&aacute;rio</span></td>                                    " >> $PAGINA
     echo \ "    <td width='6%' bgcolor='#FF9900'><span class='style3'>TX</span></td>                                                 " >> $PAGINA
     echo \ "    <td width='6%' bgcolor='#FF9900'><span class='style3'>RX</span></td>                                                 " >> $PAGINA
     echo \ "    <td width='6%%' bgcolor='#FF9900'><span class='style3'>Througput</span></td>                                         " >> $PAGINA
     echo \ "    <td width='8%' bgcolor='#FF9900'><span class='style3'>Uptime</span></td>                                             " >> $PAGINA
     echo \ "    <td width='4%' bgcolor='#FF9900'><span class='style3'>ACK</span></td>                                                " >> $PAGINA
     echo \ "    <td width='4%' bgcolor='#FF9900'><span class='style3'>TX-CCQ</span></td>                                             " >> $PAGINA
     echo \ "    <td width='4%' bgcolor='#FF9900'><span class='style3'>SNR </span></td>                                               " >> $PAGINA
     echo \ "    <td width='50%' bgcolor='#FF9900'><span class='style3'>Sinal</span></td>                                             " >> $PAGINA
     echo \ "  </tr>                                                                                                                  " >> $PAGINA
     
     # ROTINA DE ORGANIZACAO DOS DADOS
     for i in `cat $PASTAFILES/sinal4.txt`; do
     USUARIO=`echo $i | cut -d "=" -f6`
     TX=`echo $i | cut -d "=" -f14`
     RX=`echo $i | cut -d "=" -f10`
     THROUGPUT=`echo $i | cut -d "=" -f28`
     UPTIME=`echo $i | cut -d "=" -f40`
     ACK=`echo $i | cut -d "=" -f32`
     TXCCQ=`echo $i | cut -d "=" -f24`
     SNR=`echo $i | cut -d "=" -f20 | sed 's/dB//g'`
     SINAL=`echo $i | cut -d "=" -f5`
     SNRGRAFICO=`expr $SNR \* 5`
     
     # ROTINA DE VERIFICACAO DE SNR E ACK PARA ALARME VISUAL
     if [ $SNR -lt $SNR_ALARME ]
     then
        GRAFICO='pixelvermelho.png'
     else
        GRAFICO='pixelverde.png'
     fi
     
     if [ $ACK -gt $ACK_ALARME ]
     then
        GRAFICO2='pixelvermelho.png'
     else
        GRAFICO2='pixelverde.png'
     fi
     
     
     # ROTINA DE INSERCAO DE DADOS NO HTML
     echo \ "  <tr>                                                                                                                          " >> $PAGINA
     echo \ "    <td><span class='style1'>"$USUARIO"</span></td>                                                                             " >> $PAGINA
     echo \ "    <td><span class='style1'>"$TX"</span></td>                                                                                  " >> $PAGINA
     echo \ "    <td><span class='style1'>"$RX"</span></td>                                                                                  " >> $PAGINA
     echo \ "    <td><span class='style1'>"$THROUGPUT"</span></td>                                                                           " >> $PAGINA
     echo \ "    <td><span class='style1'>"$UPTIME"</span></td>                                                                              " >> $PAGINA
     echo \ "    <td><span class='style1'>"$ACK "<img src='http://www.netperdizes.com.br/"$GRAFICO2"' height='10px' width='10'></span></td>  " >> $PAGINA
     echo \ "    <td><span class='style1'>"$TXCCQ"</span></td>                                                                               " >> $PAGINA
     echo \ "    <td><span class='style1'>"$SNR"</td>                                                                                        " >> $PAGINA
     echo \ "    <td><span class='style1'><img src='http://www.netperdizes.com.br/"$GRAFICO"' height='10px' width='"$SNRGRAFICO"'>$SINAL</td>" >> $PAGINA
     echo \ "  </tr>                                                                                                                         " >> $PAGINA
     done
     echo \ "                                                                                                                                " >> $PAGINA
     echo \ "</table>                                                                                                                        " >> $PAGINA
     echo \ "<p>&nbsp;</p>                                                                                                                   " >> $PAGINA
     echo \ "<p>&nbsp;</p>                                                                                                                   " >> $PAGINA
     echo \ "</body>                                                                                                                         " >> $PAGINA
     echo \ "</html>                                                                                                                         " >> $PAGINA
     
     # COPIANDO HTML DO ARQUIVO LOCAL PARA PASTA DO SERVIDOR WEB
     cd $PASTAFILES
     cp $PAGINA $PASTAPAGINA

  4. #4
    Moderador Avatar de Magal
    Ingresso
    Mar 2007
    Localização
    Rio de Janeiro
    Posts
    2.043
    Posts de Blog
    118

    Padrão

    Bom, vou testar..



  5. #5

    Padrão

    Tb, vou testar , EXCELENTE material didatico...PARABENS! .....Até que enfim um post de qualidade....ja tava desanimado.

  6. #6

    Padrão

    Siga os procedimentos abaixo pra rodar esse script:

    1. Na máquina linux crie uma pasta e um arquivo como o exemplo abaixo:
    Vamos supor que estejamos na pasta /opt

    Criamos a pasta[[email protected] opt]# mkdir apteste

    Criamos o arquivo
    [[email protected] opt]# cd /opt/apteste/
    [[email protected] apteste]# touch scriptsinal

    Agora copie todo o código que foi postado e cole no arquivo scriptsinal que foi criado:
    [[email protected] apteste]# vi scriptsinal ----> cole o código e digite :wq! para salvar o mesmo.

    Dê permissão de escrita e leitura para o arquivo
    [[email protected] apteste]# chmod +rwx scriptsinal

    Bom, agora vamos mudar alguns parametros do arquivo para adequar a seu ambiente:
    [[email protected] apteste]# vi scriptsinal

    Procure pelas seguintes linhas:

    ACK_ALARME="91"
    Neste parametro você define o valor máximo para o ack-timeout. Se um cliente estiver acima do valor especificado no gráfico do monitoramento aparecerá em vermelho o mesmo, segerindo problemas na conexão. Em geral o valor de 91 é padrão e aceitável na maioria das redes sem fio, porém se consegue excelência na qualidade do acesso mantendo os clientes a 30 de ack-timeout.

    SNR_ALARME="30"
    Neste paramentro você define o valor minimo para o SNR (Relação Sinal Ruído). Se um cliente estiver abaixo do valor especificado, no gráfico do monitoramento aparecerá em vermelho o mesmo, sugerindo problemas na conexão por sinal baixo. SNR em 30 representa sinal de -71.

    ARQUIVO="sinal.txt"
    Deixe em padrão como está, esse é o arquivo que será baixando do mikrotik

    FTP_HOST="10.3.0.3"
    Altere pro endereço ip do seu POP mikrotik

    FTP_USER="admin"
    Altere pro usuario do seu mikrotik

    FTP_PASS="senha123"
    Altera pra senha do seu mikrotik

    NOMEAP="ApTeste"
    Altere pro nome do host do seu mikrotik

    PAGINA="mkt-apteste.html"


    PASTAFILES="/opt/apteste"
    Pasta de armazenamento do script localmente

    PASTAPAGINA="/srv/www/default/html/"
    Pasta de armazenamento de paginas html no seu webserver, onde estará localizado o html gerado por este script
    Pronto! Neste arquivo só alteramos estes parametros.



  7. #7

    Padrão Continuando...

    Agora no seu mikrotik, crie o seguinte script:

    / system script add name="atualizasinal" source="interface wireless registration-table print stats interface=wlan1 le=\"sinal\"" \
    policy=ftp,reboot,read,write,policy,test,winbox,password,sniff

    e no Agendamento, da seguinda forma:

    / system scheduler
    add name="AgendaAtualizaSinal" on-event=atualizasinal start-date=jan/01/1970 start-time=00:00:00 interval=5m comment="" disabled=no

    De volta ao linux, agende também o script pra rodar de 5 em 5 minutos:

    crontab -e

    0-59/5 * * * * . /opt/apteste/scriptsinal

    PRONTO! Se percorreu todos os passos corretamente, seu sistema já estara gerando os graficos de 5 em 5 minutos.
    Basta acessar o seu host de internet da seguinte forma:

    http://dominio.xxx.yy/apteste.html

    E o resultado será algo parecido com isto:

    Segue anexo!

    Obs: Esta seguindo em anexo tb 2 imagens pixelverde e pixelvermelho que voce devera fazer o upload pro seu webserver juntamente a pasta de armazenamento do html, pois essas 2 imagens que vão colorir os gráficos.

    ESPERO TER CONTRIBUIDO COM ESTE SCRIPT PARA AJUDAR O PESSOAL A MONITORAR MELHOR SEUS CLIENTES, BEM COMO PARA PODEREM AJUSTAREM SEUS ATENDIMENTOS E REPAROS E FICO NO AGUARDO DE ALGUMA INOVAÇAO DO MESMO QUE ALGUEM DESENVOLVER EM CIMA DELE. GRATO!!!!!
    Miniaturas de Anexos Miniaturas de Anexos Clique na imagem para uma versão maior

Nome:	         fotomonitor.jpg
Visualizações:	1288
Tamanho: 	236,3 KB
ID:      	2587  
    Imagens Anexas Imagens Anexas   

  8. #8

    Padrão

    amigo, ótimo material..está de parabens!!

    mas qual motivo de não funcionar se o comment com espaços?

    novamente está de parabens..
    valew!!

    abraço!



  9. #9

    Padrão

    Citação Postado originalmente por thenet Ver Post
    amigo, ótimo material..está de parabens!!

    mas qual motivo de não funcionar se o comment com espaços?

    novamente está de parabens..
    valew!!

    abraço!
    Olá Amigo, é pq o script foi escrito com filtragem por delimitador "-" sem espaços, se nas suas acesslist os comment tiverem espaço, o delimitador será interpretado de maneira incorreta, e resultaria em inconsistência de dados na geração de gráficos.

    Mas você pode estar alterando o código do mesmo pra aceitar os espaços.

    Grato.

  10. #10

    Padrão

    Citação Postado originalmente por Kandango Ver Post
    Olá Amigo, é pq o script foi escrito com filtragem por delimitador "-" sem espaços, se nas suas acesslist os comment tiverem espaço, o delimitador será interpretado de maneira incorreta, e resultaria em inconsistência de dados na geração de gráficos.

    Mas você pode estar alterando o código do mesmo pra aceitar os espaços.

    Grato.
    etendi cara, mas problema é que não tenho noção alguma de como fazer isso..poderia me dar uma luz pra eu começar as tentativas?

    agradeço novamente!

    abraço



  11. #11

    Padrão

    Citação Postado originalmente por thenet Ver Post
    etendi cara, mas problema é que não tenho noção alguma de como fazer isso..poderia me dar uma luz pra eu começar as tentativas?

    agradeço novamente!

    abraço

    Amigo! Faz o seguinte dê um export no seu registertable, para mim o que pode ser feito... E agregamos no script pra aceitar espaços.

  12. #12

    Padrão

    Citação Postado originalmente por Kandango Ver Post
    Amigo! Faz o seguinte dê um export no seu registertable, para mim o que pode ser feito... E agregamos no script pra aceitar espaços.
    Opa amigo, no print do registration-table é isso ai que eu ponho em todos clientes:
    Última edição por thenet; 18-02-2009 às 18:02.



  13. #13

    Padrão

    amigo, vc viu esse meu caso?!
    rsrs

    valeu

    abraços

  14. #14
    SUPORTE E CONSULTORIA Avatar de Acronimo
    Ingresso
    Oct 2008
    Localização
    Rio de Janeiro - RJ
    Posts
    2.109
    Posts de Blog
    1

    Padrão

    fiz exato como descreve, mas não consegui, acho que um problema, estou em duvida, o comando que vc manda dar no mk, é em new terminal?



  15. #15
    Moderador Avatar de ederamboni
    Ingresso
    Oct 2004
    Localização
    Montes Claros
    Posts
    880
    Posts de Blog
    13

    Padrão

    Parabens, vou implementar assim que sobrar um tempinho...
    abracos...

  16. #16
    Moderador Avatar de ederamboni
    Ingresso
    Oct 2004
    Localização
    Montes Claros
    Posts
    880
    Posts de Blog
    13

    Padrão

    amigo to tento problemas com o script adaptei o seu para o meu mas ele nao roda o meu ficou assim

    \interface wireless registration-table print stats interface="Setor c" le=\"sinal\"" \

    obs se eu tirar o le=\"sinal\"" \ ele roda perfeito
    Última edição por ederamboni; 17-12-2008 às 11:43.



  17. #17
    Moderador Avatar de ederamboni
    Ingresso
    Oct 2004
    Localização
    Montes Claros
    Posts
    880
    Posts de Blog
    13

    Padrão

    Citação Postado originalmente por ederamboni Ver Post
    amigo to tento problemas com o script adaptei o seu para o meu mas ele nao roda o meu ficou assim

    \interface wireless registration-table print stats interface="Setor c" le=\"sinal\"" \

    obs se eu tirar o le=\"sinal\"" \ ele roda perfeito

    o script rodou depois de uma modificação no propio segue como tive de deicha para ele criar o arquivo nos files do mikrotik

    source o seguinte comando....
    \interface wireless registration-table print stats interface="Setor c" file=sinal


    certo ai parti pra outro problema agora...

    meu linux pega o arquivo no mik certinho de 5 em 5 minutos, geral o apteste.html, mas sem conteudo algum.
    Você tem alguma sugestão?
    abracos...
    Última edição por ederamboni; 17-12-2008 às 13:42.

  18. #18

    Padrão opa

    Bom, a pra min ja n deu certo.
    ta dando erro nos scrip
    Código :
    expr: erro de sintaxe
    ./scriptsinal: line 113: [: -lt: unary operator expected
    ./scriptsinal: line 120: [: -gt: unary operator expected

    ainda n tive tempo de olhar com calma.
    mas o fato e q n deu certo
    acho q isso ficaria mais legal se usar o modulo ssh2 no apache ou ate mesmo o modulo telnet que ja e nativo no apache, dai n precisaria fazer download do arquivo ftp.
    eu uso ssh2 pra cadastrar o mac do cliente no access list junto a um sistema que fiz pra gerenciar o provedor



  19. #19
    Moderador Avatar de ederamboni
    Ingresso
    Oct 2004
    Localização
    Montes Claros
    Posts
    880
    Posts de Blog
    13

    Padrão

    o meu comunicou certinho
    baixou o arquivo
    so que na hora de cria o arquivo da pagina ela fica em branco sem conteudo...
    abracos...

  20. #20

    Padrão hehehelegal

    aki tambem saiu tudo em branco.
    e no corpo ta todo o codigo. vou ver isso com carma