CentOS 7.5 にて epel から入れた munin-2.0.40 で色々面倒な事に

スポンサーリンク

 サーバーの動作状況などは Munin を用いた監視としているが、Web サーバーとして Nginx を使用している場合はグラフ拡大などを行う部分の設定が色々と面倒な物で。
 昨晩あたりに munin-2.0.39 から yum で update したら途端にアレこれおかしくなったのでイライラしながら対処した。

2.0.40 へアップデート後の挙動

 cron で定期的にステータスを読んで rrd に収集していくという基本的な動作には問題は無かった。
 しかしブラウザで Munin を開いてグラフをクリック。細かく見るためにグラフを拡大したりグラフ上の範囲を指定してみたり出来る所にグラフが表示されないようになってしまった。
 パッケージには munin-cgi-{graph,html}.service といった 2 つの systemd の unit ファイルがインストールされ、既存の munin-fcgi-{graph,html}.service は削除されていた。
 それならばと spawn-fcgi を叩かない munin-cgi-{graph,html}.service を起動させてみるも生成されたソケットに接続出来ずグラフの表示が出来ない。Nginx 側は Connection refused とエラーを吐いていたので繋がっていない。

グラフの拡大表示をさせる対処

 Nginx と Munin のグラフ周りで使用される CGI を FastCGI で使うための設定を改めて行った。

 先ず Nginx で Munin を表示させるホストの設定。

server {
    # Example configuration! Change this to suit your needs.
    # Access munin at http://localhost/munin/
    # NOTE - Do not remove this file, otherwise munin package upgrade
    # recreates this.

    listen       80;
    server_name  munin.example.com;
    root /var/www/html/munin;
    index index.html;

    location / {
        allow 192.168.1.0/24;
        allow 127.0.0.1;
        deny all;
    }

    # redirect server error pages to the static page /40x.html
    #
    error_page  404              /404.html;
    location = /40x.html {
        root   /usr/local/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/local/nginx/html;
    }

    location ^~ /munin-cgi/munin-cgi-graph/ {
        access_log off;
        fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass unix:/var/run/munin/munin-cgi-graph.sock;
        include fastcgi_params;
    }

    location /munin/static/ {
        alias /etc/munin/static/;
    }

    location /munin/ {
        fastcgi_split_path_info ^(/munin)(.*);
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass unix:/var/run/munin/munin-cgi-html.sock;
        include fastcgi_params;
    }

}

 次に munin-cgi-graph と munin-cgi-html の 2 つを起動して unix ソケット経由で listen させる sytemd の unit ファイルを作成する。
 作成後に設置するパスは cat の引数通り /lib/systemd/system/ 以下となる。設置後は systemctl daemon-reload をしておく事。

cat /lib/systemd/system/munin-fcgi-graph.service
[Unit]
Description=Munin FastCGI Graph
Documentation=man:spawn-fcgi

[Service]
Type=forking
PIDFile=/run/munin/fcgi-graph.pid
ExecStart=/usr/bin/spawn-fcgi -s /run/munin/munin-cgi-graph.sock -U nginx -u nginx -g nginx /var/www/html/munin/cgi/munin-cgi-graph -P /run/munin/fcgi-graph.pid

[Install]
WantedBy=multi-user.target
cat /lib/systemd/system/munin-fcgi-html.service
[Unit]
Description=Munin FastCGI HTML
Documentation=man:spawn-fcgi

[Service]
Type=forking
PIDFile=/run/munin/fcgi-html.pid
ExecStart=/usr/bin/spawn-fcgi -s /run/munin/munin-cgi-html.sock -U nginx -u nginx -g nginx /var/www/html/munin/cgi/munin-cgi-html -P /run/munin/fcgi-html.pid

[Install]
WantedBy=multi-user.target

 unit ファイルを作成、設置したら有効化しておく。

systemctl daemon-relaod
systemctl enable munin-fcgi-graph munin-fcgi-html
# socket のゴミが "残っていたら" 削除
rm /var/run/munin/munin-*.sock
systemctl start munin-fcgi-graph munin-fcgi-html

動作確認をする

 先ずは正しくプロセスが起動している事とプロセスの owner も確認し、sock ファイルの owner やらもしっかり確認する。

ps -ef | grep cgi
nginx    29966     1  0 19:23 ?        00:00:00 /usr/bin/perl -T /var/www/html/munin/cgi/munin-cgi-graph
nginx    29968     1  0 19:23 ?        00:00:00 /usr/bin/perl -T /var/www/html/munin/cgi/munin-cgi-html
ls -l /var/run/munin/
合計 12
-rw-r--r-- 1 root  root  5  9月 14 19:23 fcgi-graph.pid
-rw-r--r-- 1 root  root  5  9月 14 19:23 fcgi-html.pid
srwxr-xr-x 1 nginx nginx 0  9月 14 19:23 munin-cgi-graph.sock
srwxr-xr-x 1 nginx nginx 0  9月 14 19:23 munin-cgi-html.sock
-rw-r--r-- 1 root  root  6  9月 14 04:26 munin-node.pid

 そして何より拡大出来るグラフ表示とクリックして拡大する動作を直接確認する事。

おわりに

 筆者のサーバーでは epel より munin 関連パッケージは次の 5 つを入れて居る。

rpm -qa | grep munin
munin-common-2.0.40-2.el7.noarch
munin-nginx-2.0.40-2.el7.noarch
munin-cgi-2.0.40-2.el7.noarch
munin-2.0.40-2.el7.noarch
munin-node-2.0.40-2.el7.noarch

 にもかかわらず一部ディレクトリ (/var/lib/munin/cgi-tmp) の owner が apache になっていたりしたし munin-cgi 周りでは CGI の設置パスも変更されていたり。
 systemd の Unit ファイルも munin-cgi-html.service 等と言う様に fcgi から変更されている物のそのままでは動作できない。もちろん今まで使っていた munin-fcgi-{graph,html}.service の 2 ファイルは削除されてたり。
 メジャーバージョンの変更なら分かるけど 39 から 40 にビルドバージョンが変わるだけでここまでデカイ変化もあるもんだなと。

 ちょっとばかり munin のパッケージは癖が強すぎてバージョンアップ前にバックアップは欠かせない感じだ。

スポンサーリンク