今回はMunin nodeの設定と起動です。
とりあえず実行
1 |
$ sudo /opt/munin/sbin/munin-node |
ログ(/opt/munin/log/munin/munin-node.log)を見ると、pidファイルを作ることができないということなので、/var/run/muninディレクトリを作って再度実行します。ただし、/var/runはtmpfsなのでマシンを落とすと消えてしまいます。最後に起動スクリプトのサンプルを載せておきます。
1 2 3 4 5 |
Process Backgrounded 2013/06/13-23:04:45 Couldn't open pid file "/var/run/munin/munin-node.pid" [%E3%81%9D%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%84%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93]. at line 180 in file /usr/local/share/perl/5.14.2/Net/Server.pm 2013/06/13-23:04:45 Server closing! |
Munin nodeにtelnetでアクセス
telnetで4949番ポートにアクセスしてみます。以下のようなメッセージが表示さ、munin nodeが起動していることが確認できます。入力待ちの状態でenterを入力すると使用できるコマンドが表示されます。
1 2 3 4 5 6 7 8 9 10 11 |
$ telnet localhost 4949 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. # munin node at thinkly # Unknown command. Try cap, list, nodes, config, fetch, version or quit version munins node on thinkly version: 2.1.2-24-gd647ac6 quit Connection closed by foreign host. |
一旦、Munin nodeを停止して、設定を眺めてみます。
1 |
sudo kill `cat /var/run/munin/munin-node.pid` |
munin-node.conf
Munin nodeの設定ファイルは、/etc/opt/munin/munin-node.conf です。
今回はnodeとmasterを同一ホストで起動させますので、そのままにしておきます。変更する場合は、こちらを参照してください。
Plugin
監視する対象や項目が決まったら、そのためのプログラムを書く必要があります。このプログラムのことをPluginと呼んでいます。
多くのPluginがすでて利用可能で、ほとんどの場合それで事足りると思います。
利用可能なPluginは /opt/munin/lib/plugins にあり、利用するためには /etc/opt/munin/plugin にシンボリックリンクを作ります。
ただし、Pluginが実際に利用可能かどうかは環境に依存します。利用の可否を調べるには以下のコマンドを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
$ munin-node-configure --suggest Plugin | Used | Suggestions ------ | ---- | ----------- amavis | no | no apache | no | yes apc_envunit_ | no | no [no units to monitor] asterisk | no | no [Could not create socket: Connection refused] bonding_err_ | no | no [No /proc/net/bonding] courier_mta_mailqueue | no | no [spooldir not found] courier_mta_mailstats | no | no [could not find executable] courier_mta_mailvolume | no | no [could not find executable] cps_ | no | no cpuspeed | no | yes cupsys_pages | no | yes df | no | no df_inode | no | yes diskstats | no | yes exim_mailqueue | no | no [no exiqgrep] exim_mailstats | no | no ['/usr/sbin/exim -bP log_file_path' returned an e rror] fail2ban | no | no [/usr/bin/fail2ban-client not found] fw_conntrack | no | no fw_forwarded_local | no | no fw_packets | no | yes hddtemp_smartctl | no | no hwmon | no | no if_ | no | yes (+eth0 +wlan0) if_err_ | no | yes (+eth0 +wlan0) ip_ | no | no [could not run iptables as user miki] ipmi_ | no | no [missing ipmitool command] irqstats | no | yes jmx_ | no | no [connection to 127.0.0.1:5400 failed] lpstat | no | no [no printers configured] memory | no | yes munin_stats | no | yes mysql_ | no | no [Missing dependency Cache::Cache] netstat | no | no nfs4_client | no | no [no /proc/net/rpc/nfs] |
memoryというPluginを組み込んでみます。
1 |
$ sudo ln -s /opt/munin/lib/plugins/memory /etc/opt/munin/plugins |
組み込んだPluginは単体でも実行可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ munin-run memory slab.value 369266688 swap_cache.value 0 page_tables.value 64143360 vmalloc_used.value 381227008 apps.value 1867059200 free.value 4076740608 buffers.value 748625920 cached.value 1154162688 swap.value 0 committed.value 5502226432 mapped.value 175300608 active.value 2468442112 inactive.value 1169178624 |
mysql_を組み込む
munin-node-configure –suggest の結果を見ると、そのままではmysql_は使えないようです。Cache::Cacheを入れます。Ubuntuなら以下のようにして入れることができます。
1 |
$ sudo apt-get install libcache-cache-perl |
munin-node-configure –suggest の結果は以下のようになりました。
1 |
mysql_ | no | no [DBI connect('mysql;mysql_connect_timeout=5','root',...) failed: Access denied for user 'root'@'localhost' (using password: NO)] |
エラーを見るとmysqlに接続できていないようです。当然といえば当然で、このPluginにmysqlのパスワードなどを教える必要があります。
mysql_のように、Pluginによってはパラメータを指定する方法が必要があるものがあります。Pluginにパラメータを指定する方法は決まっています。こちらを参照。
mysql_ のドキュメントに指定できるパラメータの説明があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ perldoc /opt/munin/lib/plugins/mysql_ In addition you might need to specify connection parameters in the plugin configuration to override the defaults. These are the defaults: [mysql_*] env.mysqlconnection DBI:mysql:mysql env.mysqluser root Non-default example: [mysql_*] env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306 env.mysqluser root env.mysqlpassword geheim env.cachenamespace munin_mysql_pri [mysql2_*] env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=13306 env.mysqluser root env.mysqlpassword ryuWyawEv env.cachenamespace munin_mysql_alt Warning and critical values can be set via the environment in the usual way. For example: [mysql_replication] env.slave_io_running_warning 0.5 env.slave_sql_running_warning 0.5 env.seconds_behind_master_warning 300 env.seconds_behind_master_critical 600 |
ドキュメントに従って、/etc/opt/munin/plugin-conf.d に以下のようなファイルを作ります。環境にあわせて読み替えてください。
1 2 3 4 |
[mysql_*] env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306 env.mysqluser root env.mysqlpassword XXXXXX |
再度、munin-node-configureしてみると、利用できるようになったことが確認できます。
1 2 |
$ munin-node-configure --suggest|grep mysql_ mysql_ | no | yes (+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) |
これで、memoryのときと同じように、シンボリックリンクをつくれば使えそうなのですが、mysql_ のドキュメントを読むと「このPluginは、複数のグラフを出力できるらしい」、「シンボリックリンクを作るときに、mysql_に続けてグラフの名前(モニタする項目)を指定してリンクを作ればよい」、「作れるグラフは./mysql_ suggest で確認できる」ということがわかります。
Pluginの名前の最後が、”_”(アンダースコア) で終わっていているのは、この事情によるものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ /opt/munin/lib/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 |
シンボリックリンクを作成します。
1 |
/opt/munin/lib/plugins/mysql_ suggest | sudo xargs -i ln -s /opt/munin/lib/plugins/mysql_ /etc/opt/munin/plugins/mysql_{} |
起動スクリプト
起動スクリプトのサンプルです。start-stop-daemonを使っていますので、環境によってはそのままでは動作しません。適宜読み替えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
#! /bin/sh ### BEGIN INIT INFO # Provides: munin-node # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: munin-node startup script # Description: This file should be used to construct scripts to be # placed in /etc/init.d. ### END INIT INFO # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin:/opt/munin/sbin DESC="Description of the service" NAME=munin-node DAEMON=/opt/munin/sbin/$NAME DAEMON_ARGS="" PIDFILE=/var/run/munin/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME [ -x "$DAEMON" ] || exit 0 . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { if [ ! -d /var/run/munin ]; then mkdir -p /var/run/munin fi start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 } do_stop() { start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 rm -f $PIDFILE return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart) do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2 exit 3 ;; esac : |