快適に料理を楽しむための監視のおはなし

5,924 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,924
On SlideShare
0
From Embeds
0
Number of Embeds
3,831
Actions
Shares
0
Downloads
25
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n
  • \n \n \n\n \n \n\n \n
  • \n \n
  • \n \n
  • 快適に料理を楽しむための監視のおはなし

    1. 1. 快適に料理を楽しむための 監視のおはなし クックパッド株式会社 高田悟史
    2. 2. 自己紹介• 高田悟史• 前職ではJavaでWebアプリケーション開発• 2008年4月に入社 • インフラを担当• twitter.com/satoship
    3. 3. 今日の発表• サーバ構成• なぜ監視が必要か• クックパッドでの監視• 2010年バレンタインデイの事例
    4. 4. サーバ構成
    5. 5. 論理構成 LVS Master DB Web Web LVS Log DBApp App App AD Log DBSlave DB Slave DB
    6. 6. 快適なシステムにするためになぜ監視が必要か
    7. 7. 快適に使えるシステムとは?• 必要なときにつながるシステム• ストレスなく使えるシステム
    8. 8. 快適に使えないシステムとは?• 全くつながらない• つながるけどアクセス集中ページが 表示される• 重い
    9. 9. 快適じゃない時の裏側• 重い / アクセス集中ページ• アクセス数に絶え切れずボトルネックが発生• 重いクエリが実行された• など• エラーページ• サーバの設定に漏れがありアプリケーションエラー• など• 繋がらない• サーバが落ちた• など
    10. 10. 快適でなくなる原因 人 機械 オペレーションミス 予測ミス •致命的なクエリ •サーバーが落ちた•OSの設定漏れ •バッチ処理 •HDDが故障•ミドルウェアの設定漏れ •NICが故障•ディスクフル •カーネルパニック •ボトルネック
    11. 11. 快適でなくなる原因 人 機械 オペレーションミス 予測ミス•手順書•機械化 •致命的なクエリ •サーバーが落ちた •OSの設定漏れ •バッチ処理 •HDDが故障 •ミドルウェアの設定漏れ •NICが故障 •ディスクフル •カーネルパニック •ボトルネック
    12. 12. 快適でなくなる原因 人 機械 オペレーションミス 予測ミス •十分なテスト•手順書 •すぐに戻せる準備•機械化 •致命的なクエリ •サーバーが落ちた •OSの設定漏れ •バッチ処理 •HDDが故障 •ミドルウェアの設定漏れ •NICが故障 •ディスクフル •カーネルパニック •ボトルネック
    13. 13. 快適でなくなる原因 人 機械 オペレーションミス 予測ミス •十分なテスト•手順書 •すぐに戻せる準備•機械化 •致命的なクエリ •サーバーが落ちた •OSの設定漏れ •バッチ処理 •HDDが故障 •ミドルウェアの設定漏れ •NICが故障 •ディスクフル •カーネルパニック •ボトルネック •キャパシティプランニング
    14. 14. 快適でなくなる原因 人 機械 オペレーションミス 予測ミス •十分なテスト•手順書 •すぐに戻せる準備•機械化 •SPOFを潰す •致命的なクエリ •サーバーが落ちた •OSの設定漏れ •バッチ処理 •HDDが故障 •ミドルウェアの設定漏れ •NICが故障 •ディスクフル •カーネルパニック •ボトルネック •キャパシティプランニング
    15. 15. 快適でなくなる原因 人 機械 オペレーションミス 予測ミス •十分なテスト•手順書 •すぐに戻せる準備•機械化 •SPOFを潰す •致命的なクエリ •サーバーが落ちた •OSの設定漏れ •バッチ処理 •HDDが故障 •ミドルウェアの設定漏れ •NICが故障 •ディスクフル •カーネルパニック •ボトルネック •キャパシティプランニング• 監視
    16. 16. クックパッドでの監視
    17. 17. 監視の種類• リアルタイム• フロントで監視• Nagiosなどによる集中監視• cronなどによる個別監視• 時系列• Munin
    18. 18. Skype • 応答速度を監視 • しきい値によって Skypeに発言する • Warning • Error • Critical • rb-skypemac 使用
    19. 19. Nagios • L3(ping ...) • L4(httpd, MySQL...) • その他 • レプリケーションの遅れ • コードのリビジョンの同一性 • データの整合性 エラー時にメール送信
    20. 20. cron• サービスの安定 • ネットワーク到達性(web, app)• パフォーマンス • NFSサーバのIO速度 エラー時にメール送信
    21. 21. Munin• 時系列に監視• Disk Usage, CPU, Memory, IOstat ... 変化をチェック
    22. 22. 必要な監視項目はプラグインとして追加• 自作Nagiosプラグイン • 検索インデックスの整合性チェック • デプロイ済みアプリケーションのリビジョン チェック• 自作Muninプラグイン • MySQLのスレッド数 • 起動しているデーモン数
    23. 23. Nagiosプラグイン• プログラミング言語は問わない• サーバ側で動作する• 適切な終了コードを返すだけ http://nagiosplug.sourceforge.net/developer-guidelines.html Nagios Server plugin A B
    24. 24. Muninプラグイン• プログラミング言語は問わない• クライアント側で動作する http://munin-monitoring.org/wiki/HowToWritePlugins Munin Server 4949 port 4949 port plugin plugin munin-node munin-node
    25. 25. Muninプラグインの例#!/usr/local/bin/rubyoption = ARGV[0]case optionwhen config puts graph_title Simple puts graph_vlabel vlabel puts graph_category simple puts value1.label value1 puts value1.min 0else puts "value1.value #{rand(10)}"end
    26. 26. Muninプラグインの例
    27. 27. 2009年バレンタインタインデー ころの事例
    28. 28. 現象• ピークタイム(17:00ころ)に、 cookpad.comとモバれぴが 信じられないくらい遅くなった• 週に数回、発生した
    29. 29. その頃に加えた変化 LVS • LVSを新規追加 Web Web • Webの前にLVS LVS • Appの前にLVSApp App App • サーバを増設 Slave DB Slave DB • App • Slave DB
    30. 30. 原因調査• cookpad.comとモバれぴで発生しているので、 マスタ系のDBが怪しい• 障害発生時に、マスタ系DBの書き込み速度を計測 したところ、広告系のログDBっぽい• どうやら1800スレッドを越えるとレスポンスが悪 化している• 1800スレッド+クエリの発行が再現の条件だった
    31. 31. 改善• establish_connectionの使い方に問題があった • クラス設計を変更• Passengerをアップデート• Railsをアップデート
    32. 32. 改善• establish_connectionの使い方に問題があった • クラス設計を変更• Passengerをアップデート• Railsをアップデート ピークタイムに平和が訪れた!
    33. 33. 改善• establish_connectionの使い方に問題があった • クラス設計を変更• Passengerをアップデート• Railsをアップデート と思ったのも束の間 ピークタイムに平和が訪れた!
    34. 34. さらなる危機• マスタDBで同じ状況が発生した• 1100スレッドを越えるとレスポンスが 悪化• Thread runningに現れる• Appサーバの増設が裏目に出たと 気づき始める
    35. 35. 改善• MySQLのチューニング• マスタDBで実行される、様々なクエリを修正 • acts_as_readonlyとacts_as_taggableの使い方 • ActiveRecordのshow tables • ActiveRecordのbegin / commit • ActiveRecordのアクティブチェック
    36. 36. 改善• MySQLのチューニング• マスタDBで実行される、様々なクエリを修正 • acts_as_readonlyとacts_as_taggableの使い方 • ActiveRecordのshow tables • ActiveRecordのbegin / commit • ActiveRecordのアクティブチェック 今度こそ平和が訪れた!
    37. 37. stat系スクリプト達
    38. 38. stat系スクリプト達httpd_stat
    39. 39. stat系スクリプト達 qstathttpd_stat
    40. 40. stat系スクリプト達 qstat httpd_statmysql_stat
    41. 41. stat系スクリプト達 mythstat qstat httpd_statmysql_stat
    42. 42. stat系スクリプト達 mythstat qstathttpd_stat myplstatmysql_stat
    43. 43. まとめ
    44. 44. まとめ• 人事を尽くしても何も起きないということはな いので、監視できるところは監視してます• 未知の障害が発生したら監視を追加して追いつ めています
    45. 45. クックパッドでは、エンジニアを絶賛募集中です 詳しくは、http://info.cookpad.com/jobs

    ×