Como configurar o Munin para monitorar o ppp0

0

Estou usando o Munin no meu laptop Ubuntu do Jaunty. Ele mostra ótimos gráficos para tudo, exceto ppp0, que eu uso para conectar à internet. Por isso, preciso configurar o munin para mostrar os gráficos de uso do ppp0 .

Eu tentei ler a documentação e alguns tutoriais, e adicionei if_ppp0 e if_error_ppp0 no diretório do plugin do nó munin. Criei dois links simbólicos, como estou suposto, que aponta para os plugins corretos, if_ e if_error (apenas rastreou o que é feito para if_eth0 e if_error_eth0 e fez o mesmo para ppp0). Mas isso não é suficiente. ppp0 não está entre os gráficos.

Não consigo encontrar nenhuma linha de configuração que sugira edição que inclua ppp0 no pool de monitoramento. É um pouco surpreendente que não há nada escrito em qualquer lugar sobre o ppp, considerando o quão popular Munin é.

Eu sou bom com Perl e bash, também programado rrd antes. Então eu editei o plugin para o arquivo if_ e if_error perl e mudei o regex que se parece com "eth | wlan | ...." para "eth | ppp | wlan | ....". Nada é quebrado por isso, nada é fixo também. Parece que tenho que fazer outra coisa em outro lugar, mas não sei o que é. Por favor ajude.

    
por vulcan_hacker 14.09.2009 / 08:14

1 resposta

2

O script eth padrão usa o ethtool, que não funciona em um link ppp.

Além disso, o script eth usa COUNTER ao invés de DERIVE, o que lhe dará picos de energia toda vez que você reconectar o link ppp.

Aqui está o meu script (mude para cima.max, down.max para a largura de banda dos links ppp) ...

#!/bin/sh

INTERFACE='basename $0 | sed 's/^if_//g''

if [ "$1" = "autoconf" ]; then
    if [ -r /proc/net/dev ]; then
        echo yes
        exit 0
    else
        echo "no (/proc/net/dev not found)"
        exit 1
    fi
fi

if [ "$1" = "suggest" ]; then
    if [ -r /proc/net/dev ]; then
        egrep '^ *(ppp|eth|wlan|ath|ra|msh|venet|veth)[0-9]+:' /proc/net/dev | cut -f1 -d: | sed 's/ //g'
        exit 0
    else
        exit 1
    fi
fi

if [ "$1" = "config" ]; then

    echo "graph_order down up" 
    echo "graph_title $INTERFACE traffic"
    echo 'graph_args --base 1000'
    echo 'graph_vlabel bits in (-) / out (+) per ${graph_period}'
    echo 'graph_category network'
    echo "graph_info This graph shows the traffic of the $INTERFACE network interface. Please note that the traffic is shown in bits per second, not bytes. IMPORTANT: Since the data source for this plugin use 32bit counters, this plugin is really unreliable and unsuitable for most 100Mb (or faster) interfaces, where bursts are expected to exceed 50Mbps. This means that this plugin is unsuitable for most production environments. To avoid this problem, use the ip_ plugin instead."
    echo 'down.label received'
        echo 'down.type DERIVE'
        echo 'down.graph no'
        echo 'down.cdef down,8,*'
        echo 'up.label bps'
    echo 'up.type DERIVE'
    echo 'up.negative down'
    echo 'up.cdef up,8,*'
    case "$INTERFACE" in
        ath*|wlan*|ra*)
            echo -n "up.info Traffic of the $INTERFACE interface. Maximum speed is "
            which iwlist >/dev/null 2>/dev/null || echo "undeterminable (please install iwlist)."
            iwlist $INTERFACE rate 2>/dev/null | awk '/Current Bit Rate/ { split ($0, arr, "[=:]"); split (arr[2], arr2, "M"); print (arr2[1]*1000000) " bits per second.\nup.max " (arr2[1]*1000000) "\ndown.max "(arr2[1]*1000000); }'
            ;;
        *)
            #echo -n "up.info Traffic of the $INTERFACE interface. Maximum speed is "
            #which ethtool >/dev/null 2>/dev/null || echo "undeterminable (please install ethtool)."
            #ethtool $INTERFACE 2>/dev/null | awk '/Speed/ { split ($2, arr2, "M"); print (arr2[1]*1000000) " bits per second.\nup.max " (arr2[1]*1000000) "\ndown.max "(arr2[1]*1000000); }'
            echo "up.info Traffic of the $INTERFACE interface. Maximum speed is 100000000 bits per second."
            echo "up.min 0"
            echo "down.min 0"
            echo "up.max 100000000"
            echo "down.max 100000000"

            ;;
    esac
    exit 0
fi;

# Escape dots in the interface name (eg. vlans) before using it as a regex
awk -v interface="$INTERFACE" \
    'BEGIN { gsub(/\./, "\.", interface) } \
    $1 ~ "^" interface ":" {
        split($0, a, /: */); $0 = a[2]; \
        print "down.value " $1 "\nup.value " $9 \
    }' \
    /proc/net/dev
    
por 24.01.2011 / 16:35