Muninの設定についてまとめてみる。

久しぶりに Munin の設定についてまとめてみる。 前回書いたのが4年以上前みたいなので。 最近の事情とか含めたりと。

Munin の仕組み

Muninは各マシンの状態を数値で取得して、グラフを書いて状態の可視化をするツールです。 Muninには munin-node という監視される側 (agent) と、munin サーバと呼ばれる数値を収集して記録しグラフ作成を行う2つのパートに分かれます。

  • エージェントである munin-node
  • 情報収集を行う munin server
    • munin-node に接続し情報を収集する munin-update
    • 可視化するためのHTMLを作成する munin-html
    • 可視化するためのグラフ画像を作成する munin-grapth, munin-cgi-grapth, munin-fastcgi-graph
    • 上記3つを駆動する munin-cron

munin-node のインストールや設定

昔はFedoraやEPELからパッケージを持ってきて云々とかしていたのですが、最近はそのようなことも必要なくなり、おおよその Linux ディストーションに添付されるようになりました。 インストールは yum や apt-get で行えばよいかと思います。

sudo yum install munin-node
sudo apt-get install munin-node

設定は /etc/munin/node.d ディレクトリがある場合には、この中に node.conf などのファイルを作って、そこに設定を書いていくと良いでしょう。 無い場合には /etc/munin/munin-node.conf に書いていきましょう。

おおよそ必要な設定項目は下記のようになります。

# Listen するインターフェースを指定
host *

# munin-server のアドレスを指定: 正規表現
allow ^127.0.0.1$

# CIDR での指定
cidr_allow 192.0.2.0/24
cidr_deny  192.0.2.42/32

設定が終わったら、localhost や munin server から telnet などで接続できるか確認します。

telnet localhost 4949

ここで、下記のようなコマンドを送ってみましょう

  • list : 監視できるプラグインの一覧です
  • fetch df : fetch でプラグインごとの値が取得できます。 この場合は df (disk_free) の値を取得しています。
  • quit : 接続を終了します。

munin serverの設定

munin server は munin-node エージェントから各マシンの値を取得して、これを記録しHTMLやPNGのグラフとして可視化します。 また各プラグインの閾値などを元に Critical, Warning の表示をすることも出来ます。

設定ファイルは /etc/munin/munin-conf.d (Debian) や /etc/munin/conf.d (CentOS, Amazon Linux) などに配置するとよいでしょう。

まずは監視対象のホストの一覧を書きましょう。例えば /etc/munin/munin-conf.dhosts.conf といったファイルを作って、内容は下記のようにします。

[host.masaru.org]
        address 10.0.0.1
        use_node_name   yes

監視対象のホストの分だけ、上記のような内容を書いていきます。

Web Server 経由で見られるように設定

Munin が作成するHTMLを Web Server 経由で見られるように、下記内容を適切なVirtualHost内に記述します。

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
#Order allow,deny
#Allow from localhost 127.0.0.0/8 ::1
Options None

AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
require valid-user

#<IfModule mod_expires.c>
# ExpiresActive On
# ExpiresDefault M310
#</IfModule>

</Directory>

Debian の場合は /var/cache/munin/www の中に munin-html や munin-graph などが作り出す HTML, PNG を保存するようになっているので、このディレクトリへの Alias を設定しておきます。 CentOS などでは /var/www/html/munin に作っていました。

あとは apache をリスタートするなりして、表示されるか確認してください。

うまくいかない場合は、これらのログファイルを参考にヒントを探してください。

  • /var/log/apache2/error.log
  • /var/log/munin/munin-update.log
  • munin-node の /var/log/munin/munin-node.log
  • /var/log/munin/munin-html.log
  • /var/log/munin/munin-grapth.log

Tips

Munin の環境を作っていくと、問題に遭遇したり、さらに詳しい監視を行いたくなるでしょう。
それらの対処法をまとめておきます。

  • 監視対象が多くてグラフのPNGファイル作成に時間がかかる
  • munin-node の監視を増やす
    • Apache HTTPD 特有の監視
    • MySQL の監視

監視対象が多くなり、グラフのPNGファイル作成に時間が掛かる

標準的なMuninパッケージの設定の場合、Munin Server は5分に1回 cron で munin-cron が実行され、 munin-node から値を取得記録し、munin-html, munin-grapth を実行するようになっています。 監視対象のホストはプラグイン数が増えると、特に munin-grapth の実行回数が増えて、1回あたりの処理時間が長くなってしまいます。

対策としては、下記の2つが有力です。

  • munin-node のプラグインを減らす
  • グラフ作成を CGI や FastCGIに切替える

munin-node のプラグインを減らすのは手っ取り早いです。 /etc/munin/plugins ディレクトリの中に munin-node が利用するプラグインがシンボリックリンクで登録されています。 不要でしたら削除してから sudo service munin-node restart してください。

もう一つの方法は、グラフのPNG作成をCGIやFastCGIで実行する方法です。 MuninのグラフPNGは常に全てが見られるわけではないので、Webブラウザで見に来た時に On-demand で作成する方法です。 若干手間がかかりますが、結構現実的な対応法です。

まずは /etc/munin/munin-conf.d/cgi.conf などのファイルを作って、下記の内容を書きます。

# グラフ作成戦略を cgi にする
graph_strategy cgi
# 同時に動かすグラフ作成のスレッド数
munin_cgi_graph_jobs 6
# グラフを作成するCGIへのパス。HTML中に埋め込まれます。
cgiurl_graph /cgi-bin/munin-cgi-graph

この設定を行った後の munin-cron は、HTML作成時にグラフPNGのファイルを作成せず、上記の CGI パスをHTML中に埋め込みます。

そして、一部ディレクトリをCGIから書き出す具合になるので、Debianの場合は下記コマンドでファイル・ディレクトリのグループIDを変更し、 group writable にします。

sudo chgrp -R www-data /var/cache/munin/www /var/log/munin
sudo chmod g+w /var/cache/munin/www /var/log/munin

また、log rotate 時の所有者の設定も必要なので、/etc/cron.d/munin に下記のような設定も行います。

/var/log/munin/munin-graph.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        create 660 munin www-data
}

あとは、munin-cgi-graph が動作するように、 Apache の場合でしたら目的の VirtualHost 内に cgi-bin の設定をします。

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

あとは apache をリスタートするなりして、確認してください。 うまくいかないようでしたら、これらのログファイルを参考にヒントを探してください。

  • /var/log/apache2/error.log
  • /var/log/munin/munin-grapth.log

Apache HTTPD 特有の監視

Apache HTTPD には mod_status という機能があり、実行しているプロセス数や転送量などを取得できるようになっています。 これの結果を munin から取得できます。

まずは mod_status の設定をします。 Debian でしたら下記コマンドで mod_status を活性化できます。

sudo a2enmod status

あとは sudo service apache2 restart などを実行して、設定を反映してください。 そして、curl http://localhost/server-status などを実行して、localhost の Apache から status が取得できるか確認します。

munin-node へのプラグインの登録は、/etc/munin/plugins/ にシンボリックリンクを作って munin-node をリスタートするだけです。

cd /etc/munin/plugins/
for i in  /usr/share/munin/plugins/apache_* ; do
 sudo ln -vs $i
done
sudo service munin-node restart

MySQL の状態監視

Munin には MySQL Server に接続して、各種統計情報を収集するプラグインがあります。 これの設定方法を Debian/Ubuntu を例に紹介します。

PostgreSQLも同様にDB接続や認証周りを設定すれば利用できるはずです。

まずは MySQL Server に接続するためのID, Password の設定を拾ってきます。 Debianの場合、/etc/mysql/debian.cnf に下記のような設定があるかと思います。 Debパッケージをインストールするときに、各マシンの MySQLサーバに管理用のID, Passwordを設定しているようです。

user     = debian-sys-maint
password = XXXXXXXXXXXXXXXX

これの password の内容をコピーしておき、 /etc/munin/plugin-conf.d/munin の mysqlセクションに記述します。 記述後の内容は下記のようになります。

[mysql*]
user root
env.mysqlopts --defaults-file=/etc/mysql/debian.cnf
env.mysqluser debian-sys-maint
env.mysqlpassword XXXXXXXXXXXXXXXX
env.mysqlconnection DBI:mysql:mysql;mysql_read_default_file=/etc/mysql/debian.cnf

そして、/usr/share/munin/plugins/mysql_ の suggest 機能を使うと、監視できるか確認が出来ます。 私の手元の MySQLサーバで実行したら、下記のようになりました。

$ sudo /usr/share/munin/plugins/mysql_ suggest
bin_relay_log
commands
connections
files_tables
innodb_bpool
innodb_bpool_act
innodb_insert_buf
innodb_io
innodb_io_pend
innodb_log
innodb_rows
innodb_semaphores
innodb_tnx
myisam_indexes
network_traffic
qcache
qcache_mem
replication
select_types
slow
sorts
table_locks
tmp_tables

これらの監視が出来るということですので、root ユーザで下記のようなコマンドを使って一気にプラグイン登録します。

for i in $(/usr/share/munin/plugins/mysql_ suggest) ; do
  ln -vs /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_$i
done

終わったら、sudo service munin-node restart を実行してプラグイン一覧の更新をしてください。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください