Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mon, Muninによる楽々監視生活

42,538 views

Published on

qpstudy #01で発表した資料です

Published in: Technology
  • If you are looking for trusted essay writing service I highly recommend ⇒⇒⇒WRITE-MY-PAPER.net ⇐⇐⇐ The service I received was great. I got an A on my final paper which really helped my grade. Knowing that I can count on them in the future has really helped relieve the stress, anxiety and workload. I recommend everyone to give them a try. You'll be glad you did.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/2F4cEJi ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ♥♥♥ http://bit.ly/2F4cEJi ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • nice!!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Mon, Muninによる楽々監視生活

  1. 1. <ul><li>mon, munin による楽々監視生活 </li></ul>  桑野 章弘
  2. 2. アジェンダ <ul><li>自己紹介 </li></ul><ul><li>監視、、、嫌いなんです。 </li></ul><ul><li>監視の種類 </li></ul><ul><li>実際の手順 [munin 編 ] </li></ul><ul><li>実際の手順 [mon 編 ] </li></ul><ul><li>まとめ </li></ul>
  3. 3. 自己紹介
  4. 4. 自己紹介 <ul><li>桑野 章弘 </li></ul><ul><ul><li>id: akuwano </li></ul></ul><ul><ul><li>twitter: @kuwa_tw </li></ul></ul><ul><li>渋谷で働く IT 企業 </li></ul><ul><li>インフラエンジニア </li></ul><ul><ul><li>最近は自分でも何やってんのかわからなくなってきた </li></ul></ul><ul><ul><li>趣味は最近はスマートフォンかな? NexusOne を持っておりますが、 iPhone ユーザとアイデンティティを戦わせたりするのが好きです。 </li></ul></ul>
  5. 5. qpstudy 最初の一発目とか 恥ずかしいんですが、、、
  6. 6. はじめさせて頂きます お題は、、、
  7. 7. 監視、、、嫌いなんです。
  8. 8. 何が嫌いってメンドクサイ <ul><li>好きです? </li></ul><ul><ul><li>やれサーバ足しただの </li></ul></ul><ul><ul><li>やれサーバ外しただの </li></ul></ul><ul><ul><li>スペックが変わったとか </li></ul></ul><ul><ul><li>毎回変えるの? </li></ul></ul><ul><ul><li>なんやかんやですよ </li></ul></ul><ul><ul><li>てんやわんやですよ </li></ul></ul><ul><ul><li>とにかく嫌なんです!めんどくさいんです!さよなら! </li></ul></ul>
  9. 9. でもね、、、 <ul><li>監視って大事なんです </li></ul><ul><ul><li>定常的に見ないとわからないもの </li></ul></ul><ul><ul><li>突発的に出てくる負荷 </li></ul></ul><ul><ul><li>トラブルシューティング時に大活躍 </li></ul></ul><ul><ul><li>寝た子を起こされたりとかもしますけど </li></ul></ul><ul><ul><li>やっぱり離れられない! </li></ul></ul>
  10. 10. と言うわけで <ul><li>監視を出来るだけ簡単にやってみましょうと言うコンセプト。 </li></ul><ul><li>スパッと。 </li></ul>
  11. 11. 監視の種類
  12. 12. こんなのがあります <ul><li>トレンドの監視 </li></ul><ul><li>障害監視 </li></ul>
  13. 13. トレンドの監視 <ul><li>リソースを追ったり </li></ul><ul><li>負荷の増減状況をみたり </li></ul><ul><ul><li>サービス状況のログ取得と言う意味の監視 </li></ul></ul><ul><li>予防の監視 =munin </li></ul>
  14. 14. 障害監視 <ul><li>サーバが落ちたり </li></ul><ul><li>書き込みが出来なかったり </li></ul><ul><ul><li>事象が起こることを監視するという意味の監視 </li></ul></ul><ul><ul><li>検知の監視 =mon </li></ul></ul>
  15. 15. こんなのでいきましょう <ul><li>トレンドの監視 =munin </li></ul><ul><li>障害監視 =mon </li></ul>
  16. 16. 実際の手順 [Munin 編 ]
  17. 17. munin とは <ul><li>perl ベースでかかれた監視ツール(カラスの意味らしいです) </li></ul><ul><li>データ取得は cron で一定期間毎に polling する形式(デフォルト 5 分) </li></ul>
  18. 18. Overview サーバ cron で polling クライアント群 HTML ファイル
  19. 19. Munin[Index]
  20. 20. Munin[ 日時 ]
  21. 21. インストール <ul><li>パッケージで簡単 </li></ul><ul><ul><li>このさい RPMforge 使いましょうw </li></ul></ul><ul><ul><li>Debian 系は APT で OK </li></ul></ul>##### サーバインストール # rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt # rpm -ihv http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm # yum update # yum install munin.noarch ##### クライアントインストール # yum install munin-node.noarch ##### サーバインストール (debian/ubuntu) # aptitude install munin ##### クライアントインストール (debian/ubuntu) # aptitude install munin-node
  22. 22. 設定 [ サーバ側 ] <ul><li>取得先のサーバ(エージェントが動いてるサーバ)を記述するだけで簡単 </li></ul><ul><ul><li>処理が多い時は [max_processes] もいじるといいよ </li></ul></ul>vi /etc/munin/munin.conf (snip) ### データ取得先サーバの設定 ### ### db server ### [db.example.com;hoge-db01] address 192.168.0.11 use_node_name yes [db.example.com;hoge-db02] address 192.168.0.12 use_node_name yes グループ名 ホスト名 IP アドレス
  23. 23. 設定 [ クライアント側 ] <ul><li>エージェントを起動するだけでアラ簡単! </li></ul><ul><ul><li>でも取得データを増やしたい場合は /etc/munin/plugins にスクリプトおいて、 /etc/munin/ plugin-conf.d/ にスクリプト毎の設定をおきましょう </li></ul></ul>vi /etc/munin/munin-node.conf (snip) ### Munin サーバの IP 許可設定 ### allow ^192.168.0.10$ ### 取得データの変更 MySQL 関連のパラメータを取得したい ### # ln –s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes cat <<‘EOF’ > plugin-conf.d/mysql [mysql*] env.mysqladmin /usr/bin/mysqladmin env.mysqlopts -udbadmin -h127.0.0.1 EOF ### エージェント起動 ### /etc/init.d/munin-node start  
  24. 24. その他の運用 <ul><li>Web ページはテンプレートでカスタマイズ可能 </li></ul><ul><ul><li>/etc/munin/templates/ 以下にテンプレートがあるのでそれを編集してカスタマイズできます </li></ul></ul><ul><li>独自の監視もスクリプトで簡単! </li></ul>
  25. 25. 独自スクリプト #!/bin/bash MeasurementMode=min #MeasurementMode=sec DATE=`date +%Y-%m-%d` LOG_FILE=&quot;/usr/local/tomcat/logs/hoge.log&quot; GREP_TEXT_E=&quot;ERROR&quot; GREP_TEXT_W=&quot;WARN&quot; TARGET_MINUTE=`LANG=C date +%H:%M --date '1 minutes ago'` TARGET_SECOND=`LANG=C date +%H:%M:%S --date '1 minutes ago'` ECHO=/bin/echo GREP=/bin/grep WC=/usr/bin/wc TAIL=/usr/bin/tail CAT=/bin/cat
  26. 26. 独自スクリプト if [ &quot;$1&quot; == &quot;config&quot; ]; then $ECHO &quot;graph_title log exception count $LOG_FILE&quot;; $ECHO &quot;graph_vlabel request /$MeasurementMode&quot;; $ECHO &quot;graph_category ExceptionCount&quot;; $ECHO &quot;graph_order ERROR WARN&quot;; $ECHO &quot;ERROR.label ERROR*100&quot;; $ECHO &quot;ERROR.min 0&quot;; $ECHO &quot;ERROR.max 1000&quot;; $ECHO &quot;ERROR.draw AREA&quot;; $ECHO &quot;WARN.label WARN&quot;; $ECHO &quot;WARN.min 0&quot;; $ECHO &quot;WARN.max 1000&quot;; $ECHO &quot;WARN.draw STACK&quot;; exit 0; fi
  27. 27. 独自スクリプト if [ &quot;$MeasurementMode&quot; == &quot;min&quot; ]; then TARGET_BETWEEN_TIME=$TARGET_MINUTE TAIL_LINE_CNT=10000 else TARGET_BETWEEN_TIME=$TARGET_SECOND TAIL_LINE_CNT=1000 fi count=`$TAIL -n $TAIL_LINE_CNT $LOG_FILE | $GREP &quot;$TARGET_BETWEEN_TIME&quot; | $GREP &quot;$GREP_TEXT_E&quot; | $WC -l` $ECHO $GREP_TEXT_E.value $(($count*100)) count=`$TAIL -n $TAIL_LINE_CNT $LOG_FILE | $GREP &quot;$TARGET_BETWEEN_TIME&quot; | $GREP &quot;$GREP_TEXT_W&quot; | $WC -l` $ECHO $GREP_TEXT_W.value $count
  28. 28. 実際の手順 [Mon 編 ]
  29. 29. mon とは <ul><li>perl ベースでかかれた監視ツール( Service Monitoring Daemon ) </li></ul><ul><li>Unisys の人が作ってたみたいだけど更新は止まってる模様 </li></ul><ul><ul><li>えーと、間違えました、枯れてます </li></ul></ul>
  30. 30. Overview
  31. 31. インストール <ul><li>やっぱりパッケージで簡単 </li></ul>##### mon のインストール # yum install mon.x86_64 ##### mon のインストール (debian/ubuntu) aptitude install mon
  32. 32. 設定 [ サーバ側 ] <ul><li>[mon.cf] に取得先のサーバを記述するだけで簡単 </li></ul>#################################################################### # 監視先サーバの設定 #################################################################### hostgroup hoge-www-servers 192.168.0.10 192.168.0.11 192.168.0.12 hostgroup fuga-db-servers 192.168.0.11 192.168.0.12
  33. 33. 設定 [ サーバ側 ] <ul><li>[mon.cf] に取得先のサーバを記述するだけで簡単 </li></ul>#################################################################### # サービス監視の設定 #################################################################### watch hoge-servers service ping interval 10s monitor fping.monitor period wd {Sun-Sat} alertevery 3m alertafter 18 3m alert mail.alert -f alert@example.com hoge-alert@example.com upalert mail.alert -f alert@example.com -S “TITLE&quot; -u hoge-alert@example.com service http interval 3m monitor http.monitor -p 80 -u &quot;/url/check.html&quot; allow_empty_group period wd {Sun-Sat} alertevery 9m alertafter 3 9m alert apache_tomcat-restart.alert alert mail.alert -f alert@example.com hoge-alert@example.com upalert mail.alert -f alert@example.com -S “TITLE&quot; -u hoge-alert@example.com
  34. 34. 設定 [ クライアント側 ] <ul><li>なんもいらんです!簡単の極み! </li></ul><ul><ul><li>SSH させてとかやるならいる場合もあります </li></ul></ul>
  35. 35. 運用 <ul><li>Web のコンソール [mon.cgi] </li></ul><ul><li>CLI インターフェース [moncmd/monshow] </li></ul><ul><li>Monitor スクリプト </li></ul><ul><li>Alert スクリプト </li></ul>
  36. 36. Web のコンソール [mon.cgi] <ul><li>Web のコンソール [mon.cgi] </li></ul>
  37. 37. mon.cgi
  38. 38. monshow <ul><li>CLI インターフェース [moncmd] </li></ul><ul><ul><li>mon.cgi でやれることを CLI でも出来ます。 </li></ul></ul><ul><ul><ul><li>設定の確認や、現在のステータス確認 </li></ul></ul></ul>
  39. 39. CLI インターフェース [moncmd/monshow] <ul><li>CLI インターフェース [monshow] </li></ul># /usr/local/mon/clients/monshow --full server: localhost time: Thu May 20 11:38:30 2010 state: scheduler running GROUP SERVICE STATUS LAST NEXT ALERTS SUMMARY R hoge-w-both-mys load_average untested untested 7s none R hoge-w-both-bat hoge-w-both- - 10s 1s none R hoge-both-info- df_check_80 - 79s 00:28:24 none R hoge-both-info- df_check_90 - 00:01:55 00:27:48 none R hoge-c-both-mys hoge-c-both- - 00:01:53 00:01:06 none R hoge-c-pc-info- hoge-c-pc-cr - 7s 4s none R hoge-c-both-net hoge-c-both- - 7s 4s none R hoge-w-both-api hoge-w-both- - 10s 1s none R hoge-both-batch df_check_80 - 64s 00:28:37 none R hoge-both-batch df_check_90 - 00:01:37 00:28:06 none R hoge-w-both-mys hoge-w-both- - 00:02:13 46s none R hoge-w-both-nod hoge-w-both- - 7s 4s none R hoge-w-both-com ntp - 00:01:52 00:27:51 none R hoge-both-chat- df_check_80 - 70s 00:28:31 none
  40. 40. CLI インターフェース [moncmd/monshow] <ul><li>CLI インターフェース [moncmd] </li></ul><ul><ul><li>mon.cgi でやれることを CLI でも出来ます。 </li></ul></ul><ul><ul><ul><li>config のチェック </li></ul></ul></ul><ul><ul><ul><li>config の確認 </li></ul></ul></ul><ul><ul><ul><li>監視の有効・無効 </li></ul></ul></ul><ul><ul><ul><li>監視項目のテスト </li></ul></ul></ul><ul><ul><li>リリーススクリプトに組み込むと便利です </li></ul></ul>
  41. 41. moncmd ##### config チェック # /usr/local/mon/clients/moncmd test config 220 test config completed OK, no errors found ##### チェック 監視(有効 / 無効) # /usr/local/mon/clients/moncmd (enable|disable) service &quot;group&quot; &quot;service“ # /usr/local/mon/clients/moncmd (enable|disable) watch &quot;watch“ # /usr/local/mon/clients/moncmd (enable|disable) host “host“ ##### 現監視項目のリスト # /usr/local/mon/clients/moncmd list watch hoge-servers ping hoge-servers http
  42. 42. Monitor スクリプト <ul><li>細かい監視も可能 </li></ul>
  43. 43. Monitor スクリプト #!/bin/sh #MYSQL MYSQL_USER=‘dbcheck’' MYSQL_PASSWORD=‘hogehoge' MYSQL_BASE='/usr/bin/mysql' MYSQL_COMMAND='SHOW SLAVE STATUSG' MYSQL_GREP='Seconds_Behind_Master' RET='' ## HOST CHECK LOOP for host in &quot;$@&quot; do #EXEC RET=`&quot;${MYSQL_BASE}&quot; -h &quot;$host&quot; -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e &quot;${MYSQL_COMMAND}&quot;|grep ${MYSQL_GREP}|awk '{print $2}'` #RET CHECK if [ &quot;${RET}&quot; != 0 ] then if [ &quot;$failed&quot; = &quot;&quot; ] then failed=&quot;$host:${RET}&quot; else failed=&quot;$failed $host:${RET}&quot; fi fi done ## ERROR CHECK if [ &quot;$failed&quot; != &quot;&quot; ] then echo &quot;$failed&quot; echo &quot;${MYSQL_GREP}:$failed&quot; exit 1 fi # OK RETURN exit 0
  44. 44. Alert スクリプト <ul><li>alert ディレクティブに書いた物は障害時すべて実行される </li></ul><ul><ul><li>メール送信+ Apache 再起動+ Tomcat 再起動とかも可能 </li></ul></ul>
  45. 45. Alert スクリプト #!/usr/bin/perl use Getopt::Std; getopts (&quot;s:g:h:t:l:u&quot;); $summary=<STDIN>; chomp $summary; $t = localtime($opt_t); ($wday,$mon,$day,$tm) = split (/s+/, $t); print <<EOF; アラート送信 グループ : $opt_g, サービス $opt_s EOF print &quot; アップアラートはこっち &quot; if ($opt_u); print <<EOF; 障害時間 $wday $mon $day $tm 障害サマリ : $summary EOF
  46. 46. まとめ
  47. 47. mon とか munin て結構簡単 <ul><li>恐らく OSS の監視アプリの中でも 1 、 2 を争うくらい簡単 </li></ul><ul><li>でも作りこみによっては細かく設定できます </li></ul><ul><li>大規模になってくると問題はありますけど、、、 既にやってますしw </li></ul><ul><ul><li>なんとかなります。 </li></ul></ul><ul><ul><li>お手軽監視に Munin と mon はいかがでしょうか! </li></ul></ul>
  48. 48. ざっくり説明 <ul><li>でしたので、もっと細かい話をと言う方は、、、 </li></ul><ul><ul><li>懇親会でお願いします! </li></ul></ul>
  49. 49. ご清聴ありがとうございました

×