[MUNIN+Ubuntu14.04+nginx] サーバやMySQLの状態を監視する方法

この記事の内容

  • MUNINのUbuntu14.04へのインストール方法
  • nginxでMUNINの監視データを閲覧できるようにする方法
  • MySQLを監視対象に追加する方法
  • 上記のなかでうまくいっていない点について

こんな感じでブラウザで監視できるようになります。

まえおきの話

Botの運用に向けてサーバ監視したい

近々Discord botの試験運用をはじめようと考えています。
しかし、DBやメモリ・CPUにどの程度余裕があるのか、どこがボトルネックになるのか、まったく見当がつかない状態です。
実際に運用してみて、詳細なログを確認しながら調整を行いたいと思い、サーバ監視をはじめることにしました。

環境

項目 内容
VPSプラン KAGOYA VPS
OpenVZ 6コア 2GBプラン
OS Ubuntu 14.04
Webサーバ nginx 1.4.X
MySQL MySQL Ver 14.X

MUNINとは

MUNIN公式ページより(ざっくり翻訳です)

MUNINは、コンピュータのすべてを監視・記録するモニタリングツールです。
記録したデータは、ウェブをとおしてグラフの形式で閲覧することができます。
インストールするだけで、多種多様な項目の監視をすぐにはじめることができます。

MUNINの標準はApacheですが、設定をすこし触ればnginxでも運用できます。

他の選択肢

MUNINはRRDtoolのフロントエンドツールです。
同じようなツールにはcactiがありますが、インストールの手軽さ、プラグインの明快さからMUNINを選択しました。
実際、インストール開始から監視を始めるまで数十分で監視を始めることができました。

注意:うまく動いていない部分があります

筆者の環境では、以下のグラフが描画されていません。

  • Disk IOs per device
  • Disk latency per device
  • Throughput per device
  • Utilization per device

以下のようになってしまいまっています。

~~また、グラフをクリックして拡大する機能も動作していません。
ちょっと調べて見た限りでは、fast-cgiの設定が不十分であるために発生しているようです。解決次第追記します。~~

こちら解決しました。手順を別記事にまとめました。
[Munin] Ubuntu+Nginx+Munin 拡大グラフが表示されないときの対処方法

MUNINのインストール

MUNINを使うには、MUNIN本体とMUNINノード(データ収集するクライアントのようなもの)が必要です。
今回はMUNIN本体を置くサーバと監視対象サーバは同じなので、まとめてインストールします。

$ sudo apt-get install munin-node
$ sudo apt-get install munin

MUNIN本体の設定ファイルを変更します。
100行目あたりに、[localhost.localdomain]というカテゴリがあります。
をとりのぞき、以下のように変更します。

[localhost]
    address 127.0.0.1
    use_node_name yes

最後にサーバとノード、それぞれを再起動してMUNINのインストールは完了です。

$ sudo service munin-node restart
$ sudo service munin restart

nginxの設定

インストールしたMUNINをWebサーバ経由で閲覧できるよう、nginxの設定を行います。
サーバの状態を監視するページなので、BASIC認証を行うよう設定します。

BASIC認証用ファイルの作成

BASIC認証を行うため、htpasswdコマンドを使って認証ファイルを作成します。htpasswdコマンドは、apache2-utilsパッケージに含まれます。
ユーザ名、パスワードは任意のもので構いません。

$ sudo apt-get install apache2-utils
$ su root
# cd /etc/nginx/
# htpasswd c .htpasswd_munin (ユーザ名)
New password: (パスワード)
# exit(通常ユーザに戻る)

nginx設定ファイルの編集

nginxの設定にMUNINへのルーティングを追加します。

$ sudo vim /etc/nginx/sites-enabled/default

追加するのは以下、# ここから ---> # ここまで <---で囲んでいる部分です。
下記の例は、MUNINの設定をデフォルトから変更していない場合です。
/etc/munin/munin.confhtmldirを変更した場合、下記を参考に編集してください。

server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;

  ...

    # ここから --->
  location ^~ /munin/ {
    auth_basic "Enter password";
    auth_basic_user_file /etc/nginx/.htpasswd_munin;
    alias /var/cache/munin/www/; # 設定のhtmldir
  }
    # ここまで <---
...

nginxサービス再起動

設定を反映するため、Nginxを再起動します。

$ sudo service nginx restart

この時点で、MUNINのWebインターフェースにアクセスできるようになっているはずです。
http://(サーバのIPアドレスまたはホスト名)/munin/にアクセスしてみましょう。

MySQLの監視設定

MySQLにMUNIN用ユーザを追加

MySQL用のパスワードとユーザ名を決めておきましょう。
以下の例では、ユーザ名munin、パスワードmuninpassとしています。

$ mysql -u root -p
> GRANT ALL PRIVILEGES ON *.* TO munin@localhost IDENTIFIED BY 'muninpass';
> FLUSH PRIVILEGES;
> exit

munin-nodeの設定にMySQL接続情報を追加

さきほど追加したMySQLユーザ情報をmunin-nodeに設定してあげます。

$ sudo vim /etc/munin/plugin-conf.d/munin-node

重要なのは、-pmuninpassとしているように、-pとパスワード文字列の間にスペース等を置かないことです。間違えやすいので気をつけてください。
また、MySQLのポート番号を変更している場合、3306の部分をあなたのサーバのポートに書き換えてください。

[mysql*]
env.mysqlopts -u munin -pmuninpass
env.mysqladmin /usr/bin/mysqladmin
env.mysqlconnection DBI:mysql:mysql;host=localhost;port=3306(mysql port)
env.mysqluser munin
env.mysqlpassword munindb

Perlライブラリのインストール

MySQLの監視を行うために必要なPerlのCacheライブラリをインストールします。

$ sudo apt-get install libcache-cache-perl

MySQLプラグインの追加

MUNINの監視項目を増やすのは非常に簡単です。/etc/munin/plugins/フォルダにプラグインファイルを置いてサービスを再開するだけで、「監視対象としてのデータ蓄積開始」「Webインターフェースでの項目の追加」の両方が完了します。

既定のプラグインは、/usr/share/munin/pluginsにインストールされています。このうち、監視したい項目のプラグインを/etc/munin/plugins/フォルダにコピー(またはシンボリックリンクを作成)すればOKです。

$ sudo ln -s /usr/share/munin/plugins/mysql_            /etc/munin/plugins/mysql_slow
$ sudo ln -s /usr/share/munin/plugins/mysql_            /etc/munin/plugins/mysql_commands
$ sudo ln -s /usr/share/munin/plugins/mysql_bytes       /etc/munin/plugins/mysql_bytes
$ sudo ln -s /usr/share/munin/plugins/mysql_threads     /etc/munin/plugins/mysql_threads
$ sudo ln -s /usr/share/munin/plugins/mysql_queries     /etc/munin/plugins/mysql_queries
$ sudo ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/mysql_slowqueries

コネクション数も監視対象にしたいのですが、デフォルトでインストールされているプラグインの中にはありません。
このような場合は、GitHub等からダウンロードしましょう。

$ sudo wget -P /usr/share/munin/plugins/ https://raw.github.com/munin-monitoring/contrib/master/plugins/mysql/mysql_connections
$ sudo ln -s /usr/share/munin/plugins/mysql_connections /etc/munin/plugins/mysql_connections

サービス再起動

最後にサーバとノード、それぞれを再起動して完了です。

$ sudo service munin-node restart
$ sudo service munin restart

Nginx CGI設定

グラフの拡大機能を利用するには、追加で設定が必要です。
別記事にまとめてありますので、拡大機能を利用したい方は以下をご覧ください。

[Munin] Ubuntu+Nginx+Munin 拡大グラフが表示されないときの対処方法