Ruby Mechanize によるサービス監視のすすめ

kojima|2014年12月26日
DevOps

こんにちわ。エンジニアの こじま です。

今回は,ランサーズのサービス品質を支える

サービス監視システムのご紹介をします。

弊社プラットフォームは,複数の監視システムを導入して運用を実施しています。

システム 用途
(自社製)サービス監視システム サービス稼働チェック
NewRelic パフォーマンス計測
Nagios 死活・リソース・ミドルウェア監視
Munin キャパシティプランニング

 

自社製のサービス監視システムには2つの機能があります。

1)弊社プラットフォームのログインをはじめ各ページの表示確認
2)弊社プラットフォームの各ページのレスポンス速度の異常検知

以下のようにグラフィカルなビューを持ち,一目でサービスの異常を検知できます。

サービス監視 WEB UI

今回のサービス監視開発に至った経緯は

ユーザ様の視点に立った,サービスの異常を検知するためです。

サーバの 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 を利用すれば効率よく情報収集が出来そうですね。

このようにしてランサーズでは,

ユーザ様に快適なプラットフォームを提供すべく日々努力をしております。