У меня есть показатель, который нужно проверять и регистрировать только ежедневно.
Вычисление требует много ресурсов ЦП, а выполнение запросов несколько раз в день возвращает одно и то же значение (т. Е. Просто тратит время ЦП).
Можно ли сделать плагин, который запрашивает только один раз в день?
Я пытался указать 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, у вас не останутся пустые графики.
Если бы мы очистили несколько зондов с разными интервалами без такого обходного пути, то полученные графики включали бы только те точки, которые вы собрали, и множество пропусков для тех, которые мы «пропустили».