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

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新卒
その他採用情報

関連記事

事業の多角化を支えたランサーズ的SRE術
事業の多角化を支えたランサーズ的SRE術 | TECH PLAY 勉強会

こんにちは、ランサーズでSREチームのエンジニア(内定者インターン)をしているIZUMIRUです。 今回は、2018年2月20日(火) 19:30-21:45に、TECH PLAY SHIBUYAで開催された ランサーズ株式会社主催の勉強会である『事業の多角化 …

thumbnail
ランサーズのメッセージ機能のAPI設計

otaです。過去の執筆記事はこちら。 ランサーズのメッセージ機能のAPIを2019年5月にリニューアルしました。どのような設計にしたかについて書きます。APIを設計する際の参考になれば幸いです。 レスポンスについて HTTPステータスコードは成功時は200、失 …

【告知】「Vuls祭り#4」にて、あだちんが登壇いたします! 

こんにちは! 腹筋を始めましたが、見事3日で終わったエンジニア広報の宮田です。 本日は、タイトル通り 8月27日(月)に開催する「Vuls祭り#4」に、弊社のあだちんさん(@adachin0817)が登壇しますので 登壇情報をお伝えいたします! Vulsとは・ …