各種実験用に Raspberry Pi を導入。ところが、SSH コマンドの応答や、ウェブの表示が妙に重い。原因を調べようと Munin を入れると、更に反応が重くなる。
そして、脳裏に浮かんだ言葉がこれだ――。
“俺の Raspberry Pi と Munin が
こんなに重いはずがない!”
どうしてこうなった(´・ω・`)
◆ 概要;systemd 環境上で rrdcached と munin-node を動かすために
Raspberry Pi 上の Pidora ( Fedora 18 ベース ) で、システムのリソース状況を監視するために Munin のセットアップを実施。案の定、SD カードで読み書きするため I/O がシステムの負担になりがち。負担を軽くするために、グラフを動的生成に切り替えます。更にI/Oの軽減のためrrdcahced を入れました。rrdcached を使う理由は、先日のエントリ “【Munin】rrdcachedでIOを取り戻せ!” も併せてお読みください。
注意すべきは、init ではなく systemd を使った起動設定を行う所。以上の手順をまとめた記事がこちらです。
◆ Fedora 19 に Munin と rrdcached をセットアップするまでの手順
作業は munin のセットアップを行い、systemd 用に対応した munin-node 起動設定を行います。それから、rrdcached 向けの専用設定を行います。
Munin本体のセットアップ
標準レポジトリ ‘ferora’ のパッケージを使用します。yum を使ってサクッと入れます。
# yum install munin munin-cgi
ここで、Munin 本体、エージェントの munin-node に加え、必要な Perl モジュール、画像表示に用いる rrdtool がセットアップされます。munin-cgi パッケージは、後ほど動的にグラフ生成をする時に使用します。
初期状態では、http://<ホスト>/munin/ から Munin のグラフを参照できるようになります。サーバ内のパスは、/var/www/html/munin/ です。ここには、BASIC 認証が施されていますので、htpasswd コマンドを使って認証設定を行います。
# htpasswd /etc/munin/munin-htpasswd <ユーザ名>
パスワードを設定したあとは、httpd の再起動を行います
# systemctl restart httpd.service
なお、httpd の再起動を行いませんと、認証設定は有効になりません。なお、認証に関する Apache の設定は /etc/httpd/conf.d/munin.conf です。ドキュメントルートを変更するなどして表示されない場合は、このファイルの調整も行います。
munin-nodeのsystemd向け調整
データ収集エージェント munin-node の調整を行います。Fedora 19 では init スクリプトは使えません。systemd に対応した設定を行います。まず、サーバブート時の munin-node 自動起動設定を行います。
# systemctl enable munin-node.service ln -s '/usr/lib/systemd/system/munin-node.service' '/etc/systemd/system/multi-user.target.wants/munin-node.service'
次に、設定変更を行いましたので systemd の設定を再読込します。
# systemctl --system daemon-reload
それから、munin-node を起動します。
# systemctl start munin-node.service
稼働しているかどうかは、’status’ と入力することで確認します。
# systemctl status munin-node.service munin-node.service - Munin Node Server. Loaded: loaded (/usr/lib/systemd/system/munin-node.service; enabled) Active: active (running) since 金 2013-11-15 16:35:20 JST; 4s ago Docs: man:munin-node Process: 2765 ExecStart=/usr/sbin/munin-node (code=exited, status=0/SUCCESS) Main PID: 2766 (munin-node) CGroup: name=systemd:/system/munin-node.service mq2766 /usr/bin/perl -wT /usr/sbin/munin-node 11月 15 16:35:20 web1 systemd[1]: PID file /var/run/munin/munin-node.pid not readab...rt. 11月 15 16:35:20 web1 systemd[1]: Started Munin Node Server..
このように ‘active (running)’ と表示されていれば問題ありません。これで、munin-node は起動しました。
動的なグラフ生成の調整
munin の設定ファイル munin.conf を編集します。
# vi /etc/munin/munin.conf
ファイルを開いたら、’graph_strategy’ を cron から cgi に書き換えます。
graph_strategy cgi #graph_strategy cron
あとは、5分毎に cron で実行しているスクリプトの稼働を待つか、手動で実行します。
# sudo -u munin /usr/bin/munin-cron
そして、ログファイルの権限の調整を行います。
# touch /var/log/munin/munin-cgi-graph.log # chown munin.apache /var/log/munin/munin-cgi-graph.log
その後、http://<ホスト名>/munin/ に再度アクセスすると、グラフは動的に生成されます。もし生成されない場合は、Apache の error_log と、前述の munin-cgi-graph.log 等を確認します。
HTML 出力部分の調整
なお、HTML ファイルを動的生成する方法もありますが、Raspberry Pi のような環境では却って動作が重くなることもあり、今回は作業しませんでした。もし、HTML 生成の負担を減らすのであれば、/usr/bin/munin-cron を開き、’ /usr/share/munin/munin-html’ の行をコメントアウトしておくのも対策になります。
ただし、新しい munin-node を追加したときは、手動 munin-html コマンドを実行しないといけません。WARN や CRIT 等の閾値を超えた時にも、色は変わらなくなるので注意が必要です。サーバの負荷を取るか、あるいは、アラートの正確さを取るかは、状況によって判断します。
rrdcached のセットアップと systemd 常駐設定
動的に Munin のグラフを生成するように設定した後は、rrdcached のセットアップを行います。rrdcached はmunin-node から収集したデータをメモリ上に保持し、時間をずらしてデータをファイルに書き出します。そのため、ディスク I/O を全体的に減らす効果があります。
まずはじめに動作用のアカウントを作成します。
# vi /etc/system/systemd/rrdcached.service
ファイルを開いたら、次のように記述します。
[Unit] Description=Munin rrdcached [Service] Type=forking PermissionStartOnly=yes ExecStartPre=/usr/bin/install -d -o munin -g munin \ -m 0755 /var/lib/munin/rrdcached-journal /run/munin ExecStart=/usr/bin/rrdcached \ -l 127.0.0.1 \ -l unix:/var/rrdtool/rrdcached/rrdcached.sock \ -p /run/munin/munin-rrdcached.pid \ -s apache -m 664 -b /var/rrdtool/rrdcached \ -F -j /var/lib/munin/rrdcached-journal \ -w 1800 -z 1800 -f 3600 User=munin Group=munin ExecStartPost=/bin/sleep 1 ; /bin/setfacl -m u:apache:rw /var/rrdtool/rrdcached/rrdcached.sock After=syslog.target network.target [Install] WantedBy=multi-user.target
ファイルを変更したのち、データ保存用のディレクトリを作成します。
# mkdir /var/rrdtool/rrdcached # mkdir /var/lib/munin/rrdcached-journal # chown munin.munin /var/rrdtool/rrdcached # chown munin.munin /var/lib/munin/rrdcached-journal
systemd デーモンの読み込み直しと、rrdcached の起動を試みます。
# systemctl --system daemon-reload # systemctl start rrdcached.service
起動した後は、status で実行中(active) になっているか、確認します。
# systemctl status rrdcached
rrdcached.service - Munin rrdcached
Loaded: loaded (/etc/systemd/system/rrdcached.service; enabled)
Active: active (running) since 火 2013-11-19 16:44:01 JST; 17h ago
Main PID: 329 (rrdcached)
CGroup: name=systemd:/system/rrdcached.service
mq329 /usr/bin/rrdcached -l 127.0.0.1 -l unix:/var/rrdtool/rrdcached/rrdcach...
ポートでの疎通を確認する方法は、lsof を使うのが手軽です。
# /usr/sbin/lsof -i:42217 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rrdcached 19756 munin 4u IPv4 197907 0t0 TCP localhost:42217 (LISTEN)
あるいは、telnet や nc コマンドを使う方法もあります。
$ telnet localhost 42217 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. STATS 9 Statistics follow QueueLength: 0 UpdatesReceived: 0 FlushesReceived: 0 UpdatesWritten: 0 DataSetsWritten: 0 TreeNodesNumber: 0 TreeDepth: 0 JournalBytes: 0 JournalRotate: 0 QUIT
rrdcached と munin の連携
最後に再び munin.conf を編集します。
# vi /etc/munin/munin.conf
ファイルを開いたら、rrdcashed_socket オプションを有効にします。
rrdcached_socket /var/rrdtool/rrdcached/rrdcached.sock
この状態でブラウザから Munin の URL にアクセスし、グラフが正常表示される事を確認します。以上で、作業は完了です。
◆ 導き出される結論は…
rrdcached の効果は大きいですね。CPU 使用率が半分以下になりました。当たり前ですが、サーバに比べて環境が華奢な Raspberry Pi のシステム環境。それでも、リソースを知るためには munin なり、何らかのツールのセットアップは欠かせません。重くなりがちな Munin でも、rrdcached のお陰で快適に運用できます。
これで、init から systemd に変更になったとしても、監視設定は問題なさそうですね( ^ω^)
ただ、それでも Load Average は 0.5 前後をウロウロ。ちょっと負荷がかかってそう。やはり、Munin 本体は、別の場所に移し、munin-node のみで運用することになりそうです。
◆ 参考 URL
rrdcahced:
http://munin.jp/wiki/rrdcached
Features/systemd – FedoraProject
http://fedoraproject.org/wiki/Features/systemd