Bash: Gráficos estatísticos de tráfego de rede
Dica publicada em Shell Script / Miscelânea
Bash: Gráficos estatísticos de tráfego de rede
Depois enfrentar alguns problemas bem estranhos após implementar o MRTG aqui onde trabalho, resolvi criar minha "própria" versão do mesmo (quanta pretensão hein... rsrsrs) em shell script apenas para monitorar o quanto de download/upload estava ocorrendo aqui na rede. Para tal usei:
A configuração e uso do script é bem simples, bastando fazer o seguinte:
Alterar as variáveis globais conforme necessário.
Executar o script para gerar as bases de dados:
# ./nome_script.sh
Executar novamente o script, mas agora para gerar as páginas .html:
# ./nome_script.sh -html
Agora agende no cron do usuário root a execução do script a cada 5 minutos:
E finalmente acesse via navegador web a página HTML gerada.
Feito tudo isso você terá uma página mais ou menos como esta: Tudo muito simples e funcional. :)
Segue o código do script:
Download do código-fonte: rrd_network.sh
Faloura!!!
- RRDtool v1.4.7
- Bash v4.1.10
- Lighttpd v1.4.35
- Linux 2.6.37.6
A configuração e uso do script é bem simples, bastando fazer o seguinte:
Alterar as variáveis globais conforme necessário.
Executar o script para gerar as bases de dados:
# ./nome_script.sh
Executar novamente o script, mas agora para gerar as páginas .html:
# ./nome_script.sh -html
Agora agende no cron do usuário root a execução do script a cada 5 minutos:
*/5 * * * * /caminho/para/nome_script.sh > /dev/null 2>&1
E finalmente acesse via navegador web a página HTML gerada.
Feito tudo isso você terá uma página mais ou menos como esta: Tudo muito simples e funcional. :)
Segue o código do script:
#!/bin/bash # # Copyleft 2016 Sandro Marcell# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. # PATH='/bin:/sbin:/usr/bin:/usr/sbin' LC_ALL='pt_BR.UTF-8' # Como utilizar este script: # # 1 - Altera as VARIAVEIS GLOBAIS conforme necessario # 2 - Execute o script para gerar as bases de dados # root> ./nome_script.sh # 3 - Execute novamente o script, mas agora para gerar as paginas .html # root> ./nome_script.sh --html # 4 - Agende no cron do usuario root a execucao do mesmo (de 5 em 5 min.) # */5 * * * * /caminho/para/nome_script.sh > /dev/null 2>&1 # 5 - Acesse as paginas .html geradas atraves dum navegador web # # Desenvolvido com: rrdtool v1.4.7, Bash v4.1.10 e Linux 2.6.37.6 # Diretorio onde serao armazenadas as bases de dados do rrdtool BASES_RRD='/var/lib/rrd' # Diretorio do servidor web onde serao armazenados os arquivos html/png gerados DIR_WWW='/var/www/html/rrdnet' # Gerar os graficos para os seguintes periodos de tempo PERIODOS='day week month year' # Interfaces de rede que serao monitoradas # Este vetor deve ser definido da seguinte forma: # ... # Ex.: Supondo que seu servidor possua tres interfaces de rede, onde # eth0 = Link para a internet # eth1 = Link da LAN # eth2 = Link para a DMZ # entao faca: # INTERFACES=('eth0' 'Link internet' 'eth1' 'Link LAN' 'eth2' 'Link DMZ') INTERFACES=('lo' 'Loopback' 'eth0' 'Link LAN') # Criando os diretorios de trabalho caso nao existam [ ! -d "$BASES_RRD" ] && mkdir -p "$BASES_RRD" [ ! -d "$DIR_WWW" ] && mkdir -p "$DIR_WWW" # Funcao principal que sera responsavel pela coleta e armazenamento/atualizacao # das bases de dados rrd function coletarDados { declare -a args=("${INTERFACES[@]}") # Aquele POG basico... ^_^ while [ ${#args[@]} -ne 0 ]; do iface="${args[0]}" # Interface a ser monitorada desc="${args[1]}" # Descricao da interface monitorada args=("${args[@]:2}") # Coletando os valores recebidos/enviados pela interface # Obs.: Os valores sao coletados em bytes mas ao se gerar # os graficos, esses dados serao convertidos para bits local bytes_rec=$( /dev/null [ $? -gt 0 ] && return 1 done return 0 } # Funcao que ira criar as paginas .html function gerarHTML { declare -a ifaces local titulo='Gráficos estatísticos de tráfego de rede' # Filtrando o vetor $INTERFACES para retornar somente as interfaces de rede for ((i = 0; i <= ${#INTERFACES[@]}; i++)); do ((i % 2 == 0)) && ifaces+=("${INTERFACES[$i]}") done echo 'Gerando paginas HTML...' # 1o: Gerar a pagina index.html cat <<- FIM > ${DIR_WWW}/index.html ${0##*/} FIM # 2o: Gerar pagina especifica para cada interface com os periodos definidos for i in ${ifaces[@]}; do cat <<- FIM > ${DIR_WWW}/${i}.html$titulo
($(hostname))${0##*/} $titulo
($(hostname))$(for p in $PERIODOS; do echo "FIM done return 0 } # Gerar os arquivos .html se for o caso # Chamada do script: ./nome_script.sh --html if [ "$1" == '--html' ]; then gerarHTML exit 0 fi # Coletando dados e gerando os graficos # Chamada do script: ./nome_script.sh coletarDados" done)
Download do código-fonte: rrd_network.sh
Faloura!!!