Назад | Перейти на главную страницу

Munin - делать ежедневный запрос плагина (не каждые 5 минут)

У меня есть показатель, который нужно проверять и регистрировать только ежедневно.

Вычисление требует много ресурсов ЦП, а выполнение запросов несколько раз в день возвращает одно и то же значение (т. Е. Просто тратит время ЦП).

Можно ли сделать плагин, который запрашивает только один раз в день?

Я пытался указать update_rate 3600 в конфигурации munin-node для этого плагина, но он все равно запрашивался каждые 5 минут. Графики также отображаются с шагом 5 минут.

Конечно, локальный кеш - вариант, но все усложняет.

Вы можете поиграть с cron, чтобы иметь две записи в /etc/cron.d/munin. Нормальный, который звонит munin-cron каждые 5 минут (*/5) с базовой конфигурацией, в которой вы удаляете ссылку на свой плагин ежедневного запуска, и второй, которая вызывает только обновление (munin-update) каждый день в 7:30 например (30 7) с дополнительным файлом конфигурации, который вам нужно будет написать, который имеет дело только с ежедневным плагином.

*/5 * * * * munin-cron   --config /etc/munin/munin.conf
30 7 * * *  munin-update --config /etc/munin/munin_daily_plugin.conf

У меня больше нет munin, чтобы поиграть и протестировать его, но тем не менее, насколько я помню, как он работает, он должен помочь вам решить вашу проблему.

Хотя это не совсем ответ на ваш вопрос, это может быть обходным путем. Рассмотрим следующий плагин munin:

$ cat /usr/share/munin/plugins/pool_
#!/bin/sh

pool_dir=/tmp/munin-pool
probe=`basename $0 | sed 's|^pool_||'`

test -d $pool_dir/$probe || exit 1
if test "$1" = autoconf; then
    test -s $pool_dir/$probe/autoconf || exit 0
    cat $pool_dir/$probe/autoconf
elif test "$1" = config; then
    test -s $pool_dir/$probe/config || exit 0
    cat $pool_dir/$probe/config
else
    test -s $pool_dir/$probe/value || exit 0
    cat $pool_dir/$probe/value
fi

exit 0

И этот crontab:

#!/bin/sh

pool_dir=/tmp/munin-pool
TMPFILE=/tmp/`basename $0`.$$

if test -s $pool_dir/lock; then
    pid=`cat $pool_dir/lock`
    if ps ax | grep "$pid[ ]" >/dev/null; then
    exit 0
    fi
fi
test -d $pool_dir || mkdir $pool_dir
echo $$ >$pool_dir/lock

test -d <%=@conf_dir%>/plugins-pool || exit 1
cd /etc/munin/plugins-pool

for probe in *
do
    test -d $pool_dir/$probe || mkdir -p $pool_dir/$probe
    if ! test -f $pool_dir/$probe/autoconf; then
        ./$probe autoconf >$TMPFILE
        test -s $TMPFILE && mv $TMPFILE $pool_dir/$probe/autoconf
    fi
    if ! test -f $pool_dir/$probe/config; then
        ./$probe config >$TMPFILE
        test -s $TMPFILE && mv $TMPFILE $pool_dir/$probe/config
    fi
    ./$probe >$TMPFILE
    test -s $TMPFILE && mv $TMPFILE $pool_dir/$probe/value
done 2>&1 | awk '{print strftime("[%Y/%m/%d - %H:%M:%S] "), $0}' ><munin-log-dir>/munin-pooler.log

rm -f $pool_dir/lock

exit 0

В /etc/munin/plugin-pool, Я бы связал зонды, результаты которых я хочу кэшировать локально:

ln -sf /usr/share/munin/plugins/some_probe /etc/munin/plugin-pool/

Crontab будет перебирать их, отслеживать результаты в /tmp/munin-pool/. В то время pool_ зонд запросит этот кеш:

ln -sf /usr/share/munin/plugins/pool_ /etc/munin/plugins/some_probe

Поэтому вместо того, чтобы повторно запрашивать службу каждые пять минут, я могу собирать метрики из своей crontab по любому графику, который мне нужен. Или, в моем случае использования, если зонд обычно превышает тайм-аут запроса munin, у вас не останутся пустые графики.

Если бы мы очистили несколько зондов с разными интервалами без такого обходного пути, то полученные графики включали бы только те точки, которые вы собрали, и множество пропусков для тех, которые мы «пропустили».