Pular para o conteúdo

Bash: Gráficos estatísticos de tráfego de rede

Dica publicada em Shell Script / Miscelânea
Sandro Marcell SMarcell
Hits: 5.979 Categoria: Shell Script Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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:
  • 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:
Linux: Bash: Gráficos estatísticos de tráfego de rede
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##*/}
	
	
	
	
	
	
	
		
		
$(for i in ${ifaces[@]}; do echo "
\
" done)
FIM # 2o: Gerar pagina especifica para cada interface com os periodos definidos for i in ${ifaces[@]}; do cat <<- FIM > ${DIR_WWW}/${i}.html ${0##*/}
$(for p in $PERIODOS; do echo "
\
" done)
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

Download do código-fonte: rrd_network.sh

Faloura!!!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

AWK - Validando endereços IPv4

Copiando arquivos com caracteres especiais

Squid - Limitando números de conexões simultâneas

Man pages coloridas

Substituir espaços em branco por underlines em nome de arquivos

ShellDocTemplate - Template para documentação de códigos em Shell Script

Sistema de backup em shell script

Perseidas - Snort + Suricata + ClamAV + Fail2ban

Iniciando automaticamente o Firestarter com o modo gráfico sem senha

Proxy sem autenticação - Configurando através do terminal

Contribuir com comentário

Entre na sua conta para comentar.