NTPの外形監視をjavaで

やんごとなき事情により、「NTPサーバの外形監視プログラム」を作る機会を得たので、それについて。

事の始まりは、NTPサーバが正常に機能しているかを監視する必要が出てきたこと。

普通こういう場合は、統合監視ツールのエージェントとかをサーバにインストールすることが多いんだろうけど、今回監視するNTPサーバはアプライアンス製品(LinuxベースのOSが載っている様子)のため、エージェントのインストールはできなかった。

今回いじってOKな端末にはテラタームが入っていたので、

  • TelnetなりSSHなりでログインして、psとかntpqを叩くテラタームマクロを書いて、結果をパースする

ってのを最初に考えたんだけど、端末とNTPサーバの間のどっかでパケットフィルタリングがかけられているらしい事がわかり、その案は没に。

否応無しに、監視用のNTPクライアントプログラムを書かなくちゃいけなくなったわけだが、プログラムを書く上での制約も多かった。

端末はWindows機で、PerlPython等の実行環境はインストールされていなかった。

  • PerlでNet::NTPつかって書く

ってのも考えていたのだが、速攻没に。
Net::NTP - Perl extension for decoding NTP server responses - metacpan.org
あきらめ切れなくて、perl2exeも試してみたが、うまくexe化できなかった。

仕方ないのでVBScriptで書こうと試みるも、VBの方言が全くわからない俺にソケットアプリなんか書けるわけもなく、10分も立たずにあきらめた。

javaなら入ってるんじゃね?」という最後の望みをたくしてjava -version を叩いたら1.4がインストールされていることが判明。およそ2年ぶりにjavaアプリを書くことが決定した。

なんか良いクラスライブラリは無いものかと思って探してみたところ、Jakarta Commons Netがどうやら使えそうなことが判明。
dfltweb1.onamae.com – このドメインはお名前.comで取得されています。

こいつを使って無事、監視プログラムが書けた。
もちろんNTP以外にも、ネットワークアプリを作るにあたって便利なモジュールが集まっているので、他のサービスの外形監視プログラムなんかもコレで書けそうだ。

普段はあまりプログラムを書く機会が無く、家でちょこちょこPythonを触る程度なので、2年ぶりのjavaは良い経験になった。もっとも2年前にJavaを会社の研修でやるまで、プログラミングなぞやったことが無かったので、プログラミング言語を見る上での自分の中での基準がJavaにあるのかもしれないという気がした。

今回ちょこっとPerlJavaを触った上での感想や雑記、一部脱線:

  • Pythonばっかり書いてると、他の言語でソースを書くとき;を忘れる。
  • public / protected / privateみたいな使い分けは、PythonよりJavaの方が書き易いしわかり易いと感じた
  • Perlで書いたソースコードは、自分で書いたものさえ呪文に見える。
  • メンテする気がない使い捨てスクリプト以外でPerlは使いたくないなと思った。
  • が、use strictなんかは便利だと思う。typoが防げる。
  • ただ、「なんでmyなのか」はよくわからない。キチっとやるなら静的型付けの言語を使うほうがトータルコスト低そう。
  • vimの後方補完便利。CTRL+N
  • Pythonの場合、pydiction使うと後方補完でより幸せになれる。Pythonでソースを書く上でipythonとpydictionは手放せない。

余談だが、「商用の有料外形監視サービス」ってあんまり選択肢ないんだろうか?WebやDNSSMTPなんかを外形監視したいっていう要望はありそうなもんなんだけど、あまりサービスとして目にする機会ない気がする。たぶん自分が知らないだけなんだろう。