システムモニタのグラフ生成にMuninを使用する
Monitでシステムモニタ、プロセス監視も行うのですが、プラスでMuninも導入します。 Muninでは各種システムモニタ、グラフ生成、しきい値超え検知時の通知など行います。
導入するパッケージは各インスタンスに導入するmunin-nodeとmunin-nodeから情報を収集してグラフ生成(RRDtool)、アラート通知を行うmuninの2つで構成されます。 Muninはwatchと名づけたサーバに導入します。Muninでグラフ生成するノードの対象はEC2のNameタグに名前がついているものだけとします。 appサーバ、resqueサーバの中でオートスケールによって増えた分は対象としません。
対象ノードが増えてくるとMunin側でのグラフ生成に時間がかかるようで、色々対策されるかたもいるみたいです。この案件でもノード数が増えてきた場合は何かしらの対策をしたいと思いますが、とりあえずはそのまま使っていきます。
インストール
毎度のyumでいれるだけです。
# 全ec2インスタンス $sudo yum install munin-node # watchサーバ(グラフを生成する) $sudo yum install munin
munin-nodeの設定
ACL
Muninが動いているサーバが各インスタンスのmunin-nodeに接続してくるので、munin-nodeの設定でmuninのIPを接続許可する設定が必要です。 今回はVPC内サブネットのネットワークアドレス全体を許可にしました。
/etc/munin/munin-node.conf
# A list of addresses that are allowed to connect. This must be a # regular expression, since Net::Server does not understand CIDR-style # network notation unless the perl module Net::CIDR is installed. You # may repeat the allow line as many times as you'd like allow ^127\.0\.0.1$ allow ^172\.31\.[0-9]+\.[0-9]+$ # Which address to bind to; host * # host 127.0.0.1 # And which port port 4949
またmunin-node自体はtcp:4949でListenしているので、全セキュリティグループに対して下記のポリシーを追加します。
SecurityGroup=NETからのtcp:4949を受け入れる
プラグインを有効にする
色んなサービスのプラグインがデフォルトで用意されているので、サーバの中にそのサービスが動いていればmuninインストール後からすぐにモニタリングができるようになります。
どのプラグインが有効になっているかはmunin-node-configure
で確認できるようです。
参考になった記事
試した所munin_statsというのが有効になっていないようなので有効にしてみました。シンボリックリンクを貼った後、munin-nodeのrestartをします。
$sudo munin-node-configure --shell ln -s '/usr/share/munin/plugins/munin_stats' '/etc/munin/plugins/munin_stats' $sudo ln -s '/usr/share/munin/plugins/munin_stats' '/etc/munin/plugins/munin_stats' $sudo /etc/init.d/munin-node restart
また、WEBサイトのヘルスチェックをMuninで行いたいと考えていたのですが、どんぴしゃなプラグインがありましたのでこれをそのままwatchサーバのmunin-pluginに導入します。 httpingとmuninでWebサーバのレスポンスをグラフ化した
munin側の設定
監視対象のノードを追加する
/etc/munin/munin.confで収集するノードを下記のように追記していきます。ノード毎にしきい値をデフォルト以外に設定することも可能です。
[example;] contacts systemalert [example;watch-1] #watch-1で名前解決できないとだめ address 127.0.0.1 use_node_name yes httping_staging.contacts httping load.load.warning 10 cpu.user.warning 500 load.load.critical 20 cpu.user.critical 700
アラート通知設定
また、しきい値超の場合のアラートメール設定は、下記のようなものを任意の別ファイルにして設定しました。 アラートの内容、深刻度によってメールの送信先を分けてるようにします。
- /etc/munin/munin-conf.d/munin-alert
contact.httping.always_send critical contact.httping.max_messages 5 contact.httping.command mail -s "${var:worst} ${var:cfields} Munin http healthcheck" systemservicedown@watch.example.com contact.systemalert.always_send critical contact.systemalert.max_messages 3 contact.systemalert.command mail -s "${var:worst} ${var:cfields} ${var:group} ${var:host}" systemalert@watch.example.com
計画メンテナンス時などでサービスダウンしている場合に毎回ご丁寧にアラートメールを送ら無くても良いので、アラート通知を気軽にオン、オフにできるようにします。 上記のmunin-alertが/etc/munin/munin-conf.d/にあると通知オン、なければオフとなるので、このファイルを置いたり消したりするデプロイタスクを後ほど用意します。
グラフを見る
グラフはhttp://muinが動いているサーバ/munin
で閲覧できます。
Muninを入れたサーバでApacheが動いているものとします。Muninを入れた時点で/etc/httpd/conf.d/munin.conf
が用意されます。
社内からのアクセスだったらパスワード認証なしでグラフを見れるようにして、社外であればベーシック認証というように変更します。
- /etc/httpd/conf.d/munin.conf
AuthUserFile /etc/munin/munin-htpasswd AuthName "Munin" AuthType Basic require valid-user Satisfy Any Order deny,allow Deny from all Allow from 127.0.0.1 172.31. 会社のIP