WLST を書いて WebLogic Server が使う JDBC コネクションプールのモニタリングをしてみた

久々に WLS (WebLogic Server) ネタ。

WLS では、DB との接続情報を「データソース」として定義・設定する。サービス → データ・ソース → 「モニタリング」タブと進むと、JDBC コネクションプールの現在の状態が分かる。例えば現在の接続数だとか、コネクションプールからあぶれて待機している人の数だとかが確認できる。

今回はこの「モニタリング」画面と同等の内容を、WLST (WebLogic Scripting Tool) で取得してみようと思う。

目次

WLST 対話コンソールに繋いでみる

まずは WLST の対話コンソールに接続して、スクリプトの骨格を作っていく。

以前、Windows 環境で WLST を開始する手順は紹介したのだが、今回はコレの Linux 版。

環境変数 WL_HOME で、WLS がインストールされているディレクトリまで移動できるテイにする。適宜読み替えること。

# 環境変数を設定する
$ source "${WL_HOME}/server/bin/setWLSEnv.sh"

# WLST を起動する
$ java weblogic.WLST

# プロンプトが変わったら WLS 管理コンソールにログインする時と同じ情報でログインする
wls:/offline> connect('ユーザ名', 'パスワード', 't3://127.0.0.1:7001')

接続先 URL は localhost:7001127.0.0.1 で良いと思うが、設定によっては管理サーバ自身の Private IP を入力しないといけないかもしれない。その時は ifconfig で自身の Private IP を調べて、10.0.0.1:7001 のように設定すれば OK。

WLST の基本操作

WLST の基本操作は、Linux のディレクトリを移動し、ファイルを開くかのように行っていく。次のようなコマンドを叩いてみよう。

カレントディレクトリ配下のオブジェクトは、オブジェクト名のみを入力するか、print オブジェクト名 とすると、その内容が出力できる。

今回は JDBC データソースを確認したい。なんとなくそれらしいモノを漁ってみる。

wls> cd('/JDBCSystemResources/')
wls> ls()

…などなど。

スクリプトを書いてみる

WLST は Python スクリプトを実装しておき、それを実行させるオプションもある。そこで、対話コンソールで調べた内容をスクリプトファイルに書き起こしていく。

今回、JDBC データソースのモニタリングがしたいので、次のように実装してみた。

# 接続情報を記す
connect('ユーザ名', 'パスワード', 't3://127.0.0.1:7001')

# ヘッダ代わりに print しておく
print 'サーバー名 , 状態 , アクティブな接続の平均数 , 現在アクティブな接続の数 , アクティブな接続の最大数 , 接続待機の現在数 , 接続待機の最大数 , 現在の容量'

# 全サーバを走査する
for server in domainRuntimeService.getServerRuntimes():
  runtime = server.getJDBCServiceRuntime()
  # サーバ1台に紐付く JDBC データソースを走査する
  for datasource in runtime.getJDBCDataSourceRuntimeMBeans():
    # 参照したいデータソース名で絞り込む
    if(datasource.getName() == 'My Connection Pool'):
      # 雑に print する…
      print runtime.getName(), ',', datasource.getState(), ',', datasource.getActiveConnectionsAverageCount(), ',', datasource.getActiveConnectionsCurrentCount(), ',', datasource.getActiveConnectionsHighCount(), ',', datasource.getWaitingForConnectionCurrentCount(), ',', datasource.getWaitingForConnectionHighCount(), ',', datasource.getCurrCapacity()

# 切断・終了
disconnect()
exit()

スクリプト中の 'My Connection Pool' 部分で、参照したいデータソース名で絞り込んでいる。自分が作ったアプリとデータソースに合わせて書き換える。

このような Python スクリプトを書いたら、以下のように実行する。すると、JDBC の「モニタリング」画面と同じデータが取得できる。

# 環境変数の設定は必要
$ source "${WL_HOME}/server/bin/setWLSEnv.sh"

# WLST でスクリプトファイルを実行する
$ java weblogic.WLST -i monitor-jdbc.py

スクリプトの前後に余計な文言が出力されてしまうのが残念ポイント。強引なやり方で余計な出力を削れるようだが、つらい…。

datasource.getHoge() と書き連ねている部分について、どんな項目が取得できるのかは以下が参考になる。お好みでドウゾ。

WLST を叩く前にいちいち source setWLSEnv.sh しないといけないのが面倒だが、次のような実行ファイルを作っておけば少しは楽になるだろうか。

#!/bin/bash

exec_script='/PATH/TO/monitor-jdbc.py'

source "${WL_HOME}/server/bin/setWLSEnv.sh" && java weblogic.WLST -i ${exec_script}"

以上

とりあえずこんな感じで、WLST を使ったモニタリングができるようになった。

WLS 管理コンソールをブラウザで開くよりも手っ取り早く、テキストベースなので diff を取ったりしやすくなって、作業効率化に繋がる…ことを期待。