我有一个仅需每天检查和记录的指标。
计算是 CPU 密集型的,并且每天查询多次都会返回相同的值(即它只是浪费 CPU 时间)。
是否可以制作一个每天只查询一次的插件?
我尝试在 munin-node 配置中为该插件指定“update_rate 3600”,但仍然每 5 分钟查询一次。图表也以 5 分钟的粒度显示。
当然,本地缓存是一种选择,但会使事情变得更加复杂。
答案1
虽然这不能完全回答你的问题,但这可能是一种解决方法。考虑以下 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 查询超时,则不会留下空白图表。
如果我们要在不同的间隔内抓取一些探测器,而没有这样的解决方法,那么生成的图表将只包含您收集的那些点,以及我们“错过”的大量空白。
答案2
你可以使用 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 可以玩和测试它,但是尽管如此,据我记得它是如何工作的,它应该可以帮助你解决你的问题。