Я использую Munin на своем ноутбуке Ubuntu Jaunty. Он показывает отличные графики для всего, кроме ppp0, который я использую для подключения к интернету. Поэтому мне нужно настроить munin для отображения графиков использования ppp0.

Я попытался просмотреть документацию и некоторые учебные пособия и добавил if_ppp0 и if_error_ppp0 в каталог плагинов munin-node. Создал две символические ссылки, которые, как я предполагаю, указывает на правильные плагины, if_ и if_error (только что отследил, что сделано для if_eth0 и if_error_eth0, и сделал то же самое для ppp0). Но этого недостаточно. ppp0 не среди графиков.

Я не могу найти строку конфигурации, которая предлагает редактирование, которое будет включать ppp0 в пуле мониторинга. Немного удивительно, что о ppp ничего не написано, учитывая популярность munin.

Я хорошо разбираюсь в Perl и bash, также запрограммированных ранее. Поэтому я отредактировал плагин для perl-файла if_ и if_error и изменил регулярное выражение, которое выглядит как «eth | wlan | ....», на «eth | ppp | wlan | ....». Ничто не сломано этим, ничто не установлено также. Кажется, я должен сделать что-то еще где-то еще, но не знаю, что это такое. Пожалуйста помоги.

1 ответ1

2

В скрипте eth по умолчанию используется ethtool, который не будет работать с ppp-ссылкой.

Также сценарий eth использует COUNTER вместо DERIVE, который будет давать вам плохие пики каждый раз, когда вы повторно подключаетесь к ppp-ссылке.

Вот мой скрипт (измените up.max, down.max на вашу пропускную способность 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .