狠狠撸
Submit Search
Mon, Muninによる楽々監視生活
?
16 likes
?
36,420 views
Akihiro Kuwano
Follow
qpstudy #01で発表した資料です
Read less
Read more
1 of 49
More Related Content
Mon, Muninによる楽々監視生活
1.
mon, munin による楽々監視生活
桑野 章弘
2.
アジェンダ 自己绍介 监视、、、嫌いなんです。
监视の种类 実際の手順 [munin 編 ] 実際の手順 [mon 編 ] まとめ
3.
自己绍介
4.
自己绍介 桑野 章弘 id:
akuwano twitter: @kuwa_tw 渋谷で働く IT 企業 インフラエンジニア 最近は自分でも何やってんのかわからなくなってきた 趣味は最近はスマートフォンかな? NexusOne を持っておりますが、 iPhone ユーザとアイデンティティを戦わせたりするのが好きです。
5.
qpstudy 最初の一発目とか 恥ずかしいんですが、、、
6.
はじめさせて頂きます お題は、、、
7.
监视、、、嫌いなんです。
8.
何が嫌いってメンドクサイ 好きです? やれサーバ足しただの
やれサーバ外しただの スペックが変わったとか 毎回変えるの? なんやかんやですよ てんやわんやですよ とにかく嫌なんです!めんどくさいんです!さよなら!
9.
でもね、、、 監視って大事なんです 定常的に見ないとわからないもの
突発的に出てくる負荷 トラブルシューティング時に大活躍 寝た子を起こされたりとかもしますけど やっぱり離れられない!
10.
と言うわけで 監視を出来るだけ簡単にやってみましょうと言うコンセプト。 スパッと。
11.
监视の种类
12.
こんなのがあります トレンドの監視 障害監視
13.
トレンドの監視 リソースを追ったり 負荷の増減状況をみたり
サービス状況のログ取得と言う意味の監視 予防の監視 =munin
14.
障害監視 サーバが落ちたり 書き込みが出来なかったり
事象が起こることを監視するという意味の監視 検知の監視 =mon
15.
こんなのでいきましょう トレンドの監視 =munin
障害監視 =mon
16.
実際の手順 [Munin 編
]
17.
munin とは perl
ベースでかかれた監視ツール(カラスの意味らしいです) データ取得は cron で一定期間毎に polling する形式(デフォルト 5 分)
18.
Overview サーバ cron
で polling クライアント群 HTML ファイル
19.
Munin[Index]
20.
Munin[ 日時 ]
21.
インストール パッケージで簡単 このさい
RPMforge 使いましょうw Debian 系は APT で OK ##### サーバインストール # 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.
設定 [ サーバ側
] 取得先のサーバ(エージェントが動いてるサーバ)を記述するだけで簡単 処理が多い時は [max_processes] もいじるといいよ 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.
設定 [ クライアント側
] エージェントを起動するだけでアラ簡単! でも取得データを増やしたい場合は /etc/munin/plugins にスクリプトおいて、 /etc/munin/ plugin-conf.d/ にスクリプト毎の設定をおきましょう vi /etc/munin/munin-node.conf (snip) ### Munin サーバの IP 許可設定 ### allow ^192168010$ ### 取得データの変更 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.
その他の運用 Web ページはテンプレートでカスタマイズ可能
/etc/munin/templates/ 以下にテンプレートがあるのでそれを編集してカスタマイズできます 独自の監視もスクリプトで簡単!
25.
独自スクリプト #!/bin/bash MeasurementMode=min
#MeasurementMode=sec DATE=`date +%Y-%m-%d` LOG_FILE="/usr/local/tomcat/logs/hoge.log" GREP_TEXT_E="ERROR" GREP_TEXT_W="WARN" 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.
独自スクリプト if [
"$1" == "config" ]; then $ECHO "graph_title log exception count $LOG_FILE"; $ECHO "graph_vlabel request /$MeasurementMode"; $ECHO "graph_category ExceptionCount"; $ECHO "graph_order ERROR WARN"; $ECHO "ERROR.label ERROR*100"; $ECHO "ERROR.min 0"; $ECHO "ERROR.max 1000"; $ECHO "ERROR.draw AREA"; $ECHO "WARN.label WARN"; $ECHO "WARN.min 0"; $ECHO "WARN.max 1000"; $ECHO "WARN.draw STACK"; exit 0; fi
27.
独自スクリプト if [
"$MeasurementMode" == "min" ]; 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 "$TARGET_BETWEEN_TIME" | $GREP "$GREP_TEXT_E" | $WC -l` $ECHO $GREP_TEXT_E.value $(($count*100)) count=`$TAIL -n $TAIL_LINE_CNT $LOG_FILE | $GREP "$TARGET_BETWEEN_TIME" | $GREP "$GREP_TEXT_W" | $WC -l` $ECHO $GREP_TEXT_W.value $count
28.
実際の手順 [Mon 編
]
29.
mon とは perl
ベースでかかれた監視ツール( Service Monitoring Daemon ) Unisys の人が作ってたみたいだけど更新は止まってる模様 えーと、間違えました、枯れてます
30.
Overview
31.
インストール やっぱりパッケージで簡単 #####
mon のインストール # yum install mon.x86_64 ##### mon のインストール (debian/ubuntu) aptitude install mon
32.
設定 [ サーバ側
] [mon.cf] に取得先のサーバを記述するだけで簡単 #################################################################### # 監視先サーバの設定 #################################################################### 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.
設定 [ サーバ側
] [mon.cf] に取得先のサーバを記述するだけで簡単 #################################################################### # サービス監視の設定 #################################################################### 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" -u hoge-alert@example.com service http interval 3m monitor http.monitor -p 80 -u "/url/check.html" 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" -u hoge-alert@example.com
34.
設定 [ クライアント側
] なんもいらんです!簡単の極み! SSH させてとかやるならいる場合もあります
35.
運用 Web のコンソール
[mon.cgi] CLI インターフェース [moncmd/monshow] Monitor スクリプト Alert スクリプト
36.
Web のコンソール [mon.cgi]
Web のコンソール [mon.cgi]
37.
mon.cgi
38.
monshow CLI
インターフェース [moncmd] mon.cgi でやれることを CLI でも出来ます。 設定の確認や、現在のステータス確認
39.
CLI インターフェース
[moncmd/monshow] CLI インターフェース [monshow] # /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.
CLI インターフェース
[moncmd/monshow] CLI インターフェース [moncmd] mon.cgi でやれることを CLI でも出来ます。 config のチェック config の確認 監視の有効?無効 監視項目のテスト リリーススクリプトに組み込むと便利です
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 "group" "service“ # /usr/local/mon/clients/moncmd (enable|disable) watch "watch“ # /usr/local/mon/clients/moncmd (enable|disable) host “host“ ##### 現監視項目のリスト # /usr/local/mon/clients/moncmd list watch hoge-servers ping hoge-servers http
42.
Monitor スクリプト 細かい監視も可能
43.
Monitor スクリプト #!/bin/sh
#MYSQL MYSQL_USER=‘dbcheck’' MYSQL_PASSWORD=‘hogehoge' MYSQL_BASE='/usr/bin/mysql' MYSQL_COMMAND='SHOW SLAVE STATUS' MYSQL_GREP='Seconds_Behind_Master' RET='' ## HOST CHECK LOOP for host in "$@" do #EXEC RET=`"${MYSQL_BASE}" -h "$host" -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e "${MYSQL_COMMAND}"|grep ${MYSQL_GREP}|awk '{print $2}'` #RET CHECK if [ "${RET}" != 0 ] then if [ "$failed" = "" ] then failed="$host:${RET}" else failed="$failed $host:${RET}" fi fi done ## ERROR CHECK if [ "$failed" != "" ] then echo "$failed" echo "${MYSQL_GREP}:$failed" exit 1 fi # OK RETURN exit 0
44.
Alert スクリプト alert
ディレクティブに書いた物は障害時すべて実行される メール送信+ Apache 再起動+ Tomcat 再起動とかも可能
45.
Alert スクリプト #!/usr/bin/perl
use Getopt::Std; getopts ("s:g:h:t:l:u"); $summary=<STDIN>; chomp $summary; $t = localtime($opt_t); ($wday,$mon,$day,$tm) = split (/+/, $t); print <<EOF; アラート送信 グループ : $opt_g, サービス $opt_s EOF print " アップアラートはこっち " if ($opt_u); print <<EOF; 障害時間 $wday $mon $day $tm 障害サマリ : $summary EOF
46.
まとめ
47.
mon とか munin
て結構簡単 恐らく OSS の監視アプリの中でも 1 、 2 を争うくらい簡単 でも作りこみによっては細かく設定できます 大規模になってくると問題はありますけど、、、 既にやってますしw なんとかなります。 お手軽監視に Munin と mon はいかがでしょうか!
48.
ざっくり説明 でしたので、もっと細かい話をと言う方は、、、 懇親会でお願いします!
49.
ご清聴ありがとうございました
Editor's Notes
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw
Spider Storage Engine はおいておくw