狠狠撸

狠狠撸Share a Scribd company logo
快适に料理を楽しむための
     監視のおはなし

    クックパッド株式会社
          高田悟史
自己紹介

? 高田悟史
? 前職ではJavaでWebアプリケーション開発
? 2008年4月に入社
 ? インフラを担当
? twitter.com/satoship
今日の発表

? サーバ构成
? なぜ監視が必要か
? クックパッドでの监视
? 2010年バレンタインデイの事例
サーバ构成
论理构成
            LVS

                              Master DB
      Web         Web



            LVS                Log DB




App         App         App
                              AD Log DB



Slave DB      Slave DB
快適なシステムにするために

なぜ監視が必要か
快適に使えるシステムとは?



? 必要なときにつながるシステム
? ストレスなく使えるシステム
快適に使えないシステムとは?


? 全くつながらない
? つながるけどアクセス集中ページが
 表示される

? 重い
快適じゃない時の裏側
? 重い / アクセス集中ページ
? アクセス数に絶え切れずボトルネックが発生
? 重いクエリが実行された
? など
? エラーページ
? サーバの設定に漏れがありアプリケーションエラー
? など
? 繋がらない
? サーバが落ちた
? など
快适でなくなる原因
               人
                              機械
 オペレーションミス         予測ミス




               ?致命的なクエリ
                          ?サーバーが落ちた
?OSの設定漏れ       ?バッチ処理
                          ?HDDが故障
?ミドルウェアの設定漏れ
                          ?NICが故障
?ディスクフル
                          ?カーネルパニック
               ?ボトルネック
快适でなくなる原因
                人
                               機械
   オペレーションミス        予測ミス



?手順書
?機械化
                ?致命的なクエリ
                           ?サーバーが落ちた
 ?OSの設定漏れ       ?バッチ処理
                           ?HDDが故障
 ?ミドルウェアの設定漏れ
                           ?NICが故障
 ?ディスクフル
                           ?カーネルパニック
                ?ボトルネック
快适でなくなる原因
                人
                                機械
   オペレーションミス        予測ミス

                ?十分なテスト
?手順書            ?すぐに戻せる準備
?機械化
                ?致命的なクエリ
                            ?サーバーが落ちた
 ?OSの設定漏れ       ?バッチ処理
                            ?HDDが故障
 ?ミドルウェアの設定漏れ
                            ?NICが故障
 ?ディスクフル
                            ?カーネルパニック
                ?ボトルネック
快适でなくなる原因
                人
                                    機械
   オペレーションミス        予測ミス

                ?十分なテスト
?手順書            ?すぐに戻せる準備
?機械化
                ?致命的なクエリ
                                ?サーバーが落ちた
 ?OSの設定漏れ       ?バッチ処理
                                ?HDDが故障
 ?ミドルウェアの設定漏れ
                                ?NICが故障
 ?ディスクフル
                                ?カーネルパニック
                ?ボトルネック

                ?キャパシティプランニング
快适でなくなる原因
                人
                                      機械
   オペレーションミス        予測ミス

                ?十分なテスト
?手順書            ?すぐに戻せる準備
?機械化                            ?SPOFを潰す
                ?致命的なクエリ
                                ?サーバーが落ちた
 ?OSの設定漏れ       ?バッチ処理
                                ?HDDが故障
 ?ミドルウェアの設定漏れ
                                ?NICが故障
 ?ディスクフル
                                ?カーネルパニック
                ?ボトルネック

                ?キャパシティプランニング
快适でなくなる原因
                人
                                      機械
   オペレーションミス        予測ミス

                ?十分なテスト
?手順書            ?すぐに戻せる準備
?機械化                            ?SPOFを潰す
                ?致命的なクエリ
                                ?サーバーが落ちた
 ?OSの設定漏れ       ?バッチ処理
                                ?HDDが故障
 ?ミドルウェアの設定漏れ
                                ?NICが故障
 ?ディスクフル
                                ?カーネルパニック
                ?ボトルネック

                ?キャパシティプランニング


? 監視
クックパッドでの监视
監視の種類
? リアルタイム
? フロントで監視
? Nagiosなどによる集中監視
? cronなどによる個別監視
? 時系列
? Munin
快适に料理を楽しむための监视のおはなし
Skype

  ? 応答速度を監視
  ? しきい値によって
   Skypeに発言する
   ?   Warning

   ?   Error

   ?   Critical


  ? rb-skypemac 使用
Nagios
   ? L3(ping ...)
   ? L4(httpd, MySQL...)
   ? その他
    ?   レプリケーションの遅れ

    ?   コードのリビジョンの同一性

    ?   データの整合性



        エラー時にメール送信
cron

? サービスの安定
 ? ネットワーク到達性(web, app)
? パフォーマンス
 ? NFSサーバのIO速度

 エラー時にメール送信
Munin
? 時系列に監視
? Disk Usage, CPU, Memory, IOstat ...

   変化をチェック
必要な監視項目はプラグインとして追加


? 自作Nagiosプラグイン
 ? 検索インデックスの整合性チェック
 ? デプロイ済みアプリケーションのリビジョン
  チェック

? 自作Muninプラグイン
 ? MySQLのスレッド数
 ? 起動しているデーモン数
Nagiosプラグイン
? プログラミング言語は問わない
? サーバ側で動作する
? 適切な終了コードを返すだけ
 http://nagiosplug.sourceforge.net/developer-guidelines.html


                     Nagios Server

                           plugin




          A                                     B
Muninプラグイン

? プログラミング言語は問わない
? クライアント側で動作する
 http://munin-monitoring.org/wiki/HowToWritePlugins


                   Munin Server




       4949 port                      4949 port

        plugin                          plugin

      munin-node                      munin-node
惭耻苍颈苍プラグインの例

#!/usr/local/bin/ruby

option = ARGV[0]
case option
when 'con?g'
 puts 'graph_title Simple'
 puts 'graph_vlabel vlabel'
 puts 'graph_category simple'
 puts 'value1.label value1'
 puts 'value1.min 0'
else
 puts "value1.value #{rand(10)}"
end
惭耻苍颈苍プラグインの例
2009年バレンタインタインデー
      ころの事例
現象

? ピークタイム(17:00ころ)に、
 cookpad.comとモバれぴが
 信じられないくらい遅くなった

? 週に数回、発生した
その顷に加えた変化
            LVS                ? LVSを新規追加
   Web             Web         ? Webの前にLVS
            LVS                ? Appの前にLVS
App         App          App   ? サーバを増設
 Slave DB         Slave DB
                               ? App
                               ? Slave DB
原因調査
? cookpad.comとモバれぴで発生しているので、
 マスタ系のDBが怪しい

? 障害発生時に、マスタ系DBの書き込み速度を計測
 したところ、広告系のログDBっぽい

? どうやら1800スレッドを越えるとレスポンスが悪
 化している

? 1800スレッド+クエリの発行が再現の条件だった
改善
? establish_connectionの使い方に問題があった
 ?   クラス設計を変更

? Passengerをアップデート
? Railsをアップデート
改善
? establish_connectionの使い方に問題があった
 ?   クラス設計を変更

? Passengerをアップデート
? Railsをアップデート
      ピークタイムに平和が訪れた!
改善
? establish_connectionの使い方に問題があった
 ?   クラス設計を変更

? Passengerをアップデート
? Railsをアップデート
       と思ったのも束の間
      ピークタイムに平和が訪れた!
さらなる危機
? マスタDBで同じ状況が発生した
? 1100スレッドを越えるとレスポンスが
 悪化

? Thread runningに現れる
? Appサーバの増設が裏目に出たと
 気づき始める
改善
? MySQLのチューニング
? マスタDBで実行される、様々なクエリを修正
 ?   acts_as_readonlyとacts_as_taggableの使い方

 ?   ActiveRecordのshow tables

 ?   ActiveRecordのbegin / commit

 ?   ActiveRecordのアクティブチェック
改善
? MySQLのチューニング
? マスタDBで実行される、様々なクエリを修正
 ?   acts_as_readonlyとacts_as_taggableの使い方

 ?   ActiveRecordのshow tables

 ?   ActiveRecordのbegin / commit

 ?   ActiveRecordのアクティブチェック



     今度こそ平和が訪れた!
蝉迟补迟系スクリプト达
蝉迟补迟系スクリプト达


httpd_stat
蝉迟补迟系スクリプト达
    qstat
httpd_stat
蝉迟补迟系スクリプト达
     qstat
 httpd_stat

mysql_stat
蝉迟补迟系スクリプト达
 mythstat
     qstat
 httpd_stat

mysql_stat
蝉迟补迟系スクリプト达
 mythstat
     qstat
httpd_stat

   myplstat
mysql_stat
まとめ
まとめ

? 人事を尽くしても何も起きないということはな
 いので、監視できるところは監視してます

? 未知の障害が発生したら監視を追加して追いつ
 めています
クックパッドでは、
エンジニアを絶賛募集中です


 詳しくは、http://info.cookpad.com/jobs

More Related Content

快适に料理を楽しむための监视のおはなし

Editor's Notes