[WLS, Java, FMW] Weblogic Server 12.2.1 Multi-Tenancy Diagnostics Overview

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/wls_mt_diagnostics_overview

Introduction

WebLogic Server 12.2.1ではMultitenancyをサポートしており、これにより複数のテナントが一つのWebLogicドメインを共有することができます。
Oracle® Fusion Middleware Using WebLogic Server Multitenant 12c (12.2.1)
About WebLogic Server MT
http://docs.oracle.com/middleware/1221/wls/WLSMT/concepts.htm#WLSMT718
テナントは、別々のWebLogicドメインの設定やランタイムインフラストラクチャのスライスを提供するドメインパーティションにアクセスします。
このエントリでは、各パーティションにデプロイされたアプリケーションやリソースに対しテナントが利用可能な診断・監視機能の概要を紹介します。

これらの機能はWebLogic Server Diagnostic Framework(WebLogic Server診断フレームワーク、WLDF)コンポーネントが提供します。
以下のトピックについて各セクションで説明します。

Log and Diagnostic Data

様々なソースからのログと診断データはパーティション管理者が利用できます。これらのログや診断データは以下のように大別できます。
  1. 共有データ - ログと診断データはパーティション管理者が直接生の永続化された形で利用することはできず、WLDFアクセッサコンポーネントを使ってのみ利用できる。
    Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1)
    Accessing Diagnostic Data With the Data Accessor
    http://docs.oracle.com/middleware/1221/wls/WLDFC/access_diag_data.htm#WLDFC272
  2. パーティションスコープのデータ - これらのログは、パーティションファイルシステムのディレクトリ配下でRaw形式でパーティション管理者が利用可能
WLDFデータアクセッサコンポーネントは、共有ログとパーティションスコープのログおよび、WebLogic Serverインスタンスでパーティションに対して利用可能とされている診断データにアクセスすることができますのでご注意ください。

以下の共有ログと診断データへは、パーティション管理者がアクセスできます。
ログの種類 内容
Server Server.logファイルに記録された、パーティションに関連する、サーバやアプリケーションコンポーネントからのログイベント
Domain パーティションに関連するWebLogicドメインのすべてのサーバインスタンスから収集されたログイベント。単一のログファイル。
DataSource パーティションに関連するDataSourceログイベント
HarvestedData Archive WLDF Harvesterがパーティションに関連するMBeanから収集したメトリックデータ
Instrumentation Events Archive パーティションにデプロイされたアプリケーションが生成するWLDFインストルメンテ-ションイベント

以下のパーティションスコープのログや診断データあはパーティション管理者からアクセスできます。
ログの種類 内容
HTPP access.log パーティションの仮想ターゲットのWebサーバからのHTTPアクセスログ
JMSServer パーティションを対象にしたリソースグループやリソースグループテンプレート内で定義されたJMSサーバリソースの、JMSサーバメッセージライフサイクルイベント
SAF Agent パーティションを対象にしたリソースグループやリソースグループテンプレート内で定義されたSAFエージェントリソースの、SAFエージェントメッセージライフサイクルイベント
Connector パーティション内のリソースグループやリソースグループテンプレートにデプロイされたJava EEリソースアダプタモジュールが生成したログデータ
Servlet Context パーティション内のリソースグループやリソースグループテンプレートにデプロイされたJava EE Webアプリケーションモジュールが生成する、サーブレットコンテキストログデータ

WLDF Accessor

WLDFアクセッサは診断データをJMX経由で取得するためのRuntimeBeanインターフェースを提供します。データのサブセットのみ取得するためのクエリ機能も提供しています。
この機能の詳細情報を知りたい方は、WLDFデータアクセッサのドキュメントをご覧ください。
Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1)
Accessing Diagnostic Data With the Data Accessor
http://docs.oracle.com/middleware/1221/wls/WLDFC/access_diag_data.htm#WLDFC272
WLDFPartitionRuntimeMBeanはPartitionRuntimeMBeanの子であり、WLDFランタイムMBeanのルートです。このMBeanは、パーティションを対象にしたWLDFアクセッサ機能のためのエントリポイントである、WLDFPartitionAccessRuntimeMBeanインターフェースのgetterを提供します。パーティションで利用可能な、各ログインスタンスに対するWLDFDataAccessRuntimeMBeanのインスタンスがあります。
WebLogic Server MBean Reference
WLDFPartitionRuntimeMBean
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/WLDFPartitionRuntimeMBean.html
PartitionRuntimeMBean
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/PartitionRuntimeMBean.html
WLDFPartitionAccessRuntimeMBean
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/WLDFPartitionAccessRuntimeMBean.html
WLDFDataAccessRuntimeMBean
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/WLDFDataAccessRuntimeMBean.html
事前定義された命名方式に従い、論理名によって異なるログが参照されます。
下表は異なるパーティション対象のログに対する論理名のパターンをまとめたものです。

Shared Logs

ログの種類 論理名
Server Log ServerLog
Domain Log DomainLog
JDBC Log DataSourceLog
Harvested Metrics HarvestedDataArchive
Instrumentation Events EventsDataArchive

Partition Scoped Logs

ログの種類 論理名
HTTP Access Log HTTPAccessLog/<Webサーバ名>
JMS Server Log JMSMessageLog/<JMSサーバ名>
SAF Agent Log JMSSAFMessageLog/<SAFエージェント名>
Servlet Context Log WebAppLog/<Webサーバ名>/context-path
Connector Log ConnectorLog/connection-Factory-jndiName$<パーティション名>

Logging Configuration

WebLogic Server Multitenancyはパーティション内で実行するアプリケーションコンポーネントが利用するjava.util.logging.Loggers内のレベルの構成をサポートしています。これにより、java.util.loggingを使うJava EEアプリケーションは、システムレベルのjava.util.loggingの設定機構にアクセスできなくても、それぞれのログレベルを設定することができるようになります。パーティション間で使われる、共通ライブラリが利用する共有ロガーインスタンスの場合、特定のパーティションに変わって設定しているのであれば、そのレベル構成もまたLoggerインスタンスに適用されます。
この機能はWebLogic Serverシステム管理者が、
-Djava.util.logging.manager=weblogic.logging.WLLogManager
というコマンドライン・システムプロパティを付けて起動した場合に有効になります。

WebLogic Serverを上述のようにカスタムログマネージャを使って起動すると、パーティション管理者は以下のようにロガーを構成できます。
WebLogic Server Multitenanctのドキュメント中にある、WLSTサンプルスクリプトをチェックしてください。
Oracle® Fusion Middleware Using WebLogic Server Multitenant 12c (12.2.1)
Configuring Partition Scope Debugging
http://docs.oracle.com/middleware/1221/wls/WLSMT/monitoring.htm#WLSMT1337
PartitionLogMBean.PlatformLoggerLevels属性で指定したレベルの設定は所有するパーティションに対してのみ有効です。同名のロガーインスタンスを別のパーティションで利用することができ、各ロガーの実行時の有効レベルは、それぞれのパーティションでのPartitionLogMBean.PlatformLoggerLevelsの設定によって定義されます。

Server Debug

あるトラブルシューティングのシナリオでは、パーティション固有のWebLogic Serverのサブシステムからのデバッグ出力を有効化する必要がある場合があります。サーバデバッグ出力はパーティションに代わって内部サーバコードのデバッグをする際に役に立ちますが、WebLogic Serverシステム管理者やOracle Supportと協同して注意しながら実施する必要があります。WebLogic Serverシステム管理者はまず ServerDebugMBean.PartitionDebugLoggingEnabled 属性を有効化する必要があります。その上で、特定のデバッグフラグを有効化するよう指示があります。これらのフラグはBoolean型の属性で、ServerDebugMBean構成インターフェースで定義されています。パーティションに対して有効化すべき特定のデバッグフラグをPartitionLogMBean.EnabledServerDebugAttributes属性を使って構成します。
WebLogic Server MBean Reference
PartitionLogMBean.EnabledServerDebugAttributes
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/PartitionLogMBean.html#EnabledServerDebugAttributes
パーティションに対して有効化するための特定のデバッグ出力の名前の配列(String型)を含んでいます。デバッグ出力をサーバログに記録します。この出力はWLDFアクセッサを使って取り出すことができ、Oracle Supportにより詳細の分析をするために提供することができます。サーバデバッグを有効化するとパフォーマンスのオーバーヘッドが発生するため、トラブルシューティングが終われば、デバッグフラグを無効化する必要があることにご注意ください。

パーティション固有のサーバデバッグを有効化する方法については、WebLogic Server MultitenancyドキュメントにあるWLSTサンプルスクリプトを参照してください。
Oracle® Fusion Middleware Using WebLogic Server Multitenant 12c (12.2.1)
Configuring Partition Scope Debugging
http://docs.oracle.com/middleware/1221/wls/WLSMT/monitoring.htm#WLSMT1337 

Diagnostic System Module for Partitions

Diagnostic System Module(DSM、診断システムモジュール)は、ハーベスタ、ポリシー、パーティションにデプロイされたリソースグループやリソースグループテンプレートで定義可能なActionコンポーネントを提供します。

Harvester

WLDFハーベスタはMBeanメトリック値を定期的にポーリングし、後の診断や分析用に収集したデータをアーカイブする機能を提供します。PartitionRuntimeMBeanとその子MBeanだけでなく、パーティションにデプロイされたアプリケーションが作成したMBeanも含め、パーティションから見えるすべてのWebLogic ServerランタイムMBeanを収集することができます。
WebLogic Server MBean Reference
PartitionRuntimeMBean
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/PartitionRuntimeMBean.html 
ハーベスタ構成では、サンプリング間隔、MBeanの主対、インスタンスの仕様、収集し永続化する必要のあるそれぞれのMBean属性を定義します。アーカイブされた収集済みメトリックデータは、前述の通りWLDFアクセッサコンポーネントから利用可能であることにご注意ください。
以下のXMLは、診断システムリソースXMLディスクリプタに永続化されたハーベスタの構成例です。
<harvester>
 <enabled>true</enabled>
 <sample-period>2000</sample-period>
 <harvested-type>
   <name>weblogic.management.runtime.ServletRuntimeMBean</name>
   <harvested-attribute>ExecutionTimeAverage</harvested-attribute>
   <namespace>ServerRuntime</namespace>
 </harvested-type>
 <harvested-type>
  <name>sandbox.mbean.SandboxCustomMBeanImpl</name>
  <namespace>ServerRuntime</namespace>
 </harvested-type>
</harvester>

WLDFハーベスタに関する詳細情報は、以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1)
Configuring the Harvester for Metric Collection
http://docs.oracle.com/middleware/1221/wls/WLDFC/config_harvester.htm#WLDFC172

Policies and Actions

ポリシーとは、監視対象の条件をJavaの式言語(EL)で定義したルールです。WLDFでは、ルール条件を満足した場合に動き出すポリシーに添付することができるアクションを豊富に提供しています。

以下のタイプのルールベースのポリシーを定義することができます。
  • ハーベスタ:WebLogicランタイムMBeanのメトリックもしくはアプリケーションが有するカスタムMBeanのメトリックに基づく
  • ログイベント:サーバログやドメインログのログメッセージに基づく
  • インストゥルメンテ-ションイベント:WLDFインストゥルメンテ-ションを使うJava EEアプリケーションの測定コードから生成されたイベント
以下のスニペットはEL言語(EL式)を使ったポリシー構成の例です。
<watch>
  <name>Session-Count-Watch</name>
  <enabled>true</enabled>
  <rule-type>Harvester</rule-type>
    <rule-expression>wls.partition.query("com.bea:Type=WebAppComponentRuntime,*", "OpenSessionsCurrentCount").stream().anyMatch(x -> x >= 1)
  </rule-expression>
  <schedule>
    <minute>*</minute>
    <second>*/2</second>
  </schedule>
  <notification>jmx-notif1</notification>
</watch>
<watch>
  <name>Partition-Error-Log-Watch</name>
  <rule-type>Log</rule-type>
  <rule-expression>log.severityString == 'Error'</rule-expression>
  <notification>jmx-notif1,r1,r2</notification>
</watch>
<watch>
 <name>Inst-Trace-Event-Watch</name>
  <rule-type>EventData</rule-type>
  <rule-expression>instrumentationEvent.eventType == 'TraceAction'</rule-expression>
  <notification>jmx-notif1</notification>
</watch>
以下の種類のアクションをパーティションでサポートしています。
  • JMS
  • SMTP
  • JMX
  • REST
  • Diagnostic Image
ポリシーやアクションの構成について詳細は以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1)
Configuring Policies and Actions
http://docs.oracle.com/middleware/1221/wls/WLDFC/config_watch_notif.htm#WLDFC188

Instrumentation for Partition Applications

WLDFは、パーティション・スコープにデプロイされたJava EEアプリケーションのためのバイトコード・インストゥルメンテ-ション・メカニズムを提供しています。アプリケーション用インストゥルメンテ-ションの構成は、META-INF/weblogic-diagnositcs.xml ディスクリプタファイルで指定します。

WebLogic Serverシステム管理者がサーバレベルのインストゥルメンテ-ションを有効化している場合にのみ、この機能は利用可能です。また、パーティションにわたってクラスローダを共有するアプリケーションに対しては利用できません。

以下はWLDFインストゥルメンテ-ションディスクリプタファイルの例です。
<wldf-resource xmlns="http://xmlns.oracle.com/weblogic/weblogic-diagnostics/1.0/weblogic-diagnostics.xsd">
  <instrumentation><enabled>true</enabled>
  <wldf-instrumentation-monitor>
    <name>Servlet_Before_Service</name>
    <enabled>true</enabled>
  <action>TraceAction</action>
  </wldf-instrumentation-monitor>
  <wldf-instrumentation-monitor>
    <name>MyCustomMonitor</name>
    <enabled>true</enabled>
    <action>TraceAction</action>
    <location-type>before</location-type>
    <pointcut>execution( * example.util.MyUtil * (...))</pointcut>
  </wldf-instrumentation-monitor>
</instrumentation>
For further details refer to the WLDF Instrumentation documentation.

Diagnostic Image

診断イメージは単一のZipファイル中に様々なWebLogic Serverのサブシステムの状態をキャプチャするコアダンプに似ています。WLDFはパーティション固有の診断イメージのキャプチャをサポートしています。
診断イメージは以下の方法で取得できます。
パーティションのファイルシステムのlogs/diagnostic_imagesディレクトリにイメージを出力します。
パーティションイメージには以下のような様々なソースからの診断データが含まれています。
  • Connector
  • Instrumentation
  • JDBC
  • JNDI
  • JVM
  • Logging
  • RCM
  • Work Manager
  • JTA
詳細情報はWLDFのドキュメントをご覧ください。
Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1)
Configuring and Capturing Diagnostic Images
http://docs.oracle.com/middleware/1221/wls/WLDFC/config_diag_images.htm#WLDFC150

RCM Runtime Metrics

WebLogic server 12.2.1ではリソース消費管理(Resource Consumption Management, RCM)機能が導入されました。この機能はOracle JDK 8u40以後でのみ利用可能です。
Oracle® Fusion Middleware Using WebLogic Server Multitenant 12c (12.2.1)
Configuring Resource Consumption Management
http://docs.oracle.com/middleware/1221/wls/WLSMT/config_rcm.htm#WLSMT630
RCMを有効にするには、以下のコマンドラインスイッチをサーバー起動時のスクリプトに追加する必要があります。
-XX:+UnlockCommercialFeatures -XX:+ResourceManagement -XX:+UseG1GC
RCMは起動スクリプトではデフォルトで有効化されていないことにご注意ください。
PartitionRuntimeMBeanの子であるPartitionResourceMetricsRuntimeMBeanは監視目的で役立つメトリックを提供します。
WebLogic Server MBean Reference
PartitionResourceMetricsRuntimeMBean
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/PartitionResourceMetricsRuntimeMBean.html
PartitionRuntimeMBean
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/PartitionRuntimeMBean.html
属性のGetter説明
isRCMMetricsDataAvailable()Checks whether RCMメトリックデータがこのパーティションで利用可能かどうかを確認する。
getCpuTimeNanos()パーティションに関わる総CPU利用時間(nsec)
getAllocatedMemory()パーティションに割り当てられたメモリの総量(byte)。このメトリック値は時間がたつにつれて単調増加する。
getThreadCount()現在パーティションに割り当てられているスレッドの個数
getTotalOpenedSocketCount()

getCurrentOpenSocketCount()
(上)パーティションに関わるオープンしているソケットの総数
(下)現在オープンしているソケットの個数
getNetworkBytesRead()

getNetworkBytesWritten()
(上)パーティションで開いているソケットから読み込んだ総バイト数
(下)パーティションで開いているソケットに書き込んだ総バイト数
getTotalOpenedFileCount()

getCurrentOpenFileCount()
(上)パーティションで開いているファイルの総数
(下)パーティションで現在開いているファイルの個数
getFileBytesRead()

getFileBytesWritten()
(上)パーティションで開いているファイルから読み込んだ総バイト数
(下)パーティションで開いているファイルに書き込んだ総バイト数
getTotalOpenedFileDescriptorCount()

getCurrentOpenFileDescriptorCount()
(上)パーティションで開いているファイル識別子の総数
(下)パーティションで現在開いているファイル識別子の個数
getRetainedHeapHistoricalData()パーティションに保持されるヒープメモリ使用量の履歴データのスナップショットを返す。データはパーティションで保持されたヒープの利用状況の時系列データのため、2次元配列として返す。配列内の各項目は、[timestamp (long), retainedHeap (long) ]の値の組み合わせ。
getCpuUtilizationHistoricalData()パーティションのCPU使用率の履歴データのスナップショットを返す。CPU使用率は、WebLogic Serverで’使用可能なCPUに対する、パーティションが利用したCPUの割合を示す。
パーティションのCPU利用率は時系列データなので、2次元配列として返す。配列内の各項目は、[timestamp (long), cpuUsage(long)]の値の組み合わせ。
PartitionMBean.RCMHistoricalDataBufferLimit属性がヒープやCPUのデータ配列のサイズを制限するということにご注意ください。
WebLogic Server MBean Reference
PartitionMBean.RCMHistoricalDataBufferLimit
http://docs.oracle.com/middleware/1221/wls/WLMBR/mbeans/PartitionMBean.html#RCMHistoricalDataBufferLimit

Java Flight Recorder

WLDFはJava Flight Recorderと統合し、WebLogic ServerのイベントをJVM記録に含めることができるようになっています。
Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1)
Using WLDF with Java Flight Recorder
http://docs.oracle.com/middleware/1221/wls/WLDFC/using_flightrecorder.htm#WLDFC423
パーティションの変わりに実行されたワークのコンテキストで生成されたWebLogic ServerイベントにはパーティションIDとパーティション名がタグ付けされています。これらのイベントとFlight RecordingデータはWebLogic Serverシステム管理者だけが利用できます。

Conclusion

WLDFは、トラブルシューティングや診断タスクで非常に役に立つ様々なタイプの監視データを収集、アクセスするための豊富なツール群を提供します。このブログエントリでは、パーティション管理者のためのWLDFの入門情報をご紹介しました。深掘りしてこれらの機能を確認し、本番環境で活用されることをお勧めします。その他の詳細情報は、以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Configuring and Using the Diagnostics Framework for Oracle WebLogic Server 12c (12.2.1)
http://docs.oracle.com/middleware/1221/wls/WLDFC/
Oracle® Fusion Middleware Using WebLogic Server Multitenant 12c (12.2.1)
Monitoring and Debugging Partitions
http://docs.oracle.com/middleware/1221/wls/WLSMT/monitoring.htm#WLSMT639

0 件のコメント:

コメントを投稿