Payara の Asadmin Recorder を活用する

この記事は、Payara Advent Calendar 2016 の 9 日目です。昨日は「Payara の Request Tracing Service」です。今回は Asadmin Recorder について、復習も兼ねて取り上げてみたいと思います。

1. Asadmin Recorder とは

Asadmin Recorder は、Payara の管理コンソール上で行った動作を asadmin コマンドで実行可能なスクリプトとして記録する機能です。

Payara 4.1.1.162 以降で管理コンソールを開くと、右上に「Enable Asadmin Recorder」というボタンが追加されていると思います (figure 1)。

enable-asadmin-recorder.png
figure 1 - Enable Asadmin Recorder ボタン

このボタンをクリックすると、それ以降の管理コンソール上の操作がファイル (既定では payara41/glassfish/domains/domain1/asadmin-commands.txt) に記録されてゆきます。再度ボタンをクリックすると記録を停止します。

生成されたスクリプト (ここでは既定の asadmin-commands.txt とします) は標準出力からパイプで asadmin に渡すことでそのままスクリプトとして使用することができます。

(Linux/Unix/Mac) $ cat asadmin-commands.txt | asadmin

(Windows) > type asadmin-commands.txt | asadmin

Asadmin Recorder によって、例えば WebLogic Server が装備している WLST のような使い方が可能になります (スクリプトに制御構文がないため WLST のような柔軟性はありませんが)。

2. asadmin コマンドについて

asadmin は Payara の起動に使用するコマンドです。ただし、他の Java EE サーバー製品が単なる起動スクリプトであるのに対し、asadmin は CLI の管理ユーティリティーである点が異なります。

Payara の管理は、究極的には asadmin と REST backend の 2 通りしか用意されていません。管理コンソールもその実体は REST backend のフロントエンドとして動作する Web アプリケーションです。

asadmin は Payara のすべてを操作することが可能ですが、REST backend ではいくつかの操作が行えません。具体的には、DAS の起動は REST backend では実行できない操作です。

asadmin にはシングルモードとマルチモードという、2 種類の動作モードがあります。

(1) シングルモード

asadmin の基本となるモードです。

# asadmin サブコマンド名 [パラメーター]

パラメーターはサブコマンドによって異なります(サブコマンドによってはパラメーターがない場合もあります)。

(2) マルチモード

複数のサブコマンドを続けて入力することができるモードです。「asadmin」とだけ入力するとマルチモードになります。その後はプロンプト「asadmin>」に続いてサブコマンドを次々と入力してゆきます。すべてが終わったら「exit」コマンドでマルチモードを終了します。

# asadmin
Use "exit" to exit and "help" for online help.
asadmin> サブコマンド名 [パラメーター]
...
asadmin> exit

マルチモードでは、実行したいサブコマンドのリストをファイルとして作成しておくことで、サブコマンドのバッチ実行が可能になります。

# cat サブコマンド一覧ファイル | asadmin

Asadmin Recorder で生成されたスクリプトの実行も、マルチモードを利用します。

3. Asadmin Recorder を使う

それでは、実際に Asadmin Recorder を使用してみます。まずは Asadmin Recorder を有効化 (figure 1) し、操作記録を開始します。

step1-enable-asadmin-recorder.png
figure 1 - Asadmin Recorder の有効化

続いて、サンプル操作として Hazelcast を有効化してみます (figure 2)。

step2-enable-hazelcast.png
figure 2 - Hazelcast の有効化

もう一つのサンプル操作として、ログ出力形式を既定値の ODL から新しく追加された JSON に変更してみましょう (JSON Log Formatter については後日ご紹介します)。

step3-set-logger-to-json.png
figure 3 - ログ出力形式の変更 (ODL から JSON に変更)

最後に Asadmin Recorder を無効化し、ここまでの操作を記録したスクリプトを生成します。

step4-disable-asadmin-recorder.png
figure 4 - Asadmin Recorder の無効化

ここまでの操作を記録した asadmin-commands.txt の内容は以下の通りです。

set-hazelcast-configuration --startPort=5900 --licenseKey= --hazelcastConfigurationFile=hazelcast-config.xml --clusterName=development --clusterPassword=D3v3l0pm3nt --dynamic=true --multicastPort=54327 --enabled=true --multicastGroup=224.2.2.3 --jndiName=payara/Hazelcast --target=server 
set-log-attributes --target=server-config java.util.logging.FileHandler.pattern='%h/java%u.log'
set-log-attributes --target=server-config java.util.logging.FileHandler.count='1'
set-log-attributes --target=server-config java.util.logging.FileHandler.formatter='java.util.logging.XMLFormatter'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes='0'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.excludeFields=''
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.compressOnRotation='false'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.multiLineMode='true'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.retainErrorsStasticsForHours='0'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.rotationOnDateChange='false'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.formatter='fish.payara.enterprise.server.logging.JSONLogFormatter'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles='0'
set-log-attributes --target=server-config handlerServices='com.sun.enterprise.server.logging.GFFileHandler,com.sun.enterprise.server.logging.SyslogHandler'
set-log-attributes --target=server-config java.util.logging.FileHandler.limit='50000'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.file='${com.sun.aas.instanceRoot}/logs/server.log'
set-log-attributes --target=server-config handlers='java.util.logging.ConsoleHandler'
set-log-attributes --target=server-config java.util.logging.ConsoleHandler.formatter='com.sun.enterprise.server.logging.UniformLogFormatter'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.flushFrequency='1'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.logtoConsole='false'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.SyslogHandler.useSystemLogging='false'
set-log-attributes --target=server-config log4j.logger.org.hibernate.validator.util.Version='warn'
set-log-attributes --target=server-config com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes='2000000'

4. Asadmin Recorder の活用方法

Payara Server の設定の多くは、管理コンソールで行うのが簡単です。しかし、複数の Payara Server で同一の設定をしなければいけない場合 (クラスタ構成を採る場合など)、すべてのノードに対して管理コンソールで設定を行うのは面倒です。そこで、Asadmin Recorder を有効にして基準となるサーバーの設定を管理コンソールで行い、他のサーバーの設定を出力されたスクリプトでバッチ実行すると、設定に関わる時間を大幅に短縮することができます。

あるいは、Payara Server の設定内容を Asadmin Recorder で記録しておき、障害発生時のリストア作業に用いる方法も考えられます。こちらもバッチ処理で設定が行えるため、リストアにかかる時間を短縮することが可能です。