この記事はSelenium/Appium Advent Calendar 2017の2日目の記事です。

こんにちは!
監視してますか!! されてますか!!!
サーバーが落ちてたのに誰も気づかないで2ヶ月放置とかほんと勘弁してくださいよ!!!!

私は、Seleniumの新バージョンがリリースされたら、一応更新内容をざっとチェックするようにしているのですが、Selenium 3.8.0のJava部分の更新内容には今までにない項目があり目を引きました。

https://github.com/SeleniumHQ/selenium/blob/master/java/CHANGELOG

* Added initial support for managing Grid Hubs and Nodes via JMX

JMXだと???

Selenium 3.8.0から、Selenium GridがJMXをサポートしました

誰得!?
GitHubのissueを見ると、たまに話が上がっていたようですが...

そもそもJMXとはなんなのですか

Javaアプリの状態をいろいろ管理するためのやり方についての公開規格です。
サーバーの状態を管理するのにSNMPを使ったりしますよね。あんな感じでJavaアプリの状態を管理するのにJMXを使うというわけです。

実際にJMXでSelenium Gridのハブとノードの状態を見てみよう

現時点でどんな情報が見られるのでしょうか。
かんたんにできる範囲で、実際に試してみましょう。

Selenium Gridのハブとノードを適当に立ち上げておきます

この記事では、後でロールを判別しやすくするためのラベルとして、なるべくおいしそうなシステムプロパティを与えます。

$ java -Dロールケーキ=小山ロール \
       -jar selenium-server-standalone-3.8.0.jar \
       -role hub
$ java -Dロールケーキ=堂島ロール \
       -jar selenium-server-standalone-3.8.0.jar \
       -role node

jpsコマンドで、Selenium GridのハブとノードのプロセスIDを確認します

l オプションと v オプションをつけておくとわかりやすくなります。

$ jps -lv

32999 selenium-server-standalone-3.8.0.jar -Dロールケーキ=小山ロール
33001 selenium-server-standalone-3.8.0.jar -Dロールケーキ=堂島ロール

見つかりました。おいしそうですね。

jconsoleコマンドで特定のプロセスを監視してみます

まずハブのプロセスの方から見てみましょう。ラベルが小山ロールの方です。
なお、小山ロールはたっぷりのハチミツと卵黄を泡立てて、丁寧に空気を抱き込ませた生地をじっくり焼き上げ、しっとりときめ細やかなスポンジになっているそうです。 1

$ jconsole 32999

何か言われてしまいますが、今回はちょっと確認したいだけなのであまり気にせず「保護されていない接続」で進めてしまいます。

セキュアな接続が失敗しました。非セキュアで再試行しますか。

jconsoleの画面が表示されます。タブ「MBeans」をクリックしましょう。

jconsoleの画面

MBeansタブの左側には、監視可能な内容の一覧が表示されています。
org.selenium.grid というのが、Selenium 3.8.0で新しく見られるようになった部分です。中身をのぞいてみましょう。

MBeansタブ

オッ それらしいのがいろいろありますね〜
「Hub」がハブ自身の情報で、「RemoteProxy」が接続しているノードの情報となります。

org.selenium.gridの中身

いずれの項目も昔から取得するためのAPIはあったのですが、JMX経由での取得が標準で可能になったことで敷居が下がったのではないでしょうか。
ZABBIXなどJMXを利用できる監視ツールと組み合わせて使うと、また一味違ったSelenium Gridの運用ができそうですね。

次にノードのプロセスの方を見てみましょう。ラベルが堂島ロールの方です。
なお、堂島ロールは北海道産の生乳を数種厳選し、世界でも類を見ない独自の製法で仕上げたオーダーメイドクリームが、搾りたてミルクのようなフレッシュな味わいだそうです。2

$ jconsole 33001

おや? こちらは何も見えませんね。
JMXサポートは、ハブの方を監視すればノードまで含めてすべて見られるように設計されているようです。

ノード側の中身

今回はここまで

次回は...誰かー! 誰か来てくれーーー!!!
Selenium/Appium Advent Calendar 2017はまだまだ君の挑戦を待っているぜ!