ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

Labels:  DevOps, Ruby 投稿者:kojima

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

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

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

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

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

システム 用途
(自社製)サービス監視システム サービス稼働チェック
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 を利用すれば効率よく情報収集が出来そうですね。

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

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

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。


【中途採用】
フロントエンドエンジニア
サーバーサイドエンジニア
コーポレートエンジニア
SREエンジニア

【新卒採用・その他】
21・22新卒
その他採用情報

関連記事

私はデジタルノマドです。世界中を旅しながらソフトエンジニアとして働いています。

日本語訳は後半に掲載しています :) I am digital nomad. I work as software engineer while traveling around the world. Yes, it is true! I work as so …

thumbnail
解析まで10分!最強のMySQLチューニングツール「Jet Profiler」

ランサーズでは、現在、Webエンジニアを募集しています。 詳しくは、募集要項をご覧下さい。 こんにちは、keiです。 今回は、MySQLのチューニングに大活躍な「Jet Profiler」というツールをご紹介します。 【2012/12/13 追記】 JetPr …

thumbnail
Subversionで413レスポンスが返却された場合の対処

ご無沙汰しております。keiです。 Subversionで、大容量ファイルをコミットする際に遭遇した エラーの対処方法について、共有の意味で記事化させて頂きます。 事象 開発が完了したプロジェクトのソースをまとめてコミットしようとした際に、 ステータスコード4 …