<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>システム</title>
        <link>http://www.oro.co.jp/web/creator/system/</link>
        <description>オロのWebシステムチームスタッフによる、Web開発に関するノウハウやTIPSを紹介するコラムです。</description>
        <language>ja</language>
        <copyright>Copyright 2009</copyright>
        <lastBuildDate>Thu, 21 May 2009 17:28:32 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>Muninで監視 設定編</title>
            <description><![CDATA[<p>今回は、<a href="http://www.oro.co.jp/web/creator/system/cat68/munin.html">前回</a>インストールした Munin の設定をあれこれいじってみます。</p>

<h4>Muninの構造</h4>

<p>
munin-node デーモンは監視側からの計測要求を受けると、各種の計測を行う小さなプログラム
(Munin プラグイン)を実行し、その結果を送り返します。<br />
Munin プラグインは、CentOS で yum からインストールした場合には /etc/munin/plugins ディレクトリに配置されます。<br />
FreeBSD で Ports からインストールしたときは /usr/local/etc/munin/plugins です。</p>

<p>まずはプラグインディレクトリを覗いてみましょう。(CentOSの例)</p>
]]><![CDATA[<pre>
# ls -l /etc/munin/plugins
合計 0K
lrwxrwxrwx 1 root root 28  *月 ** **:** cpu -> /usr/share/munin/plugins/cpu
lrwxrwxrwx 1 root root 27  *月 ** **:** df -> /usr/share/munin/plugins/df
lrwxrwxrwx 1 root root 33  *月 ** **:** df_inode -> /usr/share/munin/plugins/df_inode
lrwxrwxrwx 1 root root 32  *月 ** **:** entropy -> /usr/share/munin/plugins/entropy
lrwxrwxrwx 1 root root 30  *月 ** **:** forks -> /usr/share/munin/plugins/forks
lrwxrwxrwx 1 root root 32  *月 ** **:** if_err_eth0 -> /usr/share/munin/plugins/if_err_
lrwxrwxrwx 1 root root 32  *月 ** **:** if_err_eth1 -> /usr/share/munin/plugins/if_err_
...

</pre>

<p>中身はシンボリックリンクばかり、どれも同じディレクトリ(/usr/share/munin/plugins)にあるファイルを参照しています。</p>

<p>実は、標準添付の Munin プラグインの実体はすべて /usr/share/munin/plugins ディレクトリにインストールされていて
/etc/munin/plugins には作動させたいプラグインへのシンボリックリンクを置く、という仕組みになっています。</p>

<p>ほとんどのシンボリックリンクは実体のファイルと同じ名前で作られています。<br />
実体のファイル名がアンダースコアで終わっているもの(if_err_, if_ など)は、何かがプラグインファイル名に
くっついた名前でシンボリックリンクが作られていますが、これは、監視対象(ネットワークデバイスなど)を
連結した名前でシンボリックリンクを作成することで、ひとつのプラグインが複数の監視対象を別々にグラフ化する
場合に用いられる方法です。</p>

<p>最初に Munin をインストールしたままの状態だと、ケーブルがささっていないネットワークデバイスなど、監視の
必要がないものまでグラフ化されているはずです。</p>

<p>そこで、まず不要なプラグインを外していくところから始めてみます。<br />
今回は eth0 以外のネットワークデバイスと、MTA に Postfix を採用しているので監視の必要がない Sendmail 関連の
プラグインを外していきます。<br />
と言っても、作業はシンボリックリンクを削除するだけです。</p>

<pre>
# rm /etc/munin/plugins/if_err_eth[12] /etc/munin/plugins/if_eth[12]
# rm /etc/munin/plugins/if_err_eth[12] /etc/munin/plugins/if_eth[12]
# rm /etc/munin/plugins/sendmail_*

</pre>

<p>munin-node の設定を変更したときは、稼働中の munin-node を再起動するまでは設定内容が反映されません。
忘れずに再起動しておきましょう。</p>

<pre>
# /etc/init.d/munin-node restart
Stopping Munin Node agents:                                [  OK  ]
Starting Munin Node:                                       [  OK  ]

</pre>

<p>少し待ってからブラウザで Munin の出力を見てみると、グラフの数が少なくなっているのが確認できます。</p>

<p>次に、新しいプラグインを導入してみましょう。<br />
今回は Apache、MySQL、Postfix を監視するプラグインを追加してみます。<br />
と言っても、削除と同様にシンボリックリンクを作成するだけです。</p>

<pre>
#ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
#ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
#ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
#ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes
#ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
#ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads
#ln -s /usr/share/munin/plugins/postfix_mailqueue /etc/munin/plugins/postfix_mailqueue
#ln -s /usr/share/munin/plugins/postfix_mailstats /etc/munin/plugins/postfix_mailstats
#ln -s /usr/share/munin/plugins/postfix_mailvolume /etc/munin/plugins/postfix_mailvolume

</pre>

<p>忘れずに munin-node を再起動して、少し待ってからグラフを見てみましょう。<br />
プラグインを追加した分だけ、グラフが増えているのが確認できます。</p>

<p>/usr/share/munin/plugins ディレクトリの中を見てみると、ほかにもいろいろ役に立ちそうなプラグインが
見つかると思います。</p>

<h4>グラフが出ないときは</h4>

<p>もしかすると、書いてある通りに設定してもグラフに何も出てこない!!とお怒りの方がいるかもしれません。<br />
そこで、そのような場合の対処法についても説明します。</p>

<p>まず、グラフのタイトルだけが表示されていて画像が出てこない場合ですが、これは munin-node がプラグインの
実行中にコケて何も返せなかった状態が考えられます。<br />
通常インストールした状態で運用されていれば、/var/log 以下のどこかに munin-node のログファイルが
作成されているはずなので、そちらをあたってみるのが解決の近道です。</p>

<p>次に、グラフの画像は表示されているのに、数字がすべて非数(NaN)になっているケースがあります。<br />
これは、Munin プラグインの実行は正常に完了していても、有効な計測値が得られていない状態が考えられます。<br />
こちらのケースについても、munin-node のログファイルに解決のヒントがあるはずです。</p>

<p>もっともこれだけでは不親切なので、先ほど追加したプラグインを導入したときに起こりそうなトラブルについて
解決方法を紹介しておきます。</p>

<h6>1.Apache の場合</h6>

<p>Apache を監視するプラグインは、実は Apache の mod_status モジュールにアクセスし、結果を返す仕組みに
なっています。<br />
Apache をインストールしたときに、この mod_status が組み込まれていなかったり、組み込まれていても
アクセスが拒否されていたり、Munin プラグインが期待する情報を返していないと、munin-node が値を返せない
状態になります。</p>

<p>Apache の設定を確認して、1)mod_status モジュールが組み込まれていること、2)localhost(127.0.0.1)から
/server-status へのアクセスを許可していること、3)ExtendedStatus ディレクティブが On に設定されていること、
を確認してみてください。</p>

<h6>2.MySQL の場合</h6>

<p>MySQL を監視するプラグインは、mysqladmin コマンド経由で実際に MySQL データベースに接続して情報を取得します。<br />
このとき、mysqladmin コマンドに PATH が通っていなかったり、MySQL の root ユーザーにパスワードが設定されて
いたりすると、Munin プラグインは情報を取得することが出来ません。</p>

<p>実は、/etc/munin/plugin-conf.d ディレクトリ以下に Munin プラグインの設定ファイルがあり、ここに設定を記述
しておくことで、プラグインに実行時オプションを渡すことができます。<br />
※FreeBSD の場合は /usr/local/etc/munin/plugin-conf.d ディレクトリ<br />
※設定ファイル名はOS環境によって異なります。各自の環境で確認してみてください。</p>

<p>以下は mysql のプラグインについての設定例です。<br />
mysqladmin コマンドがインストールされているパスと、MySQL ユーザー名とパスワードをそれぞれ設定しています。</p>

<pre>
[mysql*]
env.mysqladmin /usr/local/bin/mysqladmin
env.mysqlopts --user=muni --password=hogehoge

</pre>

<p>1行目で、設定を適用するプラグインをmysqlで始まる名前のプラグインに限定しています。<br />
2行目以下は Munin プラグインに環境変数を渡すときの書き方です。mysqladmin と mysqlopts という環境変数を
セットしています。</p>

<h6>3.Postfix の場合</h6>

<p>Postfix を監視する Munin プラグインは、実は /var/log 以下にあるログファイルを解析して、その
結果を返すようになっています。<br />
munin-node は一般ユーザー権限でプラグインを実行するため、ログファイルへのアクセスにroot権限が
ないと必要な場合には結果を返すことができません。</p>

<p>この場合も、munin-node の設定変更によって問題を解決できます。<br />
MySQL のときと同じように、プラグインの設定ファイルに以下の設定を書き加えます。<p>

<pre>
[postfix*]
user root
env.logdir /var/log
env.logfile maillog

</pre>

<p>1行目で、以下の設定の適用範囲を"postfix"で始まる名前のプラグインに限定しています。<br />
2行目では munin-node がプラグインを実行するときのユーザーを指定しています。<br />
3行目以下ではプラグインが参照するログファイルが置かれているディレクトリとログファイル名を指定しています。</p>

<p>このように各プラグインの設定を行い、最後に munin-node を再起動すれば、今度こそグラフが見られるように
なっているはずです。</p>

<p>もし他にこのような問題に遭遇したときは、プラグインのソースコードを読んでみてください。<br />
大抵は Perl で書かれた小さなプログラムです。<br />
各プラグインが参照する環境変数についても、ソースの冒頭でコメントしてあるはずです。</p>

<p>また、いちいちグラフが更新するまで待たないと設定を確認できない、というのは非常に不便ですが
そういうときのために、munin-run コマンドが用意されています。<br />
下記のようにプラグインの名前を引数で渡すと、指定したプラグインを実行してくれます。</p>

<pre>
# munin-run apache_access
accesses80.value 182410

</pre>

<h4>もっとプラグインを増やしたいときは</h4>

<p>標準添付のほかに、色々なプラグインを集めた MuninExchange というサイトがあります。<br />
MuninExchange <a href="http://muninexchange.projects.linpro.no/">http://muninexchange.projects.linpro.no/</a><p>

<p>"Search"をクリックして検索画面を開き、カテゴリーと対象のOSを選ぶとプラグイン名の一覧が出てきます。<br />
一覧からプラグインを1つ選ぶと、簡単な紹介とグラフのサンプル、コメントが見えます。<br />
気に入ったプラグインがあったらダウンロードしてみてください。</p>

<p>社内では、この中から apache_activity、mysql_qcache、 mysql_qcache_mem、passenger_status、memcached 系の各種プラグイン
などを追加しています。</p>

<p>このあと更に続きます。</p>]]></description>
            <link>http://www.oro.co.jp/web/creator/system/cat68/munin-1.html</link>
            <guid>http://www.oro.co.jp/web/creator/system/cat68/munin-1.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">監視ツール</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Munin</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">監視ツール</category>
            
            <pubDate>Thu, 21 May 2009 17:28:32 +0900</pubDate>
        </item>
        
        <item>
            <title>Muninで監視 インストール編</title>
            <description><![CDATA[<p>こんにちは。株式会社オロのおおした、といいます。<br />
Webシステムの設計・開発から運用・保守、サーバー・ネットワークの構築など、いろいろやってます。</p>

<p>今回は、Webサイトの運用・保守に欠かせない監視ツールの話です。</p>

<p>最近、当事業部では監視ツールにMuninを採用し、続々と監視範囲を拡大しているところです。
まずは Munin のインストールと初期設定について紹介します。</p>

<h4>Muninについて</h4>
<p>Munin の構成ですが、監視対象のサーバー側で各種の情報を計測するノード(munin-node)とmunin-node が計測した情報を定期的に収集してレポートを生成するプログラム(munin)に分かれています。</p>

<p>munin-node はデーモンとしてサーバーに常駐し、munin は通常5分間隔で munin-node を巡回します。<br />
このとき、通常は TCP/4949 ポートが使用されます。</p>]]><![CDATA[<h4>インストール</h4>

<p>今回は munin を CentOS5 に、munin-node を、CentOS5 と FreeBSD 7.1 にそれぞれインストールしました。</p>

<p>CentOS の場合は、RPMforge から yum で簡単にインストールできます。</p>

<pre class='brush: bash'>
# yum --enablerepo=rpmforge install munin munin-node
</pre>
<p>FreeBSD の場合は、Ports からインストールできます。</p>

<pre class='brush: bash'>
# portinstall sysutils/munin-node
</pre>
<p>今回は munin-node だけですが、munin もインストールするときはこのように行います。</p>

<pre class='brush: bash'>
# portinstall sysutils/munin-main
</pre>
<p>どちらも、依存している RRDTool や各種 CPAN modules と一緒にまとめてインストールが完了します。</p>
<br />

<h4>初期設定</h4>

<p>まず最初に munin-main 側の設定を行います。</p>

<p>CentOS の標準では、munin が HTML のレポートを生成し出力する先は /var/www/html/munin/ 以下になります。<br />
とりあえず標準設定のまま munin のレポートが生成されるように、出力先ディレクトリの所有者を変更しておきます。</p>
<pre class='brush: bash'>
# chown -R munin:munin /var/www/html/munin
</pre>

<p>また、Apache の DocumentRoot を /var/www/html 以外に設定している場合や /munin 以外のパスでレポートを公開したいときは、Apache の Alias 設定が必要になります。<br />
CentOS の yum でインストールすると、標準では /etc/httpd/conf.d/ に munin.conf というファイルが作られているので、このファイルに Alias の設定を追加します。</p>

<pre class='brush: bash'>
Alias  /munin/  /var/www/html/munin/
</pre>

<p>次に、munin に監視するサーバーを認識させるための設定を行います。<br />
CentOS の場合、/etc/munin/munin.conf が munin の設定ファイルになります。<br />
まず munin が動作するサーバー自身を監視対象に加えるには、munin.conf に以下の情報を追加します。</p>

<pre class='brush: bash'>
[munin.local.oro.co.jp]
    address 127.0.0.1
</pre>

<p>次は FreeBSD サーバーを監視対象に加えるときの設定例です。</p>

<pre class='brush: bash'>
[freebsd.local.oro.co.jp]
    address 192.168.7.1
</pre>

<p>最後に、munin-node を各サーバーに常駐させます。<br />
まず CentOS の例です。</p>

<pre class='brush: bash'>
# /etc/init.d/munin-node start
</pre>

<p>次は FreeBSD の例です。</p>

<pre class='brush: bash'>
# /usr/local/etc/rc.d/munin-node.sh start
</pre>

<p>ここまで終わったら、10分ほど待ってから munin が出力したレポートを見てみましょう。<br />
ブラウザで <a href="http://munin.local.oro.co.jp/munin/ ">http://munin.local.oro.co.jp/munin/ </a>を開いてみましょう。<br />
うまくいっていれば、きれいなグラフ入りのレポートが見られるはずです。</p>

<p>では、続きは次回。</p>]]></description>
            <link>http://www.oro.co.jp/web/creator/system/cat68/munin.html</link>
            <guid>http://www.oro.co.jp/web/creator/system/cat68/munin.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">監視ツール</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Munin</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">サーバ監視</category>
            
            <pubDate>Fri, 01 May 2009 10:00:00 +0900</pubDate>
        </item>
        
        <item>
            <title>チーム開発で大切なこと</title>
            <description><![CDATA[<p>みなさんこんにちは。<br />
株式会社オロの船津です。</p>

<p>私はオロに入社してから1年半、システムのログを確認したり、サーバを監視したり、プログラムを書いたり、動作検証をしたりする毎日を過ごしています。</p>

<p>オロに入社する前に何をしていたかというと、人一倍長く学生生活を過ごしておりました。</p>

<h4>チーム開発で大切なこと</h4>
<p>大学でプログラムを書いていたときと、会社に入ってプログラムを書くことの大きな違いはチーム作業であるということ。</p>

<p>学生さんは自分の研究は自分だけがソースコードに手を入れるという状況が多いかと思いますが、会社ではほとんどの場合、プロジェクトチームが組織され、バージョン管理システムを使って、共同でシステムを組み上げていきます。</p>]]><![CDATA[<p>このときに気をつけなければならない点は、下記の点です。<br /><br />
　・動かないプログラムはコミットしない。<br />
　・他の作業者（もしくは未来の自分）にわかるようにコメント・コミットログを残す。<br /><br />

バージョン管理システムとしては、CVS、Subversion等が多く用いられていますが、これらのツールでは変更履歴の確認や、特定のリビジョンに戻すといったことが行えます。</p>

<p>また、バージョン管理システムと連携してプロジェクト管理を行うことができるシステムに、Trac、Redmine等があり、作業の担当割当や進捗の管理、ソースコードの閲覧等が行えます。</p>

<p>現在はSubversionとRedmineを使って開発を行っていますが、慣れると非常に便利です。</p>

<p>個人で開発を行うときにも役に立つことは多いので、これから何か作ろうとしている方や学生さんもどんどん使ってみるとよいと思います。</p>

<p>それぞれのツールの便利な使い方については次回以降に。</p>]]></description>
            <link>http://www.oro.co.jp/web/creator/system/cat73/post.html</link>
            <guid>http://www.oro.co.jp/web/creator/system/cat73/post.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">プロジェクト管理</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">CVS</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Redmine</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Subversion</category>
            
            <pubDate>Fri, 01 May 2009 10:00:00 +0900</pubDate>
        </item>
        
    </channel>
</rss>