今さらながら munin-asyncd を使ってみたんだけど、どうも munin-node からの値取得が75秒以上かかる場合に問題が出るようだ。。。
# ack --color -H 0.75 -C /usr/local/share/munin/munin-asyncd /usr/local/share/munin/munin-asyncd-157- # start the next run close to the end of a munin-node update operation /usr/local/share/munin/munin-asyncd-158- # (i.e. try to avoid overlapping activities) /usr/local/share/munin/munin-asyncd:159: my $when_next = int((int($when / $minrate) + 0.75) * $minrate); /usr/local/share/munin/munin-asyncd-160- while ($when_next <= $when) { /usr/local/share/munin/munin-asyncd-161- $when_next = $when_next + $minrate;
以下推測。
munin-asyncd は5分刻みの75秒前に munin-node に値を取得しにいって
list してシーケンシャルに fetch $servece していって、最初の time で値を保存する。
75秒後に munin-cron の munin-update からリクエストが来て、前回の spoolfetch 中の timestamp で spoolfetch $time する。
前回の spoolfetch のタイミングで munin-asyncd が動作中だと、それまでに終わっている値は送られるのだけど、まだ終わっていない分は送られず、次回の spoolfetch にも含まれず、この分が欠落する。
munin-ayncd --fork などを使うと解決するのだけれど load average スパイクが起こるかも。
github には複数 Issue が寄せられています。次期メジャーバージョンアップでは改善するかもです。
追記: s/75秒/150秒/