[WLS] WLST Offline Script to Create Summary of WebLogic Domain

Posted by Unknown Selasa, 07 Mei 2013 0 komentar
原文はこちら。
https://blogs.oracle.com/fmwinstallproactive/entry/wlst_offline_script_to_create

Introduction

問題の調査において、早い段階でより大きい絵を把握することが重要であると常に信じています。例えば、管理対象サーバが問題のある挙動を示している場合、ログを見るだけでなく、背景も知りたいと考えています。例えば…
  • サーバーはクラスタメンバーか?
  • WebLogic Serverドメインに何個のサーバー/クラスターが存在するか?
  • ドメインは複数のマシンにまたがって展開しているか?
  • システムリソース(JDBC、JMSなど)が動作しているか?
WebLogic Serverスクリプティング(WLST)は長年使われており、ブログやウェブサイト、フォーラムで非常に数多くのサンプルがUpされています。大半は、オンラインモードでスクリプトを実行することを前提としていますが、WLSTのオンライン接続が確立できない場合はどうでしょうか。
手動で<DOMAIN_HOME>/config/config.xmlファイルを調べることもできますが、いくつかの構成はconfig.xmlが参照している他のXMLファイルにあるため、これはあまりいい方策とは言えません。きっと別の方法があるはずです。何しろ、WebLogic Serverはドメイン構成をMBeanに保持しているわけですから。そんなわけで、WLSTを検討してみました。

WLST's readDomain Function

WLSTのreadDomain関数をオフラインモードで利用し、ドメインのMBean構成階層/ツリーをロードすることができます。これは以下のように簡単です。

例:Unixマシンの場合
WL_HOME=/oracle/middleware/wlserver_10.3
DOMAIN_HOME=/oracle/middleware/user_projects/domains/MyDomain
$WL_HOME/common/bin/wlst.sh

wls:/offline/readDomain('/oracle/middleware/user_projects/domains/MyDomain')
cdやlsスタイルの構文を使って、ツリーを移動する準備が整いました。
wls:/offline/MyDomain/ls()

drw- AnyMachine
drw- AppDeployment
drw- Cluster
drw- EmbeddedLDAP
drw- FileStore
drw- JDBCSystemResource
drw- JMSServer
drw- JMSSystemResource
drw- Library
drw- MigratableTarget
drw- Security
drw- SecurityConfiguration
drw- Server
drw- ShutdownClass
drw- StartupClass
drw- WLDFSystemResource

-rw- Active false
-rw- AdminServerName AdminServer
-rw- AdministrationMBeanAuditingEnabled false
-rw- AdministrationPort 9002
......(略)

wls:/offline/MyDomain/cd ('Server')
wls:/offline/MyDomain/Server/ls()

drw- AdminServer
drw- MyManagedServer
drw- MyManagedServer01

wls:/offline/MyDomain/Server/cd ('MyManagedServer')
wls:/offline/MyDomain/Server/MyManagedServer/ls()

drw- DataSource
drw- NetworkAccessPoint
drw- SSL
drw- ServerDiagnosticConfig


-rw- AcceptBacklog 300
-rw- AdminReconnectIntervalSeconds 10
-rw- AdministrationPort 0
-rw- AdministrationPortEnabled false
-rw- AdministrationProtocol null

...

-rw- JavaCompilerPostClassPath null
-rw- JavaCompilerPreClassPath null
-rw- JavaStandardTrustKeyStorePassPhraseEncrypted null
-rw- JdbcLoginTimeoutSeconds 0
-rw- KeyStores null
-rw- ListenAddress 127.0.0.1
-rw- ListenDelaySecs 0
-rw- ListenPort 7021
-rw- ListenPortEnabled true

... (略)

wls:/offline/MyDomain/Server/MyManagedServer/foo = get('ListenPort')
wls:/offline/MyDomain/Server/MyManagedServer/print foo

7021

Sample Script and Output

MBeanのツリーを横断して検索する機能がオンラインモードに比べて限られているので、サマリーに有用な属性の中から情報を自動的に取得、表示するスクリプトを書くことは難しいものです。ほとんどの場合、cd()、ls()、get()で立ち往生していますが、IFとFORループ構文を使ってちょっと工夫すると、プログラムでツリーを探索し、きれいなフォーマットで出力することができます。今回のサンプルではHTMLの表を使いました。

Sample Output

サンプル出力結果例はこちらです。スクリーンショットは以下の通りです。

Download Sample Script

サンプルスクリプトはこちらからどうぞ。

Instructions to Run:

1. 起動ラッパースクリプト(UNIXの場合startWLSofflineCollection.sh、Windowsの場合、startWLSofflineCollection.cmd)の環境変数を皆さんの環境に合わせて変更します。

例:startWLSofflineCollection.sh
WL_HOME=/oracle/middleware/wlserver_10.3
DOMAIN_HOME=/oracle/middleware/user_projects/domains/MyDomain; export DOMAIN_HOME
WLST_OUTPUT_PATH=/temp/wlst/; export WLST_OUTPUT_PATH
WLST_OUTPUT_FILE=WLST_MBean_Config_Summary.html; export WLST_OUTPUT_FILE

${WL_HOME}/common/bin/wlst.sh CollectWLSConfigOffline.py
(注意)WLST_OUTPUT_PATH ディレクトリの値はスラッシュ(/)(Windowsの場合は\)で終わる必要があります。スラッシュがないと、スクリプトはエラーになって動作しません。

2. ラッパースクリプトを実行します。wlst.cmdを呼び出し、MBeanの値を収集してHTMLファイルに描画するはずです。
(スクリプトがWLSTシェルを呼び出しますが、Pythonスクリプトの実行は5~10秒程度です)

Disclaimer

これはMS Windows、Linuxで動作するWebLogic Server 10.3.6のドメインに対しテストしたサンプルスクリプトです。皆様の環境でエラーが発生しないとか、期待した結果を出すことを保証できません。数多くの同僚がこのスクリプトを使い、そのフィードバックをもっていくつかの問題を解決しました。もしフィードバックすべきことがあれば、このブログエントリのコメントにお願いいたします。WLSTコードの問題を修正するようにつとめます。

Credits

以下のエントリが非常に参考になりました。
Invoking FMW Application MBeans in Weblogic  (Java / Oracle SOA blog)
http://biemond.blogspot.co.uk/2010/02/invoking-fmw-application-mbeans-in.html
WLST By Examples
http://wlstbyexamples.blogspot.co.uk/

Some Pitfalls (which required coding around)

Checking whether Configuration MBean Hierarchy Exists

クラスタやJDBC、JMS、ファイルストアなどのサービスや機能が構成されていない場合、間rねするMBean階層がドメインレベルでのリストに現れません。例えば、ClusterやJDBC、JMS、ファイルストアが構成されていない場合、ls()を使うと以下のように表示されます。
wls:/offline/MyDomain/ls()

drw- AnyMachine
drw- AppDeployment
drw- EmbeddedLDAP
drw- Library
drw- MigratableTarget
drw- Security
drw- SecurityConfiguration
drw- Server
drw- ShutdownClass
drw- StartupClass
drw- WLDFSystemResource
プログラムでcdで表示されないディレクトリに移動しても以下のようなエラーが返ります。
Error: cd() failed. Do dumpStack() to see details.
これを回避するため、スクリプトにはカスタムのfindMBean関数が含まれています。この関数はreturnmapパラメータを使う配列にls()のコンテンツを格納しますので、配列を使って繰り返し処理をして指定した文字列(MBeanディレクトリ名)が存在するかどうかをチェックすることができます。
def findMBean(v_pattern):
# get a listing of everything in the current directory
mydirs = ls(returnMap='true');

v_compile_pattern = java.util.regex.Pattern.compile(v_pattern);

found = 'Nope not here';

for mydir in mydirs:
x = java.lang.String(mydir);
v_matched = v_compile_pattern.matcher(x);
if v_matched.find():
found = 'true';
return found;

AnyMachine v Machines

WebLogic Server 10.3では、ドメインに複数のマシンが構成されている(つまりマシンに関連するノードマネージャがある)場合、ドメインレベルでのls()は以下のように表示されます。
wls:/offline/MyDomain/ls()

drw- AnyMachine
しかし、cd ('AnyMachine')は失敗します。正しいcdの構文は以下の通りです。
wls:/offline/MyDomain/cd ('Machines')

Identifying Target Information

JDBCシステムリソースやクラスタのような機能にはターゲットがある場合とない場合があります。存在しないMBeanディレクトリへ移動しようとしたり、存在しないMBean属性を取得しようとすると、エラーが発生し、スクリプトは以後の処理を継続できません。これを回避するためには、TRY/ECXEPT構文を使うことができます。以下のサンプルスクリプトでは、JDBCシステムリソースターゲットを取得し処理しています。
try:
v_any_targets = '';
v_jdbc_target = get('Target');

# Even if the get fails, the variable is assigned a value of none, set the flag variable accordingly
if v_jdbc_target == 'None':
v_any_targets = 'None';
v_no_of_targets = 1;
else:
# If the get has succeeded then set flag accordingly and obtain length of array returned by the get
# The array length will be used to determine the HTML rowspan value

v_any_targets ='Use v_jdbc_target';
v_no_of_targets = len(v_jdbc_target);

except:

# Setting flag and rowspan variable here as well .. belt and braces
v_any_targets = 'None';
v_no_of_targets = 1;

# The exception will still display to standard out, which may cause alarm
# So adding this message telling the user the exception is expected and can be ignored
print "IGNORE this exception";
TERIMA KASIH ATAS KUNJUNGAN SAUDARA
Judul: [WLS] WLST Offline Script to Create Summary of WebLogic Domain
Ditulis oleh Unknown
Rating Blog 5 dari 5
Semoga artikel ini bermanfaat bagi saudara. Jika ingin mengutip, baik itu sebagian atau keseluruhan dari isi artikel ini harap menyertakan link dofollow ke http://apk-zipalign.blogspot.com/2013/05/wls-wlst-offline-script-to-create.html. Terima kasih sudah singgah membaca artikel ini.

0 komentar:

Posting Komentar

Trik SEO Terbaru support Online Shop Baju Wanita - Original design by Bamz | Copyright of apk zipalign.