インフラブログ

とあるWEBサイトのインフラを構築運用するメモ

システムモニタのグラフ生成に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