Raspberry Piでサーバリソースを監視する

Raspberry Piでいろいろなリソースの推移をチェックする監視サーバを構築することにした。セットアップおよび独自データのグラフの作成が簡単そうに見えたのでmuninを使うことにした。

munin

muninのインストール

サーバとしてデータを集めてグラフつくる munin パッケージと、クライアントとしてデータをサーバに送信する munin-node の2つにわかれている。自分マシンのデータを自分で表示する場合は両方インストールする。

RaspberryPi
sudo apt-get install munin munin-node

監視されるだけのサーバは munin-node だけをインストールする。

sudo apt-get install munin-node

muninのバージョンは 2.0.6 だった。

muninのグラフの表示

muninではcronで定期的(デフォルトは5分毎)にスクリプトが実行されグラフデータは静的なhtmlページとして出力する(またはCGIをつかって動的に生成する)。munin自体はそれを配信する機能を提供していなかった。

そのためウェブサーバで出力されるディレクトリを公開する。他の人に見られて困る場合は自分でウェブサーバの設定をつかってアクセス制限や認証機能を使う必要もある。

debian系のパッケージでは出力先は設定ファイル /etc/munin/munin.conf を見ればわかり、 /var/cache/munin/www になっていた。

サーバはNginxを使っているので以下のようなalias設定を追加した。

    location /munin/ {
        alias /var/cache/munin/www/;
    }

Apacheなら alias /munin/ /var/cache/munin/www/ とかだろう。

複数台の管理

以下のように自宅の他のRaspberry PiとさくらのVPSを監視対象にしてみた。/etc/munin/munin.conf を変更。外部サーバはsshで接続することにした。

#[localhost.localdomain]
#    address 127.0.0.1
#    use_node_name yes

[home;rpi01]
  address 192.168.1.37
  use_node_name yes

[home;rpi02]
  address 127.0.0.1
  use_node_name yes

[global;sakuravps]
  address ssh://{{さくらのVPSのIPアドレス}}/bin/nc localhost 4949
  use_node_name yes

さくらVPSのサーバをセットアップ

さくらVPS・・・というかLAN外にあるDebianサーバを監視する話。サーバにログインし、munin-nodeだけインストール。

# VPS
sudo apt-get install munin-node

sshでデータを送信する

マスターからノードに接続する方向になる。事前にマスターであるRaspberry Pi側でmuninユーザの鍵を作成する。root権限になってから以下を実行する。

# Raspberry Pi
sudo -u munin ssh-keygen -t rsa

質問をすべて空リターンしていくと /var/lib/munin/.ssh/id_rsa.pubに公開鍵が作成される。

中身をコピーして、さくらVPSのマシンのログインしてauthorized_keysを作成して貼り付ける。root権限になってから以下を実行。

# VPS
chsh -s /bin/bash munin
su - munin
mkdir -p /var/lib/munin/.ssh
vi /var/lib/munin/.ssh/authorized_keys
chmod 700 /var/lib/munin/.ssh
chmod 600 /var/lib/munin/.ssh/authorized_keys

ノードのsshの設定でユーザを制限している場合は /etc/ssh/sshd_configAllowUsers に munin を追加してsshを再起動しておく。

うまく行けばマスターであるRaspberry Piから sudo -u munin ssh munin@さくらVPSのIP でログインできる。

グラフ作成の負荷を下げる

3台監視したらRaspberry Piのロードアベレージが10を超えたので対処した。muninの更新は5分起きで実行されるが5分で書き終わらないくらい遅いので24時間グラフを書き続けているというヤバイ状態になった。

通常のサーバでも何10台と監視すると負荷問題が発生するのでこの手の情報は検索するといろいろ見つかった。デフォルトでmunin-nodeをインストールすると20個ぐらいグラフがあって、日、週、月、年と期間でx4になり、それがxサーバとなるわけなので膨大な数のグラフを更新することになってしまう。対処方法としてはいくつかある。

  • グラフを減らす → 微々たるものだった
  • 動的に表示する → 静的作成で5分掛かってる = 動的に表示してもページによっては数分待たされるだろうから却下
  • グラフを更新する頻度を減らす → 採用

最終的に /etc/cron.d/munin を以下のように変更した。

#*/5 * * * *     munin if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi
0 0,12 * * *     munin if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi
0 1-11,13-23 * * *     munin if [ -x /usr/share/munin/munin-update ]; then /usr/share/munin/munin-update; fi
5-55/5 * * * *     munin if [ -x /usr/share/munin/munin-update ]; then /usr/share/munin/munin-update; fi

別にリアルタイムでチェックしないので1日2回、0時と12時にグラフを更新し、それいがはデータだけ更新するという設定。

課題

グラフの作成がエラーになっていることがあってよくわからない。

困ったとき使ったもの

人見知りソフトウェアエンジニアです。ビジュアル系、お笑い、Pixarが好き。勢いで吉本超合金おたけびBOTを作った。オールザッツ漫才が放送されない東京在住。

趣味や日常からアウトプットの場としてブログを書いています。自作のWordPressプラグインにGitHub Flavored MarkdownAmazonJSなど。