2025/04/05(土)Ubuntuをアップグレードしたらmonitが /home 以下だけ読み込めなくなった件

そのような現象が起きたのですが、Web検索しても解決方法が載っていなかったのでこちらに書きます。誰かの助けになれば幸いです。

動作検証

  • /home/hoge.txt -> x
  • /home/user/hoge.txt -> x
  • /hoge.txt -> o
  • /usr/hoge.txt -> o
  • /dir/hoge.txt -> o (dirは自分で適当に作ったディレクトリ)

    x:monitのCHECK FILEで読み込めない。確かに存在するのに not found と出る(パーミッションも問題ないのに)
    o:monitのCHECK FILEで読み込める

という不具合でした。(CHECK FILEで読み込めないので他の CHECK xx もできないし、start program などにも指定できない)

monitはroot権限で動いているので、/home 以下を読めるのが想定される動きですが、/home 以下だけなぜか読み込めない現象が生じました。

詳しい原因は不明ですが、monitでrootから別のユーザーになれないみたいなエラーが出たのでそれが何か影響している可能性が高いです。Ubuntuのアップグレード前は正常に読み込めていたので、アップグレードで何かが壊れたとみて間違いなさそうです。

問題解消のための試行錯誤

問題解消のための実験1:/home ディレクトリを作り直す → 一時的に問題解消したがOSを再起動すると再発

/home でなければ読み込めるため、別の /dir を作って、/home 以下のものを全部 /dir にコピーして、 /home を /home_old にリネームして、/dir を /home にリネーム――というのを試してみました。

最初はそれで問題解消したようにみえたのですが、OSを再起動すると同じ /home 以下が読めない問題が再発しました。

問題解消のための実験2:monit をソースからビルドしてインストール → 問題解消

少々手間がかかって面倒ですがこちらで問題が解消しました! やり方はWeb検索すると出ると思います。apt remove monit して、元からあったmonitを削除してからインストールしました。

元からあったmonitがUbuntuのアップグレードで正常に動かなくなった原因は依然として謎のままですが…。

2021/05/03(月)munin + nginx で拡大操作画面のグラフが表示されないときのデバッグ技法

大体の設定方法は https://cod-sushi.com/munin-nginx-graph/ に書かれているので、この記事ではデバッグの仕方を中心にメモします。

ちなみに上記URLの spawn-fcgi-munin-graph では以下が省略されているので wget https://files.julienschmidt.com/public/cfg/munin/spawn-fcgi-munin-graph してからNAMEとか www-data を必要に応じて書き換えるのが無難だと思います。

#! /bin/sh

### BEGIN INIT INFO
# Provides:          spawn-fcgi-munin-graph
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       starts FastCGI for Munin-Graph
### END INIT INFO
# --------------------------------------------------------------
# Munin-CGI-Graph Spawn-FCGI Startscript by Julien Schmidt
# eMail: munin-trac at julienschmidt.com
# www:   http://www.julienschmidt.com
# --------------------------------------------------------------
# Install: 
#   1. Copy this file to /etc/init.d
#   2. Edit the variables below
#   3. run "update-rc.d spawn-fcgi-munin-graph defaults"
# --------------------------------------------------------------
# Special thanks for their help to:
#   Frantisek Princ
#   Jérôme Warnier
# --------------------------------------------------------------
# Last Update: 14. February 2013
#
# Please change the following variables:

自分の場合はそれでもなお動かなかったので、何時間もデバッグしてようやく動いたという具合です。

拡大操作画面だけグラフが表示されない場合は

/var/log/munin/munin-cgi-graph.log

(パスはOSによって多少異なると思われる)にログが出ているはずです。

自分の環境のログには

[WARNING] Request for graph without specifying domain. Bailing out.

というのが出ていてこれが犯人でした。(ERRORじゃなくてWARNINGだったのでこれが真犯人だと気づくのにもかなり時間がかかりました)

/usr/lib/munin/cgi/munin-cgi-graph

(パスはOSによって多少異なると思われる)からログが出力されていて、このスクリプトを開くと

logger_debug() if defined($ENV{CGI_DEBUG});

というのがあります。この直下に logger_debug(); を挿入してやると munin-cgi-graph のログにデバッグログが追加されてデバッグが簡単になります。

自分の環境の場合、

Request path is /munin-cgi/munin-cgi-graph

というデバッグログが出ていて、どうやら /munin-cgi/munin-cgi-graphmunin-cgi-graph 以降のパスが切れているのが拡大操作画面のグラフが表示されない原因だと気づきました。

実際の画像のパスは

munin-cgi/munin-cgi-graph/localdomain/localhost.localdomain/xxx=nnn,mmm.png?&lower_limit=&upper_limit=&size_x=800&size_y=400

という感じです。

なぜ切れたかに関しては、 include fastcgi_paramsfastcgi_params の設定ファイルを少々書き換えていて

fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;

で指定した PATH_INFOinclude fastcgi_params が上書きしたためでした。 include fastcgi_params の行をこれらの PATH_INFO の前に移動して後から

fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;

PATH_INFO を上書きさせることで正常に拡大操作画面のグラフが表示されるようになりました。

2019/01/01(火)IPv6無効化環境でMuninをアップデートしたら逝っちゃった件

yum update で諸々アップデートしていたら

Cron Daemon さんからメールが来ました。

[FATAL] There is nothing to do here, since there are no nodes with any plugins. 
Please refer to http://munin-monitoring.org/wiki/FAQ_no_graphs at /usr/share/munin/munin-html line xx

サーバ監視ツールの「munin」が逝っちゃったようだ😣

/var/log/munin-node/munin-node.log を覗くと、

yyyy/mm/dd-HH:MM:SS Munin::Node::Server (type Net::Server::Fork) starting! pid(xxx)
Resolved [*]:4949 to [::]:4949, IPv6
Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6
Binding to TCP port 4949 on host :: with IPv6
yyyy/mm/dd-HH:MM:SS Server closing!

との怪しいログが...。

調べると、CPANモジュール「Net::Server」のドキュメントに情報がありました。

On my linux box which defaults to net.ipv6.bindv6only=0, the following is output.

perl -e 'use base qw(Net::Server); main->run(host => "*")'
 
Resolved [*]:8080 to [::]:8080, IPv6
Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6
Binding to TCP port 8080 on host :: with IPv6

IPv6無効化環境なのにMuninがIPv6を利用して動こうとしているようであることが推測されました。

WebサーバでIPv6に対応するメリットを現状はほとんど感じないので、なんとかIPv6無効のまま正常に動くように直したいと思いました。CPANモジュール「Net::Server」のドキュメントによると、以下のように書いてありました。

If you do not want or need IPv6, simply set ipv to 4, pass IPv4 along in the port specification, set $ENV{'IPV'}=4; before running the server, or uninstall IO::Socket::INET6.

IPv6を要しない場合、 $ENV{'IPV'}=4 (環境変数でIPv4を指定する)か IO::Socket::INET6 (というCPANモジュール)をアンインストール(cpanm -U IO::Socket::INET6)せよとのこと。

しかし、 /usr/share/munin/munin-html line xx の前に $ENV{'IPV'}=4 を挿入しても変わりありませんでした。

どうしようか悩みましたが、 vim /etc/munin/munin.conf で以下を追記してやると「Server closing!」を回避できたのでメモしておきます。

[localhost]
    address 127.0.0.1
    use_node_name yes

use_node_name yes はなくても動くんじゃないかと思っています(未検証)。

解決までmuninのグラフが途切れましたが、また止まった時が動き出しました。

fw_conntrack-day.png

2017/12/31(日)monit からメールが来ないのを直した

数年前からエラーメールが来なくなっていたので直しました。

set mail-formatfrommonit@hoge_vps にしていてそれで昔は動いていたのですが、バージョンアップか何かで動かなくなりました。エラーログにはそれらしき文言は何も出ていませんでした。(Gmailで受け取っているのでGmail側で何か変わったのかもしれません。)

fromxxx@yyy.com というまともな形式に変えると、メールを受け取れるようになりました。

2014/03/02(日)Logwatch で Date::Manip unable to determine TimeZone が出た時の対処法

とりあえず、rootになって現在のタイムゾーンを確認します。

perl -MDate::Manip::TZ -le 'print Date::Manip::TZ->new->zone;'

正常ならば、「Asia/Tokyo」とか出力されます。

ここで自分の場合は、以下のエラーが出ました。

ERROR: failed to load Date::Manip::Lang::english: Can't locate YAML/Syck.pm in @IN

そのため、「cpanm YAML::Syck」でYAML::Syckをインストールしました。(cpanm がないなら「cpan YAML::Syck」でOK)これで自分の場合はエラーが解消されました。

「Date::Manip::TZ」のドキュメントによると、↓の順番でチェックするようなので、出力がおかしかったら妥当なタイムゾーンが出力されるまでいじりましょう。

main     TZ
env      zone TZ
file     /etc/TIMEZONE
file     /etc/timezone
file     /etc/sysconfig/clock
file     /etc/default/init
command  "/bin/date +%Z"
command  "/usr/bin/date +%Z"
command  "/usr/local/bin/date +%Z"
cmdfield /bin/date             -2
cmdfield /usr/bin/date         -2
cmdfield /usr/local/bin/date   -2
gmtoff

詳細は↓ http://search.cpan.org/~sbeck/Date-Manip-6.42/lib/Date/Manip/TZ.pod#DETERMINING_THE_SYSTEM_TIME_ZONE