[WLS] WebLogic Server JMS WLST Script – Who is Connected To My Server

トラブルシューティングのために、WebLogic Serverのインスタンスに接続しているクライアントを知りたいですか?今週、このトピックとJMSに関してメールをやりとりしていましたが、以前にも一度か二度出てきた内容でした。時にはそれが特定のJMSサーバに接続されているJMSクライアントのリスト(IPアドレス、JMS送り先、メッセージ数)を知ることは、興味深い内容であったり、トラブルシューティングに役立つ内容です。 WebLogic Server JMSチームのTom Barnesが有用なアドバイスをしてくれました。

JMS接続ランタイムmbeanには“getHostAddress”というメソッドがあり、接続しているクライアントJVMのホストアドレスを文字列で返す。

接続ランタイムにはセッションランタイムを収容できる。セッションランタイムは同様にコンシューマランタイムを収容できる。コンシューマランタイムは、同様に“getDestinationName” と“getMemberDestinationName”というメソッドを持っている。つまり、WSLTスクリプトを作成して、例えばすべてのコンシューマ、送り先に加えて、親セッションの親の接続ホストアドレスをダンプすることができるということだと思う。

クライアントランタイムmbeans(接続、セッション、コンシューマ)は必ずしも同じクラスタ内の宛先と同じJVM上でホストされないことに注意する必要がある(その接続のホストから同じクラスタ内の最終的な宛先へのクライアントメッセージの経路)。

スクリプトの作成
したがって、この情報で武装し、WLSTスクリプトで実現可能か、試すことにしました。このような活動にはWebLogic Server MBeanリファレンスが手元にあると重宝します。
これは、JMSコンシューマに焦点を当て、入手可能な情報のサブセットしか取得しませんでしたが、プロデューサに焦点を当てるために変更することも簡単でした。それほど複雑な環境でテストしていませんが、単純なサンドボックスでは動作しましたので一般的アイデアとしてとらえて下さい。
# Better to use Secure Config File approach for login as shown here http://buttso.blogspot.com/2011/02/using-secure-config-files-with-weblogic.html
connect('weblogic','welcome1','t3://localhost:7001')

# Navigate to the Server Runtime and get the Server Name
serverRuntime()
serverName = cmo.getName()

# Multiple JMS Servers could be hosted by a single WLS server
cd('JMSRuntime/' + serverName + '.jms' )
jmsServers=cmo.getJMSServers()

# Find the list of all JMSServers for this server
namesOfJMSServers = ''
for jmsServer in jmsServers:
 namesOfJMSServers = jmsServer.getName() + ' '

# Count the number of connections
jmsConnections=cmo.getConnections()
print str(len(jmsConnections)) + ' JMS Connections found for ' + serverName + ' with JMSServers ' + namesOfJMSServers

# Recurse the MBean tree for each connection and pull out some information about consumers
for jmsConnection in jmsConnections:
 try:
  print 'JMS Connection:'
  print '  Host Address = ' + jmsConnection.getHostAddress()
  print '  ClientID = ' + str( jmsConnection.getClientID() )
  print '  Sessions Current = ' + str( jmsConnection.getSessionsCurrentCount() )
  jmsSessions = jmsConnection.getSessions()
  for jmsSession in jmsSessions:
   jmsConsumers = jmsSession.getConsumers()
   for jmsConsumer in jmsConsumers:
    print '   Consumer:'
    print '     Name = ' + jmsConsumer.getName()
    print '     Messages Received = ' + str(jmsConsumer.getMessagesReceivedCount())
    print '     Member Destination Name = ' + jmsConsumer.getMemberDestinationName()
 except:
  print 'Error retrieving JMS Consumer Information'
  dumpStack()

# Cleanup
disconnect()
exit()
出力例
このような感じですべての接続にわたって繰り返して表示します。以下は最初の接続です。
1 JMS Connections found for AdminServer with JMSServers myJMSServer
JMS Connection:
  Host Address = 127.0.0.1
  ClientID = None
  Sessions Current = 16
   Consumer:
     Name = consumer40
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
クライアントのIPアドレスがわかることに着目して下さい。16個の接続をデフォルトで使用するMDBを使っているので、16セッション開いています。表示全体は以下のようになっています。
D:\Oracle\fmw11gr1ps3\user_projects\domains\offline_domain>java weblogic.WLST d:\temp\jms.py

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Connecting to t3://localhost:7001 with userid weblogic ...
Successfully connected to Admin Server 'AdminServer' that belongs to domain 'offline_domain'.

Warning: An insecure protocol was used to connect to the
server. To ensure on-the-wire security, the SSL port or
Admin port should be used instead.

Location changed to serverRuntime tree. This is a read-only tree with ServerRuntimeMBean as the root.
For more help, use help(serverRuntime)

1 JMS Connections found for AdminServer with JMSServers myJMSServer
JMS Connection:
  Host Address = 127.0.0.1
  ClientID = None
  Sessions Current = 16
   Consumer:
     Name = consumer40
     Messages Received = 2
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer34
     Messages Received = 2
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer37
     Messages Received = 2
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer16
     Messages Received = 2
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer46
     Messages Received = 2
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer49
     Messages Received = 2
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer43
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer55
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer25
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer22
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer19
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer52
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer31
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer58
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer28
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
   Consumer:
     Name = consumer61
     Messages Received = 1
     Member Destination Name = myJMSModule!myQueue
Disconnected from weblogic server: AdminServer


Exiting WebLogic Scripting Tool.
ヒントをくれたTom Barnesに感謝します。


原文はこちら。
http://blogs.oracle.com/jamesbayer/entry/weblogic_server_jms_wlst_script

0 件のコメント:

コメントを投稿