「Muninでかんたんサーバー監視」~初心者でもよくわかる!VPSによるWebサーバー運用講座(3)

「Muninでかんたんサーバー監視」~初心者でもよくわかる!VPSによるWebサーバー運用講座(3)

VPSによるWebサーバー運用講座の連載3回目です。
今回は、サーバーの状態を監視するためのツールMuninをインストールします。

サーバーは生き物。末永くサーバーを利用するために、こまめに監視を行おう。

今まで順調に稼働していたWebサイトに突然アクセスできなくなったことってありませんか? そんなとき、誰しも慌てふためくと思います。
今、障害が起こっている場所がネットワークなのか、サーバーなのか、それとも自分の端末なのか?
いろいろ調べているうちに、サーバーに原因があると分かった場合は、次のステップとしてサーバーにログインして何がトラブルになっているのか調べますよね。

トラブル対応は通常そのような手順を踏むと思いますが、とは言っても突発的なトラブルはできるだけ避けたいものです。
トラブルの発生を100%避けることは難しいのですが、日頃からサーバーの稼働状況をを見て異常がないかどうか観察していると、未然に防げるトラブルがあるかも知れません。
Muninはサーバーの稼働状況をグラフ表示してくれるので、事前にトラブルの種となりそうな問題を見つけたり、現在も安定して稼働しているかどうかを調べるのに役立ちます。
ブラウザ経由で各種サーバーリソースをグラフィカルに確認できます。

例えば以下は、Muninが出力するサーバーのディスク使用率のグラフです。

ディスクの使用率が100%に近づいています。放っておくと、やがてディスクがいっぱいになり、サーバーが機能しなくなることが予想されます。
トラブルが起こる前に不要なファイルを削除するか、新しいVPSへ乗り換えることを検討するなどの対策をうつ必要があります。

このようにサーバーの稼働状況をグラフで見ることができると「今後どのような問題に直面しそうか?」を予測することができます。
また、パフォーマンスに関する指標も見ることができるので、今より良いパフォーマンスを出すために何をするべきかの判断材料にもなります。

以下は、パフォーマンスの悪化を改善した例です。

あるWebサーバーの応答速度が遅いので原因を調査しました。
Muninのグラフを眺めていると、ディスクの遅延時間(Average latency)の値が他のサーバーと比べて大きかったので、ディスクアクセス周辺に問題がありそうだということが確認できました。

iotopコマンドなどで、ディスクアクセスしているプロセスを調査した結果、updatedbというファイルをインデックスするプロセスが頻繁にディスクアクセスをしていることが分かりました。
インデックス対象のディレクトリを変更するなどして負荷を下げた結果、サーバー全体のディスク遅延時間が改善しWebサーバーの応答時間も短くなりました。

このように、サーバー監視ツールはパフォーマンスの問題を解決するのにも役立ちます。
Muninは稼働状況の履歴をグラフで確認できるので、
「サーバーの状況が過去から現在にかけてどのように変化してきているか」
を追うことが出来ますので、サーバーを運用しつづけるにあたってぜひとも入れておきたいツールです。
「正常だった当時とトラブルが起こっている現在ではどのように状況が変わっているか?」を確認することに意味がありますので、トラブルが起こったときではなく、トラブルへの備えとして早めに導入しておくことをおすすめします。

Muninでは、主に以下のような指標をグラフ化することができます。

  • CPU使用率
  • Disk使用率
  • メモリ使用量
  • ネットワークのトラフィック

他にも、プラグインを入れることで多くの項目について監視することができます。
muninのグラフや読み方は以下のページに詳しく書かれていますので参考にしてください。
muninグラフの読み方と意味 | シーズクリエイターズブログ

Muninを選択する理由

数あるサーバー監視ツールの中でも、Muninは比較的インストールしやすいのでおすすめです。管理するサーバーの台数が数台程度ならばMuninで十分だと思います。
自分で監視ツールをインストールするのが面倒な方は、監視コンソール画面を自サーバーで準備するのではなく、サードパーティのASPとして導入できるMackerelとか、SavaMoniNew Relicなどもありますのでそちらを利用するのも良いかと思います。
ただし、こういったサービスは無料で使える機能が限られていたり、取得データを蓄積できる期間が限られていますので注意が必要です。

Muninのインストール手順

Muninを使えるようにするためには、Muninサーバーと、対象サーバーを監視するためのmunin-nodeをはじめ、いくつかのパッケージをインストールする必要がありますが、muninパッケージをインストールするだけで関連パッケージはすべていもづる式にインストールできます。
インストールの実施はCentOS 6.7で確認しています。
rootユーザーで作業してください。

# yum install munin

Muninサーバー本体と、エージェントのmunin-nodeがインストールされます。Perl関連のパッケージも同時にインストールされます。

次に、アクセス時のユーザー認証を設定します。
Muninのグラフを一般に公開しないようにするため、htaccessによるBasic認証を設定します。
パスワードを決めて入力してください。

# htpasswd -m /etc/munin/munin-htpasswd munin
New password: (パスワードを入力)
Re-type new password:  (パスワードを入力

監視エージェントであるmunin-nodeを起動します。

# service munin-node start

サーバー起動時に、Muninが自動で起動するように設定します。

# chkconfig munin-node on

設定を有効にするためにApacheを再起動します。

# service httpd restart

これで
http://xxx.xxx.xxx.xxx/munin
( xxx.xxx.xxx.xxxはあなたのVPSのIPアドレス)
にアクセスし、
ユーザー:munin
パスワード: htpasswdコマンドであなたが決めたパスワード
の認証を済ませるとmuninの管理画面が表示されます。
以下の画面が表示されない場合は、まだMuninの計測データが作られていませんので、5分以上間ををいて再度アクセスしてみてください。

localhostのリンクをクリックすると、様々なリソース状況を表示するグラフが表示されます。
リソースの計測は、5分に一度行われます。しばらく時間をおいてからブラウザを更新すると、経過した時間に応じてグラフが描かれているのが分かると思います。

Apacheの監視項目を追加する

これで、DISKやCPUなどの計測情報が得られるようになりました。
しかし、このままではApacheに関する情報がありませんので、Apacheに関するHTTPアクセス数などもグラフ表示できるように設定します。

以下のコマンドを実行してください。Apacheに関するMuninプラグインを有効にします。

# 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

次にApacheの設定ファイルhttpd.confを編集します。

# vim /etc/httpd/conf/httpd.conf

228行目付近で、
'#'記号でExtendedStatusがコメントアウトされているので#を削除して有効化します。

ExtendedStatus On

次に、server-statusへのアクセスを有効にする必要があるため、
/etc/httpd/conf.d/status.conf を新規作成し以下の設定を追加します。

# cd /etc/httpd/conf.d/
# vim status.conf

追加する内容:

<IfModule mod_status.c>
    ExtendedStatus On
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</IfModule>

設定が完了したのでApacheと監視エージェントのmunin-nodeを再起動します。

# service httpd restart
# service munin-node restart

ここで、いったん確認として以下のコマンドを実行してみてください。
表示された情報のうち、行の最後に数字が出ていればOKです。
行の最後が数字ではなく’U'という記号になっていれば、Apacheからステータス情報を正しく取れていませんので、設定を再度見なおしてください。

# munin-run apache_accesses
accesses80.value 1
# munin-run apache_processes
busy80.value 1
idle80.value 7
free80.value 248
# munin-run apache_volume
volume80.value 1024

数分待って
http://xxx.xxx.xxx.xxx/munin
にアクセスするとApacheの監視項目が表示されていると思います。

MySQLの稼働状況を監視する

MySQLの稼働状況もMuninでグラフ化できるように設定します。
監視する指標は、「出力バイト数」「クエリ発行数」「MySQLスレッド数」「低速クエリ発生数」です。

まず、MuninからMySQLにアクセスするために、専用のMySQLユーザー’munin’を作成します。rootのままでも良いですが、データベースの安全性を高めるために、ここでは専用ユーザーを作成します。

# mysql -u root -p
Enter password:  (MySQL rootユーザーのパスワードを入力してください)

MySQLのプロンプト上で、muninユーザーを作成します。
muninユーザーのパスワードを新しく決めて、****** のところを置き換えてください。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'munin'@'127.0.0.1' IDENTIFIED BY '********' ;
mysql> FLUSH PRIVILEGES;
mysql> exit

次に、MySQL用のMuninプラグインを設置します。

# ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/
# ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/
# ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/
# ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/

muninの設定ファイルmunin-nodeに、MySQLの設定を追加します。

# cd /etc/munin/plugin-conf.d
# vim plugin-conf.d/munin-node

追記する内容は以下です。
******のところはさきほど作ったMySQLのmuninユーザーのパスワードに置き換えてください。
-p********という風に、-p と パスワードの間にはスペースは入りませんので注意してください。

[mysql*]
env.mysqlopts -u munin -p******** -h 127.0.0.1 --port=3306

このファイルはパスワードが含まれていますので、第三者に見られないよう念のため読み/書きができる権限をrootユーザーだけに限定しておきます。

# chmod 600 /etc/munin/plugin-conf.d/munin-node

MySQL slow queryの設定

slow queryは、実行に時間がかかるMySQLクエリを記録するための設定です。この設定を有効にしておくと、実行に時間がかかったSQL文を記録することができ、あとでパフォーマンスの改善に役立てることができます。

ひとまず、遅いクエリであるかどうかのしきい値は10秒(long_query_time=10)にします。MySQLの設定ファイルmy.cnfを編集します。

# vim /etc/my.cnf

[mysqld]のセクションに以下を追加します。

slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=10

slow query記録用のログファイルを用意します。ファイルの権限はmysqlユーザーにします。

# touch /var/log/mysql-slow.log
# chown mysql:mysql /var/log/mysql-slow.log

設定が終わったので、muninからMySQLに関する計測値が取れているかどうか確認します。
行末に数字が出てればOKです。

# munin-run mysql_bytes
recv.value 4905156
sent.value 34477285
# munin-run mysql_queries
delete.value 760
insert.value 760
replace.value 0
select.value 22813
update.value 2096
cache_hits.value 0
# munin-run mysql_slowqueries
queries.value 0
# munin-run mysql_threads
threads.value 1

最後に監視エージェントのmunin-node を再起動します。

# service munin-node restart

これでMySQLに関するグラフも表示されると思います。

Webサーバー運用講座の第3回目は以上です。ときどきMuninのグラフをチェックして、サーバーが安定して稼働していることを確認しましょう。
次回はファイアウォール(iptables)を紹介します。

おしらせ