systemd環境でmunin-nodeとrrdcachedを設定したという話

systemd環境でmunin-nodeとrrdcachedを設定したという話

systemd環境でmunin-nodeとrrdcachedを設定したという話 はてなブックマーク - systemd環境でmunin-nodeとrrdcachedを設定したという話


各種実験用に 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