こんにちわ。エンジニアの こじま です。
今回は,ランサーズのサービス品質を支える
サービス監視システムのご紹介をします。
弊社プラットフォームは,複数の監視システムを導入して運用を実施しています。
システム | 用途 |
---|---|
(自社製)サービス監視システム | サービス稼働チェック |
NewRelic | パフォーマンス計測 |
Nagios | 死活・リソース・ミドルウェア監視 |
Munin | キャパシティプランニング |
自社製のサービス監視システムには2つの機能があります。
1)弊社プラットフォームのログインをはじめ各ページの表示確認
2)弊社プラットフォームの各ページのレスポンス速度の異常検知
以下のようにグラフィカルなビューを持ち,一目でサービスの異常を検知できます。
今回のサービス監視開発に至った経緯は
ユーザ様の視点に立った,サービスの異常を検知するためです。
サーバの CPU 利用率やディスク容量を監視すれば,システムの異常は検知できますが,
ユーザ様に,意図した仕様のサービスが,提供ができていることは把握できません。
当サービス監視は Ruby の Mechanize によって実現しています。
以下のスクリプトは特定のページにアクセスしてページタイトルをチェックするものです
数行のコードで簡単に実装できます。(過剰なスクレイピングは運営者様にご迷惑をおかけするためご遠慮ください)
#!/usr/bin/env ruby require 'mechanize' - client = Mechanize.new page = client.get('http://<監視対象を設定してください>') - puts 'OK' if page.title =~ /<ページタイトルを設定ください>/
他にもいろいろできるのでご紹介させていただきます。
Mechanize でリンクを取得
page.links
Mechanize でフォームを取得
page.forms
Mechanize で特定要素の複数クラス名を指定して内部要素のテキストを取得
page.at('div[@class="<class名1> <class名2>"]').inner_text
Mechanize で特定要素の h1 のリンクを取得
page.search('div.<class 名>').map { |elm| elm.at('h1').at('a')['href'] }
Mechanize を利用すれば効率よく情報収集が出来そうですね。
このようにしてランサーズでは,
ユーザ様に快適なプラットフォームを提供すべく日々努力をしております。