Corredor

ウェブ、プログラミングの勉強メモ。

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

久々に WLS (WebLogic Server) ネタ。

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

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

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

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

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

neos21.hatenablog.com

環境変数 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 のディレクトリを移動し、ファイルを開くかのように行っていく。次のようなコマンドを叩いてみよう。

  • pwd() : 現在の位置が確認できる
    • Python (JPython?) の関数として実行するので、コマンドとは違ってカッコ () が必要
  • cd('パス') : 指定のパスに移動する。カッコの中は、文字列を引数で渡す形になるので、クォートが必要
    • cd('/') でルートに移動、cd('../') で1階層上がる、といった感じ
  • ls() : 当該パス配下のディレクトリやオブジェクトが確認できる

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

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

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

…などなど。

スクリプトを書いてみる

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

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

  • monitor-jdbc.py
# 接続情報を記す
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 しないといけないのが面倒だが、次のような実行ファイルを作っておけば少しは楽になるだろうか。

  • monitor-jdbc.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 を取ったりしやすくなって、作業効率化に繋がる…ことを期待。

BEA Weblogic Server構築・運用ガイド

BEA Weblogic Server構築・運用ガイド