--- layout: old_post title: muninプラグインでRailsの処理時間をモニタリング&監視 permalink: /tatsuya/show/420-munin-rails ---

そういえば、半年ほど前からfooo.nameの監視にmuninを入れていて、muninプラグインを書いてRailsのパフォーマンスをモニタリングできるようしているのですが

その手順を書いておくと誰か嬉しい人がいるかなと思ったので、メモを残しておきます。サーバはAmazon EC2

 

muninのインストール

apt-getでmuninをインストール


% apt-get install munin munin-node
% /etc/init.d/munin-node start

Apache・MySQL・CPU / メモリ / ネットワーク / ロードアベレージ 辺りのモニタリングが始まる。実際にはcronが設定されていてデフォルト5分に1回モニタリング結果がHTMLとして出力される。出力される場所はconfigファイル /etc/munin/munin.conf にあるので、好みで編集


% emacs /etc/munin/munin.conf
dbdir /var/lib/munin
htmldir /var/www/munin
logdir /var/log/munin
rundir /var/run/munin

あとは /var/www/munin 以下をApacheで見えるように設定、Virtual hostを設定してBasic認証を掛けておいた


% emacs /etc/apache2/httpd.conf
<VirtualHost *:80>
DocumentRoot /var/www/munin
ServerName *********
</VirtualHost>
<Directory "/var/www/munin">
AuthType Basic
AuthName "Munin zone"
AuthUserFile /etc/apache2/.htpasswd
Require user ********
</Directory>

Railsのログをmuninでモニタリング

あとは、この↓サイトを真似してやればOK

Monitoring Rails Performance with Munin and a Mongrel

Railsの出力するlogから total / render / db の時間を見つけ max と avg の値を求め、muninでそれを監視する。Railsアプリケーションの scriptフォルダへ以下のスクリプトを置く


% emacs script/rails_log_monitor.rb
・・・・・・
h = Mongrel::HttpServer.new("127.0.0.1", PORT)
h.register("/avg_response_time", ResponseTimeHandler.new(:average))
h.register("/max_response_time", ResponseTimeHandler.new(:max))
h.run.join
rails_log_monitor.rb

上記スクリプトを実行すると port 8888 でmongrelが立ち上がる、muninはそこへアクセスし結果を取得する

% ruby script/rails_log_monitor.rb

 

次に、muninプラグインとして下記のスクリプトを /etc/munin/plugins 配下へ

avg_response_time

avg_response_time と max_response_time という名前で置いておく。結果muninが http://127.0.0.1:8888/#{ファイル名} へアクセスし結果を取得、グラフ化。

以上

基本このサイトを真似してやればOK、rails_log_moniter.rb を好きにいじれば ”特定のアクション・コントローラ・処理" 等をグラフ化してモニタリングできる筈。