oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

Webシナリオ監視にJenkinsを使う妄想してみた。

現在脳内で考えているだけの妄想ブログです。

監視を行う際に「ユーザーと同じ振る舞いをして問題が無いか」という事を監視に組み込もうと考えた。
そうすると、Webシナリオの作成はJMeterでブラウザの動作をキャプチャしてそれをシナリオに使うか、seleniumでシナリオを作って(もしくはSeleniumIDEでブラウザの動作をキャプチャ)のどちらかが現実的だと考えている。なんでかというと、数個のURLにリクエストを投げるならNagiosのcheck_httpを何度か実行するシェルスクリプトを書くとか、curlでチクチク投げていって、というスクリプトを書くとかでも良いんだけど、ユーザーと同じ振る舞いを行う場合、膨大なリクエストを投げないといけないのでそうするとそんなスクリプト書きたくないし、もし頑張って書いても仕様変更入った瞬間にすぐ修正なので監視に組み込むとしてはコストが高すぎる。zabbixでも標準機能でWebリクエストを結構細かく書いてリクエスト投げてチェックできる機能があるけど、これも少ないURLなら良いんだけど100個くらいのリクエスト投げて、とかが出てきた場合面倒くさすぎる。

で、シナリオ作った後は?

頑張ってJMeterseleniumのシナリオを作成したけどそれをどうやって実行するかに行き当たる。Nagiosとかにそれをそのまま組み込むのはシナリオ実行の処理時間が長すぎるので、他の監視に影響与えたくないしNG。じゃあ、cronで定期実行させておいてその結果をNagiosでチェックさせるのはなんか階層多すぎてメンドイ。cronにシナリオ本数分書くとかカオスの元になりそうだし。エラー通知も過去にこういう記事があったように、スクリプト自体のエラーと、実行した時点でのエラーも捕捉したいけど、cronで細かくやるのはメンドイ。

じゃあどうするか

で、行き着いたのは自分が以前cron代わりになるね、と試したJenkinsになった。
Jenkinsでcron実行管理をやってみた
監視ツールとして必要な
・実行間隔の制御
・エラー通知、復旧通知
・通知先の制御
・実行履歴等の確認
が出来るし、何よりWebシナリオを作成してレポジトリにコミットしたら後はJenkinsで自動化も出来るので大変便利そう。ログも見れるし。ちょこちょこ触った感じでは大丈夫だろう・・・と思っていたけど、積ん読していたJenkins実践入門を読んでいけるなーと確信した。というか、凄くいい本だった。

Jenkins先生の汎用性はもっと色んな事に使えそう。まだ、機能をやっと覚えたくらいでコマンドでのオペレーションとかはこれから覚えるというレベルだけど、ガシガシ使って行きたいと思う。例えば、今もcronにベタ書きしているDBのバックアップ処理とか、ある程度のスクリプトを定期的に走らせるのはJenkins先生に集約することで
・フロー上レポジトリからスクリプトを拾う用にする事で、書き捨てのスクリプトでもレポジトリにコミットされるようになる
・あとで「あのスクリプトドコー」になったりして、「あのサーバから取って来て」とかにならない。
という様な今まで管理が甘かった所も整備出来る気がする。

なので、近いうちに実践に投入できるようになったら改めてブログに書きたいと思います。

妄想終わり。もし実際に同じ事をやっている人とかtipsがあればぜひ教えて欲しいっす!