設定

稼働までにいくつか罠(はまりどころ)があるので、この順序がよかろうかと。


munin-node.conf

ノードの設定と、デーモンの起動を先に完了させる。

変更点のみ。
ノードへの接続を許可するIPアドレスを正規表現で指定。
普通はマスターサーバのIPアドレスを指定する。
allow ^127\.0\.0\.1$
allow ^xxx\.xxx\.xxx\.xxx$

Net::CIDR導入済みなら
# cidr_allow 127.0.0.1/32
# cidr_allow 192.0.2.0/24
# cidr_deny  192.0.2.42/32
でコントロール可。

バインドアドレスを設定。マスター内ノードなら 127.0.0.1 でよし。
host 0.0.0.0

プラグインのシンボリックリンク生成

/usr/local/munin/sbin/munin-node-configure --shell --families=contrib,auto | sh -x

で、大抵はよしなにしてくれる。
足りない物、余計な物はあとで手動変更。
プラグインは

/usr/local/munin/etc/plugins

に設定、
スクリプト実体は

/usr/local/munin/lib/plugins

にある。
中には古かったり環境に合わないスクリプトもあるので、
スクリプト自体に手を入れる必要も出てくる。

実体スクリプトは一つで、シンボリックリンク先の名前を変更して利用するスクリプトは
アンダーバーで終わっていたり(mysql_など)、アンダーバーが連続していたりする(snmp__if_など)。
そのようなスクリプトは

/usr/local/munin/lib/plugins/mysql_ suggest

と、suggest を引数にすると、アンダーバー以下に指定する文字列が大抵は表示される。
不足分や追加があり、手動変更するときの参考に。
表示されないものはスクリプトを読む('A`)

環境変数ファイル作成

各プラグインで利用する環境変数を書いたファイルを作る。

場所は

/usr/local/munin/etc/plugin-conf.d/

ファイル名は何でも良い=存在すると読み込まれる

環境変数の内容については、

/usr/local/munin/bin/munindoc <スクリプト>

で、表示されるマニュアル内に大抵書いてある。
書いてない物、間違っている物もあるので注意が必要。

ノードエージェント起動

後ほど動作確認で必要になるため、
起動スクリプトを導入してサービス起動する。
起動しないときは logs/munin-node.log を確認。Perlのモジュール不足、環境変数の間違いなどがよくある。
なお、スクリプト自体がおかしい事もよくあるので、その際はスクリプトを自環境に合わせて修正する('A`)

オーナー変更

ここから、マスターサーバの設定。 インストールディレクトリを/usr/local/muninとする。

以下のオーナーを変更する。
ただし、マスターサーバにノードも入っている場合は
var/munin-nodeを除外すること。

cd /usr/local/munin/var
chown munin.munin ./

※※※はまりポイント※※※
特に var/cgi-tmp はRRDToolsのPNG生成場所のため、muninユーザで読書実行権限が必要。
デフォルト放置だと画像生成出来ず残念画面になる。

munin.conf

マスターサーバーの設定。

基本Makefile.configで指定する。
#dbdir   /usr/local/munin/var
#htmldir /usr/local/munin/www/docs
#logdir  /usr/local/munin/log
#rundir  /usr/local/munin/var/run
#tmpldir /usr/local/munin/etc/templates

includedir /usr/local/munin/etc/munin-conf.d

#graph_period minute
graph_strategy cgi ←グラフ生成方法をcgiへ変更
#munin_cgi_graph_jobs 6
cgiurl_graph /cgi-bin/munin-cgi-graph ←cgiを指定
#max_graph_jobs 6

html_strategy cgi ←ページ生成方法をcgiへ変更

rrdcached_socket /var/run/munin/rrdcached.sock ←RRDToolsのキャッシュデーモンへのソケットを指定

通知先設定はまたそのうち。
#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
#contact.nagios.command /usr/bin/send_nsca nagios.host.comm -c /etc/nsca.conf

# a simple host tree
[localhost]
    address 127.0.0.1
    use_node_name yes

# 各ノードでtelnet localhost 4949 → nodes で表示される名前を指定
[hoge]
    address xxx.xxx.xxx.xxx
    use_node_name no

/etc/hosts

マスターサーバの hosts に、ノードのホスト名とIPアドレスを列記する。
hoge xxx.xxx.xxx.xxx

rrdcached

socketにはwebサーバのオーナー(daemon,nobody,apacheなど)とmuninユーザが接続するので

・muninユーザで起動して
・グループをwebサーバのオーナーに変更する

という方針。
※-s オプションでグループオーナは変更出来るがオーナの変更が出来ないので。

動作確認用にフロントで動かす時は -g オプションを指定、
ベースディレクトリオプション -b には muninのvarディレクトリ(各rrdデータの親ディレクトリ)を指定する。
先にジャーナルやPIDファイルを置けるように適宜 mkdirやchmod,chown すること。

sudo -u munin /usr/local/rrdtools/bin/rrdcached \
  -p /var/run/munin/rrdcached.pid \     ←PIDファイル指定
  -B -b /usr/local/munin/var \        ←ベースディレクトリ指定
  -F -j /var/run/munin/rrdcached-journal/ \ ←ジャーナルディレクトリ指定
  -m 0660 -l /var/run/munin/rrdcached.sock \ ←-m で権限設定、-l でソケット指定
  -w 1800 -z 1800 -f 3600 \         ←-w で書込待ち時間指定、-z でランダム遅延時間指定、-f でフラッシュ間隔指定
  -g ←デーモンではなくフロントで実行

フロントでの確認作業時は別仮想端末からソケットのグループを変更する。

chgrp nobody /var/run/munin/rrdcached.sock

最終的には起動スクリプト内でグループ変更する。
サンプルスクリプト類はRRDToolsの <source dir>/etc 以下にある。

確認方法。

ノードが一つは動いていること。マスターサーバ内ノードが楽でよい。
別仮想端末でマスターサーバにログインし

su - munin
/usr/local/munin/bin/munin-cron

とする。

/usr/local/munin/logs/munin-update.log に最初のデータが生成されFATALが無ければ
/usr/local/munin/var/以下のノードのディレクトリを確認する。
データが生成されていればよし。

FastCGI設定

spawn-fcgiを利用するので用意する。EPELが楽。

spawn-fcgiの起動スクリプトをコピーして

munin-fcgi-graph
munin-fcgi-html

の二つを作成。sysconfig/spawn-fcgiも同様。

sysconfig以下のファイル内容を編集。

PID=/var/run/munin/fcgi-html.pid
SOCKET=/var/run/munin/fcgi-html.sock
OPTIONS="-u munin -g munin -U nobody -s $SOCKET -S -M 0600 -C 32 -F 1 -P $PID -- /usr/local/munin/www/cgi/munin-cgi-html"

ユーザはmuninで作成(-u -g)、のちnobodyへ変更(-U)。

起動スクリプトも適宜編集し、起動する。

※※※はまりポイント※※※
ノードのデータが無い時点では、起動してもすぐ落ちる。
なので、先のノードデータ取得とrrdcachedの確認をやっておくとよい。
最終的に上記のperlのプロセスが二つ上がっていればよし。

Webサーバの設定

FastCGI前提のため、Apacheよりnginxの方が相性がよかろうということで
ここではnginxを利用する。
http://munin.example.comのようなVirtualHostではなく
http://example.com/munin/のような標準的なディレクトリアクセスとする。
端折るとよくわからなくなるので、ひとまず全部載せ。

user  nobody;
worker_processes  2;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
}
http {
    include            mime.types;
    default_type       application/octet-stream;
    sendfile           on;
    keepalive_timeout  10;
    gzip               on;

    server {
        listen       80;
        server_name  example.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        #### location定義は原則上から順に評価
        location ~ /\.ht {
            deny  all;
        }

        #### Munin
        location ^~ /munin-cgi/munin-cgi-graph/ {
            access_log off;
            #munin-cgi-graph に渡す環境変数PATH_INFOを抽出する
            fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
            include fastcgi_params;
        }

        location /munin/static/ {
            alias /usr/local/munin/www/docs/static/;
        }

        location /munin/ {
            alias /usr/local/munin/www/docs/;
            #munin-cgi-html に渡す環境変数PATH_INFOを抽出する
            fastcgi_split_path_info ^(/munin)(.*);
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_pass unix:/var/run/munin/fcgi-html.sock;
            include fastcgi_params;
        }
        #### End of Munin

        #### PHP Default
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

ページ自体表示されずに、エラーが502の場合はsocketに渡ってない、
渡す内容(PATH_INFOの内容)がおかしい、socket自体おかしい、perlが落ちてるなど。
nginxのerror_logを参照(情報量は少ない)。

グラフ画像が表示されない場合で、エラーが500の場合はrrdtoolでPNG生成されてないなど。
muninのmunin-cgi-graph.logやmunin-update.logを参照。

トップページと先にテストしたノードのグラフが表示されればよし。

cron

ノードデータのポーリング設定。
上で上手く表示されているならだいたい大丈夫。
あとは個別にログを見ながら修正する。

muninユーザーで5分間隔実行する。
/etc/cron.d/munin
#
# cron-jobs for munin
#
MAILTO=root
*/5 * * * * munin test -x /usr/local/munin/bin/munin-cron && /usr/local/munin/bin/munin-cron

トップ   編集 凍結解除 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-04-29 (火) 17:57:19